General Navigation Buttons - Home | Search | Contact Us | Site Map | Whats New
products graphic
white space
products
Software Technology Roadmap
What's New
Background & Overview
Technology Descriptions
Defining Software Technology
Technology Categories
Template for Technology Descriptions
Taxonomies
Glossary & Indexes
Feedback & Participation
Software Engineering Information Repository (SEIR)
white space
About SEI|Mgt|Eng|Acq|Collaboration|Prod.& Services|Pubs
pixel
Rollover Popup Hints for Topic Navigation Buttons above
pixel
Java(TM)


Status

Advanced

Purpose and Origin

JavaTM is an object-oriented programming language (see Object-Oriented Programming Languages) developed by a small team of people headed by James Gosling at Sun Microsystems (development began in 1991) [Sun 97e]. It was originally intended for use in programming consumer devices, but when the explosion of interest in the Internet began in 1995 it became clear that Java was an ideal programming language for Internet applications [van Hoff 96]. Java addresses many of the issues of software distribution over a network, including interoperability, security, portability, and trustworthiness. When they are embedded in a Web page, Java programs are called "applets." Applets, in conjunction with JavaBeans(tm)[Sun 99d] provide a developer the flexibility to develop a more sophisticated user interface on a Web page [Yourdon 96]. Java applets provide executable content, such as event-driven pop-up windows and graphical user interface (GUI) widgets (see Graphical User Interface Builders) via peer classes (see Figure 19), which can support a variety of applications. Java applets are the dominant player of client side Internet computing. However, the server side computing, i.e. the code that generates the HTML contents, was considered a stronghold of better performance languages as C++ or script languages as PERL. This situation is changing with the release of Java 2 Enterprise Edition(tm) (J2EE) [Sun 99a]. J2EE is a new Java platform specifically designed to address the needs of enterprise server side computing. J2EE provides scalability, interoperability, reliability, security. Java is also re-addressing its original purpose (consumer devices) through JINI(tm) connection technology [Sun 97b]. JINI enables devices to work together without the burden of setting up networks, loading drivers and so on. JINI devices such as TVs, DVDs and cameras will be able to self-install, self-organize into communities, self-configure, and self-diagnose. Jini technology reduces dependence on system administrators, potentially lowering support costs and allowing impromptu device communities to assemble in places far from the traditional office. JINI mainly addresses usability, cost of ownership and interoperability.

Technical Detail

Java is a high-level programming language similar in flavor to Smalltalk and similar in syntax to C and C++. However, the Java language is far less complex than C++. It is an object-oriented, statically typed language that is architecture-neutral, multi-threaded, and robust. It provides built-in garbage collection, supports a single-inheritance class hierarchy, and does not use pointers, thereby eliminating three of the primary sources of errors in many C++ programs. Because it borrows its syntax from the widely known C and C++, the Java language feels familiar to most developers. Java provides flexibility in that it provides dynamic functionality. Classes are linked in as required and can be downloaded from across networks. Incoming code is verified before execution. Such flexibility is a paradigm shift from the normal model of computing, which usually requires the entire suite of possible functionality to be installed onto a user's platform prior to execution [Yourdon 96]. Java programs start as Java source code, which is then compiled to bytecode and stored on a server or a local computer in ".class" files. In order to execute a Java program, a user invokes a Java Virtual Machine (JVM) that executes the Java bytecode. Unlike most other programming languages, Java bytecode is not platform-specific or native to any particular processor; it is a "write once, run anywhere" approach. This platform-neutrality at both source and binary levels means Java is inherently portable. The Java system also provides an extensive library of classes that provides access to the underlying operating system. All of today's popular Web browsers contain a Java Virtual Machine (JVM), including Netscape Navigator, Microsoft Internet Explorer, and Sun's HotJava Browser. Desktop platforms such as Microsoft Windows, MacOS, OS/2 Warp, and Sun Solaris also provide a standalone JVM which can execute Java code. A new generation of so-called Network Computers1 executes Java code directly. Sun is extending the availability of the JVM to enable Java programs to be deployed on a wide range of consumer devices, such as pagers, telephones, and televisions [Clark 97]. The relationships of code, Java Virtual Machines, and platform independence/neutrality is shown in Figure 19.

