|
Advanced
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.
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.
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.
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.
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].
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.
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.
This technology is classified under the following categories.
Select a category for a list of related topics.
|
[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.
|
Santiago Comella-Dorda, SEI
Scott Tilley, SEI
Alan Brown, Texas Instruments
Hausi Müller, University of Victoria
- 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
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
|