Java 2 Micro Edition and the World of Java
The computer revolution of the 1970s increased the demand for sophisticated computersoftware to take advantage of the ever-increasing capacity of computers to process data.The C programming language became the linchpin that enabled programmers to buildsoftware that was just as robust as the computer it ran on.
As the 1980s approached, programmers were witnessing another spurt in the evolutionof programming language. Computer technology advanced beyond the capabilities of the C programming language. The problem wasn’t new. It occurred previously and caused the demise of generations of programming languages. The problem was thatprograms were becoming too complicated to design, write, and manage to keep up with the capabilities of computers. It was around this time that a design concept based on Simula 67 and Smalltalk (from the late 1960s) moved programming to the next evolutionary step. This was the period when object-oriented programming (OOP), and with it a new programming language called C++, took programmers by storm.
In 1979, Bjarne Stroustrup of Bell Laboratories in New Jersey enhanced the C programming language to include object-oriented features. He called the language C++. (The ++ is the incremental operator in the C programming language.) C++ is truly an enhancement of the C programming language, and it began as a preprocessor language that was translated into C syntax before the program was processed by the compiler.
Stroustrup built on the concept of a class (taken from Simula 67 and Smalltalk), from which instances of objects are created. A class contains data members and member functions that define an object’s data and functionality. He also introduced the concept of inheritance, which enabled a class to inherit some or all data members and member functions from one or more other classes—all of which complements the concepts of object-oriented programming.
By 1988, ANSI officials standardized Stroustrup’s C++ specification.
Just as C++ was becoming the language of choice for building industrial-strength applications, another growth spurt in the evolution of programming language was budding, fertilized by the latest disruptive technology—the World Wide Web. The Internet had been a well-kept secret for decades before the National Science Foundation (who oversaw the Internet) removed barriers that prevented commercialization. Until 1991 when it was opened to commerce, the Internet was the almost exclusive domain of government agencies and the academic community. Once the barrier to commercialization was lifted, the World Wide Web—one of several services offered on the Internet— became a virtual community center where visitors could get free information about practically anything and browse through thousands of virtual stores.
Browsers power the World Wide Web.A browser translates ASCII text files written in HTML into an interactive display that can be interpreted on any machine. As long as the browser is compatible with the correct version of HTML and HTTP implementation, any computer running the browser can use the same HTML document without having to modify it for a particular type of computer, which was something unheard of at the time. Programs written in C or C++ are machine dependent and cannot run on a different
machine unless the program is recompiled.
The success of the Internet gave renewed focus to developing a machine-independent programming language. And the same year the Internet was commercialized, five technologists at Sun Microsystems set out to do just that. James Gosling, Patrick Naughton, ChrisWarth, Ed Frank, and Mike Sheridan spent 18 months developing the programming language they called Oak, which was renamed Java when this new language made its debut in 1995. Java went through numerous iterations between 1991 and 1995, during which time many other technologists at Sun made substantial contributions to the language. These included Bill Joy, Arthur van Hoff, Jonathan Payne, Frank Yelin, and Tim Lindholm.
Although Java is closely associated with the Internet, it was developed as a language for programming software that could be embedded into electronic devices regardless of the type of CPU used by the device. This is known as the EmbeddedJava platform and is in continuous use today for closed systems.
The Java team from Sun succeeded in creating a portable programming language, something that had eluded programmers since computers were first programmed. Their success, however, was far beyond their wildest dreams. The same concept used to make Java programs portable to electronic devices also could be used to make Java programs run on computers running Microsoft Windows, UNIX, and Macintosh. Timing was perfect. The Internet/intranet had whetted corporate America’s appetite for cost-effective, portable programs that could replace mission-critical applications within the corporation. And Java had proven itself as a programming language used to successfully develop machine-independent applications.
Writing Java programs is similar to writing C++ programs in that the programmer writes source code that contains instructions into an editor, or in an integrated developmentenvironment, and then the source code is compiled. However, that’s where Java and C++part ways. The compiling and linking process of a C++ program results in an executable that can be run on an appropriate machine. In contrast, the Java compiler converts Java source code into bytecode that is executed by the Java Virtual Machine (JVM).
Machine-specific instructions are not included in bytecode. Instead, they already reside in the JVM, which is machine specific. This means that the bytecode might contain fewer instructions that need to be translated than a comparable C++ program.
Although the Java compiler generates bytecode that must be interpreted by the JvM at run time, the number of instructions that need translation are usually minimal and have already been optimized by the Java compiler.
Remember that Java began as a programming language to create programs for embedded systems—microcomputers found in consumer and industrial products such as those used to control automobiles and appliances. The development team at Sun worked on Java in the early 1990s to address the programming needs of the fledgling embedded computer market, but that effort was sidetracked by more compelling opportunities presented by the Internet.
As those opportunities were addressed, a new breed of portable communications devices opened other opportunities at the turn of the century. Cell phones expanded J 2 M E : T h e C o m p l e t e R e f e r e n c e from voice communications devices to voice and text communications devices. Pocket electronic telephone directories evolved into personal digital assistants. Chipmakers were releasing new products at this time that were designed to transfer computing power from a desktop computer into mobile small computers that controlled gas pumps, cable television boxes, and an assortment of other appliances.
The time was right for the next evolution of Java. However, instead of beefing up Java with additional APIs, the team at Sun, along with the Java Community Process Program, dismantled both the Java programming language and the Java Virtual Machine. They
stripped down Java APIs and the JVM to the minimum coding required to provide
intelligence to embedded systems and microcomputer devices. This was necessary
because of resource constraints imposed upon the hardware design of these devices. The
result of their efforts is J2ME. J2ME is a reduced version of the Java API and Java Virtual Machine that is designed to operate within the sparse resources available in the new breed of embedded computers and microcomputers.
Traditional computing devices use fairly standard hardware configurations such as a display, keyboard,mouse, and large amounts of memory and permanent storage. However, the new breed of computing devices lacks hardware configuration continuity among devices. Some devices don’t have a display, permanent storage, keyboard, or mouse. And memory availability is inconsistent among small computing devices. The lack of uniform hardware configuration among the small computing devices poses a formidable challenge for the Java Community Process Program, which is charged with developing standards for the JVM and the J2ME for small computing devices.
J2ME must service many different kinds of small computing devices, including screenphones, digital set-top boxes used for cable television, cell phones, and personal digital assistants. The challenge for the Java Community Process Program is to develop a Java standard that can be implemented on small computing devices that have nonstandard
hardware configurations. The Java Community Process Program has used a twofold approach to addressing the needs of small computing devices. First, they defined the Java run-time environment and core classes that operate on each device. This is referred to as the configuration. A configuration defines the Java Virtual Machine for a particular small computing device. There are two configurations, one for handheld devices and the other for plug-in devices. Next, the Java Community Process Program defined a profile for categories of small computing devices. A profile consists of classes that enable developers to implement features found on a related group of small computing devices.
There are two configurations for J2ME as of this writing. These are Connected Limited Device Configuration (CLDC) and the Connected Device Configuration (CDC). The CLDC is designed for 16-bit or 32-bit small computing devices with limited amounts of memory.
CLDC devices usually have between 160KB and 512KB of available memory and are battery powered. They also use an inconsistent, small-bandwidth network wireless
connection and may not have a user interface. CLDC devices use the KJava Virtual
Machine (KVM) implementation, which is a stripped-down version of the JVM. CLDC
devices include pagers, personal digital assistants, cell phones, dedicated terminals, and
handheld consumer devices with between 128KB and 512KB of memory.
CDC devices use a 32-bit architecture, have at least two megabytes of memory
available, and implement a complete functional JVM. CDC devices include digital set-top boxes, home appliances, navigation systems, point-of-sale terminals, and smart phones.
A profile consists of Java classes that enable implementation of features for either a particular small computing device or for a class of small computing devices. Small computing technology continues to evolve, and with that, there is an ongoing process of defining J2ME profiles. Seven profiles have been defined as of this writing. These are the Foundation Profile, Game Profile, Mobile Information Device Profile, PDA Profile, Personal Profile, Personal Basis Profile, and RMI Profile.
The Foundation Profile is used with the CDC configuration and is the core for nearly all other profiles used with the CDC configuration because the Foundation Profile contains core Java classes.
The Game Profile is also used with the CDC configuration and contains the necessary classes for developing game applications for any small computing device that uses the CDC configuration.
The Mobile Information Device Profile (MIDP) is used with the CLDC configuration and contains classes that provide local storage, a user interface, and networking capabilities to an application that runs on a mobile computing device such as Palm OS devices. MIDP is used with wireless Java applications.
The PDAProfile (PDAP) is used with the CLDC configuration and contains classes that utilize sophisticated resources found on personal digital assistants. These features include better displays and larger memory than similar resources found on MIDP mobile devices (such as cell phones).
The Personal Profile is used with the CDC configuration and the Foundation Profile and contains classes to implement a complex user interface. The Foundation Profile provides core classes, and the Personal Profiles provide classes to implement a sophisticated user interface, which is a user interface that is capable of displaying multiple windows at a time.
The Personal Basis Profile is similar to the Personal Profile in that it is used with the CDC configuration and the Foundation Profile. However, the Personal Basis Profile provides classes to implement a simple user interface, which is a user interface that is capable of displaying one window at a time.
The RMI Profile is used with the CDC configuration and the Foundation Profile to provide Remote Method Invocation classes to the core classes contained in the Foundation Profile.
There will likely be many profiles as the proliferation of small computing devices ontinues. Industry groups within the Java Community Process Program (java.sun.com/ boutjava/communityprocess) define profiles. Each group establishes the standard rofile used by small computing devices manufactured by that industry.
ACDC profile is defined by expanding upon core Java classes found in the Foundation rofile with classes specifically targeted to a class of small computing device. These device-specific classes are contained in a new profile that enables developers to create ndustrial-strength applications for those devices. However, if the Foundation Profile s specific to CDC, not all profiles are expanded upon the core classes found in the oundation Profile. eep in mind that applications can access a small computing device’s software and rdware features only if the necessary classes to do so are contained in the JVM and in the profile used by the developer