Figure 19: Multiple-Platform Application [Halfhill 97]

The Java platform provides portability, a measure of security, and inherent trustworthiness, including strong memory protection, encryption and signatures, rules enforcement, and runtime verification. Java is designed to allow applets to be downloaded and executed without introducing viruses or misbehaved code. It does this by placing strict limits on applets to prevent malicious actions. For example, applets cannot read from or write to the local disk. Unfortunately, while the Java model is theoretically secure, the various implementations of the JVM continue to show signs of weakness. Exploitation of security flaws in the implementations is still alarmingly common [Sun 97a]. An applet's actions are restricted to its "sandbox," an area of the Web browser dedicated to that applet and within which it may do anything it wants. But a Java applet can't read or alter any data outside its sandbox. Hence users can run untrusted Java code without compromising their trusted computing environments. Standalone windows created by Java applications are clearly labeled as being owned by untrusted software. Java applications are also prohibited from making network connections to other computers on a corporate Intranet, so malicious code can't exploit undiscovered security holes. Applets are not enough to build enterprise systems. Applets excel delivering functionality to remote clients, but enterprise applications need much more than remote access, like scalability and transactions. To address those needs Sun has developed Java(tm) 2 Platform, Enterprise Edition (J2EE). J2EE is a standard set of Java APIs that define a multi tier architecture (see Three Tier Software Architectures) suitable for the development, deployment, and management of enterprise applications written in the Java(tm) programming language. J2EE is functionally complete in the sense that it is possible to develop a large class of enterprise applications using only the J2EE APIs. Figure 20 illustrates the architecture of a J2EE application.

Figure 20: J2EE architecture [Sun 99f]

Remote clients are implemented as a combination of html pages and applets (or as Java Applications if Internet access is not required). The middle tier is split in two, the Enterprise JavaBeans framework(tm) (EJB) [Sun 99e] containing Enterprise Beans, which are reusable units that contain transactional business logic and the Web Server containing JSP Pages and servlets that are software entities that provide services in response to HTTP requests. The persistence layer can be implemented in any commercial database.

Usage Considerations

APIs. Java specifies a core set of Application Programming Interfaces (APIs) required in all Java implementations and an extended set of APIs covering a much broader set of functionality. The core set of APIs include interfaces for

  • basic language types
  • file and stream I/O
  • network I/O
  • container and utility classes
  • abstract windowing toolkit

The extended set of APIs includes interfaces for 2D-rendering and 2D-animation; a 3D-programming model; telephony, time-critical audio, video, and MIDI2 data; network and systems management; electronic commerce; and encryption and authentication [Hamilton 96]. J2EE introduces additional APIs to address specific need of enterprise environments. These APIs provide similar functionality to CORBA services including:

  • Asynchronous communication through the Java Message Service (JMS)
  • A naming service through the Java Naming and Directory Interface (JNDI)
  • A transaction service through the Java Transaction API (JTA)
  • Tabular data access though the JDBC API.

Platform-specific implementations. Recently, there has been some debate about the use of platform-specific APIs and the affect on the future of Java. For example, Microsoft's Internet Explorer 4.0 includes technology for J/Direct, which will provide a connection between Java and the Windows programming environment. Applications that make use of the J/Direct API will run only on the Windows platform, thereby curtailing one of Java's inherent benefits: platform neutrality. Providing Java developers with direct access to the Win32 API also breaks Java's security model and makes it more like Microsoft's platform-dependent ActiveX technology [Levin 97]. Sun has sued Microsoft for this practice, there is not a definitive resolution (by November 1999) but Microsoft has already been banned from using Java trademark with their modified versions.

Traning/education. The Java syntax for expressions and statements are almost identical to ANSI C, thus making the language easy to learn for C or C++ programmers. Because Java is a programming language, it requires a higher skill level for content developers than hypertext markup language (HTML). Programmers need to learn the Java standard library, which contains objects and methods for opening sockets, implementing the HTTP protocol, creating threads, writing to the display, and building a user interface. Java provides mechanisms for interfacing with other programming languages such as C and existing libraries such as Xlib, Motif, or legacy database software.

