HomeDigital EditionSys-Con RadioSearch Java Cd
Advanced Java AWT Book Reviews/Excerpts Client Server Corba Editorials Embedded Java Enterprise Java IDE's Industry Watch Integration Interviews Java Applet Java & Databases Java & Web Services Java Fundamentals Java Native Interface Java Servlets Java Beans J2ME Libraries .NET Object Orientation Observations/IMHO Product Reviews Scalability & Performance Security Server Side Source Code Straight Talking Swing Threads Using Java with others Wireless XML

This month's discussion warrants a brisk walk down technological memory lane to examine Java's humble beginnings. In its original incarnation Java, then called Oak, was a language based on some of the features and syntax provided by C++. Oak was the result of Sun Microsystem's mission to find a way for consumer electronic appliances to communicate with each other. When Oak was launched, it didn't take off from the ground. Then came Mosaic, the Internet and the World Wide Web. Oak changed its name to Java, a marriage between Java and the Internet was made in enterprise heaven - and Java's exploits spread far and wide. Today Java's a language, a platform and an enterprise solution - a phenomenon.

But has Java abandoned its initial goals? Absolutely not. The language and the distributed enterprise computing solutions it provides are fast gaining market share in software for the enterprise. At the same time, Java has also adhered to its original objective of providing a ubiquitous platform and language for communication between consumer devices. Java supports APIs and products for electronic consumer device communications by providing:

  • versions of its virtual machine that can run under strict memory constraints
  • an operating system suited for small consumer devices
  • APIs that support embedded devices and real-time operating systems (RTOS)
  • tools that support software and hardware development in the consumer device arena
What makes Java the right choice for the consumer device communications market? Well, Java is inherently distributed, has rich support for networking and multithreading, promises the much desired "platform independence," and allows development in a common high-level object-oriented environment.

This month we'll peer into the Cosmic Cup's crystal ball to identify APIs and products defined by Sun that will further the cause of Java for consumer devices. Please note that while there's a wide range of embedded products and APIs available from several vendors, this month's column focuses on those provided by Sun because they're base products closely linked to the APIs defined under the scope of the Java Platform.

Consumer Devices APIs and Products
The APIs and products described below support the penetration of Java into the consumer device market. Figure 1 illustrates these products and APIs, and the consumer devices they support; Table 1 provides brief descriptions. The next section discusses the following consumer device products and APIs:

Figure 1
Figure 1:
  • JavaOS
  • JavaCard
  • EmbeddedJava
  • PersonalJava
  • Personal WebAccess
  • Java Embedded Server

Table 1

JavaOS is a distributed platform that's optimized to run on a variety of computing and consumer platforms without requiring the presence of a host operating system. JavaOS can directly execute the Java Virtual Machine (JVM) across a variety of hardware products, devices and CPUs.

Currently JavaOS is designed to support three industry segments:

  • JavaOS for Business: An operating system software that leverages Java technology to define the next step in centrally managed thin-client computing. Its salient features are a functionally rich operating system for network computer manufacturers, solutions providers and hardware vendors; a new platform for Java technology-based applications written in the Java programming language; and a network computing solution for delivering business applications. It is a joint venture of Sun and IBM.
  • JavaOS for Consumers: An optimized Java computing platform for consumer communication appliances such as Web phones, set-top boxes and handheld computing devices. It's a real-time operating system that provides a streamlined implementation of the PersonalJava environment. The product is offered by Sun.
  • JavaOS for NCs: A small, efficient stand-alone Java application platform designed specifically for network computers. It enables users to log in anywhere on the network and still use their familiar workspaces. This product is also offered by Sun.

The JAEs, namely JavaCard, EmbeddedJava and PersonalJava, provide different levels of Java operating system support and target a range of environments from smart cards to enterprise servers. These three, coupled with the full-featured Java Platform, provide the first upwardly binary-compatible platform that targets various segments of the enterprise today. Figure 2 illustrates these JAEs. Applications developed in the JAEs are upwardly compatible, that is, JavaCard applications will run in the EmbeddedJava JAE, which in turn is upwardly compatible with the PersonalJava JAE, which is upwardly compatible with the Java JAE.

Figure 2
Figure 2:

JavaCard, the JAE with the smallest footprint offered by Sun, enables Java technology to run on smart cards and other devices with limited memory. The JavaCard API allows platform independence between different JavaCard-enabled platforms. The API defines the calling conventions by which an applet accesses the JavaCard runtime environment and native services.

JavaCard consists of a JVM, an API for smart cards and a framework that provides system services for smart-card applications. The minimum system requirement is 16 KB of ROM, 8 KB of EEPROM and 256 bytes of RAM.

The JVM layer hides the manufacturer's proprietary technology with a common language and system interface. JavaCard applications are basically Java applets. Multiple applets may reside on a single smart card.

The JavaCard Application Environment (JCAE) is licensed on an OEM basis to smart-card manufacturers. Some vendors have announced the availability of JCAE, and the 2.0 specification was recently released.