Performance. Performance is a major consideration when deciding to use Java. In most cases, interpreted Java is much slower than compiled C or C++ (as much as 10-15 times slower). However, most recent versions of the popular Web browsers and Java development environments provide Just In Time (JIT) compilers that produce native binary code (while the program is loaded and executed) that is beginning to rival that of optimized C++. The Java 2 platform also provides the Java HotSpot(tm) Performance Engine [Sun 97c] that combines the functionality of a JIT with runtime optimizations that further improve Java performance. For real-time applications, the performance implications of the Java garbage collector should also be considered. Garbage collection may make it difficult to easily bound timing properties of the application.

Language migration. A number of items should be considered if migrating from C or C++ to Java, including the following:

  • Java is totally object-oriented; thus everything must be done via a method invocation.
  • Java has no pointers or parameterized types.
  • Java supports multithreading and garbage collection.

Maturity

Java was made available to the general public in May 1995, and has enjoyed unprecedented rapid transition into practice. Web sites such as the Java Applet Rating Service (JARS) [JARS 97] and Gamelan [Gamelan 97] contain literally thousands of Java-based applications available for downloading. All of today's leading Web browsers provide support for Java by including a JVM as part of their product. There are multitudes of books available that describe all aspects of Java programming. Many commercial uses of Java have also appeared in a relatively short period of time. Sun provides a series of "customer success stories" at their web sites [Sun 97b, Sun 97c]. Some of the many commercial applications written in Java include

  • TWSNet, a shipment tracking and processing application for CSX Corporation [Sun 96a]
  • OC://WebConnect, a Web-based terminal emulation package for connecting to legacy SNA networks, from OpenConnect Systems
  • via World Network, an online travel reservation system, from Andersen Consulting

There are now several development environments that support Java programming. These include IBM's Visual Age for Java, Symantec's Visual Café, Microsoft's J++, and Sun's Java Development Kit (JDK) [Sun 97d]. Most of these products provide integrated editors, debuggers, JIT compilers, and other tools commonly associated with computer-aided software engineering (CASE) tools. J2EE is one of the newest and less mature parts of Java. In fact, by November 1999 there is only a beta release of J2EE. Some constituents of the platform are quite stable but others are undertaking deep changes. EJB, for example, was released in Dec 1997 and there already are more than thirty implementations [EJB-SIG 99] (including from IBM, BEA, Oracle and IONA). However, EJB has suffered important changes from the 1.1 to the 1.2 release and that volatility is expected to continue with subsequent releases. In summary, J2EE is currently usable but there are several important issues to be solved and some time is needed until it delivers all its potential.  

Costs and Limitations

Java and the source for the Java interpreter are freely available for noncommercial use. Some restrictions exist for incorporating Java into commercial products. Sun Microsystems licenses Java to hardware and software companies that are developing products to run the Java virtual machine and execute Java code. Developers, however, can write Java code without a license. A complete Java Development Kit (JDK), including a Java compiler, can be downloaded for free [Sun 97d]. Although a J2EE reference implementation will be provided by Sun, this implementation is not expected to be usable in industrial deployments. Several vendors are providing J2EE solutions ranging from free open source distributions to industrial strength distributions with per developer fees and per server fees. Yourdon discusses the potential impact of Java on the cost of software applications in the future- purchased software packages could be replaced with transaction-oriented rental of Java applets attached to Web pages [Yourdon 96].  

Alternatives

From a programming-language point of view, alternatives to Java include C/C++, Perl, and Tcl/Tk. Scripting languages often used in Web browsers, such as JavaScript and Visual Basic Scripting Edition (VB Script), can also be used to perform some of the tasks that Java can do, but not all of them. Perhaps the biggest challenge to client side Java's success is Microsoft's ActiveX technology. ActiveX is built on top of COM/DCOM (see Component Object Model (COM), DCOM, and Related Capabilities). Microsoft provides tools for developers to create "ActiveX controls" that can serve a similar purpose to Java applets. The primary difference is that ActiveX is a proprietary technology that only runs on the Windows platform at present. It also provides a different security model based on its "Authenticode" certificate technology, security zones, and encrypted signatures. The ActiveX model itself is not secure in the way Java is; ActiveX controls have unlimited access to the user's machine when they are executing. This gives them more power to perform operations, but also makes them potentially more dangerous to the user's computing environment. The alternatives for the server side Java computing are CORBA and MTS. As CORBA and Java are basically complimentary technologies, only MTS can be considered as a J2EE's competitor. MTS is a product that provides to specifically designed COM objects with enterprise services as transactions and security. MTS and COM will converge into a single technology called COM+ that will be released with Windows 2000.

Complementary Technologies

The entire distributed object technology area (CORBA, COM/DCOM, ActiveX, etc.) offers technologies that can inter-operate with Java. There are standards available that let Java objects talk to CORBA objects, thus extending the capabilities of both technologies. Of particular relevance is the RMI-IIOP mapping that enable interoperability between RMI objects and IIOP objects. Also relevant is the CORBA 3 Component Model [OMG 99], this model is strongly based in EJB and has EJB interoperability as one of its main goals. Java provides solid foundations to component-based development (see Component-Based Software Development/COTS Integration). The additions of Remote Method Invocation (RMI), the JavaBeans component architecture [JavaSoft 97] and EJB component framework to Java facilitate the reuse of other people's software. Java components developed in this manner can have their interfaces examined, can communicate with one another over a network, and can be integrated with other components all without needing the source code. Java has evolved to become a serious option to implement three tier architectures (see Three Tier Software Architectures). Mobile and light clients can be implemented as Applets or JavaBeans, Enterprise JavaBeans are perfect for transactional business logic and Java Server Pages can be used to generate the html representation. The ability to deploy component-oriented enterprise multi-tiers systems, in a platform-neutral manner, can give fast moving enterprises a significant and measurable competitive edge.

Index Categories

This technology is classified under the following categories. Select a category for a list of related topics.

Name of technology

Java

Application category

Distributed Computing (AP.2.1.2)
Application Program Interfaces (AP.2.7)
Programming Language (AP.1.4.2.1)
Compiler (AP.1.4.2.3)

Quality measures category

Complexity (QM.3.2.1)
Cost of Ownership (QM.5.1)
Interoperability (QM.4.1)
Maintainability (QM.3.1)
Portability (QM.4.2)
Reliability (QM.2.1.2)
Scalability (QM.4.3)
Trustworthiness (QM.2.1.4)
Usability (QM.2.3)

Computing reviews category

Programming Languages (D.3)
Distributed Systems (C.2.4)

References and Information Sources

[Clark 97]

Clark, Don. "Sun Microsystems Pours Some New Java." Wall Street Journal, Page B-4. April 1, 1997.

[EJB-SIG 99]

Special Interest Group - Enterprise JavaBeans [online] Available WWW,
<URL:
http://www.mgm-edv.de/ejbsig/ejbservers_tabled.html>

[Gamelan 97]

Gamelan Web site [online]. Available WWW,
<URL:
http://www.gamelan.com> (1997).

[Gosling 96]

Gosling, James & McGilton, Henry. The Java Language Environment: A White Paper [online]. Available WWW,
<URL:
http://java.sun.com/docs/white/langenv/> (1996).

[JARS 97]

 

Java Applet Rating Service (JARS) [online]. Available WWW,
<URL:
http://www.jars.com> (1997).

[Halfhill 97]

Halfhill, Tom R. "Today the Web, Tomorrow the World." Byte 22, 1 (January 1997): 68-80.

[Hamilton 96]

Hamilton, Marc. "Java and the Shift to Net-Centric Computing." Computer 29, 8 (August 1996): 31-39.

[JavaSoft 97]

 

JavaBeans: The Only Component Architecture for Java [online]. Available WWW,
<URL:
http://splash.javasoft.com/beans/> (1997).

[Levin 97]

Levin, Rich and Patrizio, Andy. "Breaking Point" [online]. Information Week, June 23, 1997. Available WWW,
<URL:
http://techweb.cmp.com/iw/636/36iujav.htm> (1997).

[OMG 99]

CORBA Component Model RFP [online]. Originally available WWW,
<URL
http://www.omg.org/techprocess/meetings/schedule/CORBA_Component_Model_RFP.html>

[Sun 96a]

 

CSX Gets on Track With Java [online]. Available WWW,
<URL:
http://java.sun.com/features/1996/october/csx102996.html> (1996).

 