EmbeddedJava is a JAE designed specifically for severely resource-constrained environments in the embedded device market. It may be used to develop a variety of embedded products.

EmbeddedJava applications run on top of an RTOS dedicated to the embedded device for which the product is being developed. Such applications may be ported to other RTOSs. These products can scale from dedicated applications limited to a device's ROM to complex, network-aware devices. Some products that can be developed using this JAE are mobile phones, pagers, process control, instrumentation, office peripherals, and networking routers and switches.

The API consists of a collection of configurable Java classes that have been reimplemented for memory-constrained dedicated embedded devices. The Java classes offered by EmbeddedJava may be categorized into two groups:

  1. APIs derived from the core JDK classes, usually supplied directly by Sun, or via the device manufacturer or ISV. These classes include those dedicated to specific applications as well as JDK classes that are optimized to run in memory-constrained environments.
  2. Hardware-specific classes, usually supplied by the hardware vendor
In addition to the API, the Embedded-Java JAE consists of a JVM (supplied by Sun or a reseller), an RTOS (supplied by a third-party RTOS vendor) and device hardware (supplied by the device manufacturer).

The EmbeddedJava specification is open for public review.

PersonalJava is a JAE specifically designed for building applications for network-aware consumer devices such as mobile handheld devices, set-top boxes, game consoles and smart phones. It consists of a JVM and a subset of the JDK APIs including core and optional APIs as well as the class libraries. These APIs are supplemented by a small number of new APIs designed to meet the needs of network-embedded applications. PersonalJava shares a common core set of APIs with the EmbeddedJava API. It also supports the environment to run Java applets.

The minimum system requirements for a device running PersonalJava are a 32-bit CPU with 50+ MHz of memory, 2 MB of ROM, 512 KB of RAM, keyboard or alternate input devices and a mechanism for downloading applets.

PersonalJava is commercially available as version 2.0.

Personal WebAccess
I discussed Personal WebAccess, a customizable, compact Web browser for devices running the PersonalJava platform, in last month's column and therefore won't repeat myself here.

Java Embedded Server
Java Embedded Server (also known as Project NanoServer) is a new type of Web server suited to the network-aware consumer device market. It runs on the device itself and manages its services.

Java Embedded Server targets embedded devices, which have a wide range of use and span several industry segments. Smaller devices like PDAs, cell and Web phones, routers, switches and set-top boxes can run the Java Embedded Server. At the same time, the server is at home on televisions, automobiles and manufacturing equipment as well as on office equipment like copiers and fax machines.

The server is dynamic in nature. It can be configured and customized at real time. Services can be added and removed, built new and even downloaded from a remote location on the network. It consists of two parts:

  1. The JavaServer engine: Comprises APIs for life-cycle management of network-pluggable devices and applications. With its very small footprint (100 KB) it provides installation, versioning, content management, recovery and service, for example.
  2. JavaServer services: Invoked and managed by the Java Embedded Server, they include HTTP, SNMP, logging, threading, remote administration, RMI and servlet support. They also include services like Mail and Fax that may be built on top of the JavaServer services.
The Java Embedded Server is in its beta stage and its current working name is Project NanoServer.

For Details . . .
Links for detailed information on these products may be obtained from Sun's Java Web site (http://java.sun.com/products).

This article concludes the whirlwind tour of JavaSoft's APIs and products that are defined under the scope of the Java Platform. In the last five articles our Cosmic Cup has provided an eagle's-eye view of the Java world. This in no way completes the APIs and products defined for Java. Even as I write, new APIs and products are being defined under the Java Platform. And several other sectors in the industry are also involved in defining Java, both the language and the platform.

In future articles we'll examine the APIs and products developed by other industry players involved in the Java Platform's evolution. We'll also take a closer look at the individual pieces of the Platform.

Cosmic Reflections
The volume and maturity of the hardware environment far exceeds the progress made by software solutions. Giving something away for free doesn't earn the big bucks for any company. However, giving a language away free as a means to an end will eventually pay handsomely. The consumer devices market is massive in terms of sheer volume. In this new computing paradigm, combining the distributed networking facilities and platform independence offered by Java with the embedded chip market is sure to lead to a revolution in the enterprise.

About the Author
Ajit Sagar, a member of the technical staff at i2 Technologies in Dallas, Texas, holds a BS in electrical engineering from BITS Pilani, India, and an MS in computer science from Mississippi State University. Ajit focuses on networking, UI and middleware architecture development. He is a Java-certified programmer with eight years of programming experience, including two in Java. You can e-mail him at [email protected]


All Rights Reserved
Copyright ©  2004 SYS-CON Media, Inc.
  E-mail: [email protected]

Java and Java-based marks are trademarks or registered trademarks of Sun Microsystems, Inc. in the United States and other countries. SYS-CON Publications, Inc. is independent of Sun Microsystems, Inc.