[Sun 96b]

 

Java Computing in the Enterprise. Strategic Overview: Java [online]. Available WWW,
<URL:
http://www.sun.com/javacomputing> (1996).

 

[Sun 97a]

 

Frequently Asked Questions- Applet Security [online]. Available WWW,
<URL:
http://java.sun.com/sfaq> (1997).

[Sun 97b]

 

Java in the Real World [online]. Available WWW,
<URL:
http://java.sun.com/nav/used/> (1997).

 

[Sun 97c]

 

Customer Successes [online]. Available WWW,
<URL:
http://www.sun.com/javastation/customersuccesses/> (1997).

[Sun 97d]

 

Java Development Kit 1.1.2 [online]. Available WWW,
<URL:
http://java.sun.com/products/jdk/1.1/> (1997).

[Sun 97e]

Overview of Java [online]. Available WWW,
<URL:
http://java.sun.com/docs/Overviews/java/java-overview-1.html> (1997).

[Sun 99a]

Java(tm) 2 Platform, Enterprise Edition [online]. Available WWW,
<URL:
http://java.sun.com/j2ee/>

[Sun 99b]

Jini(tm) connection technology [online]. Available WWW,
<URL:
http://www.sun.com/jini/>

[Sun 99c]

Java HotSpot(tm) Performance Engine [online]. Available WWW,
<URL:
http://java.sun.com/products/hotspot/>

[Sun 99d]

JavaBeans Home Page [online]. Available WWW,
<URL:
http://java.sun.com/beans/index.html>

[Sun 99e]

Enterprise JavaBeans Home Page [online]. Available WWW,
<URL:
http://java.sun.com/products/ejb/index.html>

[Sun 99f]

J2EE Sun BluePrints(TM) [online]. Available WWW,
<URL:
http://java.sun.com/j2ee/blueprints/>

[van Hoff 96]

van Hoff, A. Hooked on Java. Reading, MA: Addison-Wesley, 1996.

[Yourdon 96]

Yourdon, Edward. "Java, the Web, and Software Development." Computer 29, 8 (August 1996): 25-30.

Current Author/Maintainer

Santiago Comella-Dorda, SEI
Scott Tilley, SEI

External Reviewers

Alan Brown, Texas Instruments
Hausi Müller, University of Victoria

Modifications

24 Feb 2000: Updated to cover new Java developments
More material added to cover Java 2, Jini, Java Beans, and Enterprise Java Beans. Many new references added.

 

30 June 1997: Substantially rewritten to reflect developments of the past 5-6 months.
More material added in Usage Considerations, Maturity, and Alternatives. Added figure to show applets, applications, Virtual Machines, and platform independence/neutrality. Many new references added.

 

10 Jan 1997 (original); author: Cory Vondrak, TRW, Redondo Beach, CA

Footnotes

1 The network computer (NC) does not have an agreed-upon definition. Some NCs are new devices designed to run software written in Java, with gateways to existing programs and data. These are the official Network Computers (an Oracle trademark) and JavaStations (a Sun trademark). Other NCs are more like terminals in the classic sense: they don't execute programs at the desktop. Instead, applications run remotely on a server, and the client handles only the graphics locally. The generic term for these and the true NC alternatives to the personal computer (PC) is "thin client". They are referred to as "thin" because they are generally less complex and less expensive than a PC. However, recent developments by Microsoft and others have muddied the waters a bit with the "NetPC," which is essentially a stripped-down and sealed PC that is meant to be centrally administered. 2 MIDI stands for "Musical Instrument Digital Interface". It is a hardware specification and protocol used to communicate note and effect information between synthesizers, computers, keyboards, controllers and other electronic music devices.

JavaTM Copyright

Java and all Java-based marks are trademarks or registered trademarks of Sun Microsystems, Inc. in the United States and other countries. The Software Engineering Institute is independent of Sun Microsystems, Inc.


The Software Engineering Institute (SEI) is a federally funded research and development center sponsored by the U.S. Department of Defense and operated by Carnegie Mellon University.

Copyright 2007 by Carnegie Mellon University
Terms of Use
URL: http://www.sei.cmu.edu/str/descriptions/java_body.html
Last Modified: 11 January 2007