All of the J2ME configurations and profiles have been developed as part of the Java Community Process (JCP). The JCP brings together leading players in the relevant industries with the aim of agreeing on a common specification to which they can all design their products. Each configuration or profile started out as a Java Specification Request(JSR), which describes the scope of the work to be done and an outline of the areas to be covered. An expert group is assembled to create the specification, which is then subject to an internal ballot and revision before being made available for public review. Following public review and a possible last revision, the final draft is produced, and the JSR is completed.
The current list of JSRs, including those that have been completed, can be found on the JCP web site. The JSRs that define the current J2ME configurations and profiles are as follows:
Number | Scope |
JSR 30 | J2ME Connected Limited Device Configuration (CLDC) |
JSR 37 | Mobile Information Device Profile for the J2ME Platform (MIDP) |
JSR 75 | PDA Profile for the J2ME Platform |
JSR 36 | J2ME Connected Device Configuration (CDC) |
JSR 46 | J2ME Foundation Profile |
JSR 129 | Personal Basis Profile Specification |
JSR 62 | Personal Profile Specification |
JSR 66 | J2ME RMI Profile |
JSR 134 | Java Game Profile |
There is also work in progress that is not directly related to any configuration or profile:
Number | Scope |
JSR 82 | Java APIs for Bluetooth |
JSR 120 | Wireless Telephony Communication APIs (WTCA) |
JSR 135 | J2ME Multimedia API |
Finally, even though some of the current profiles have not yet been fully defined, work is already underway to define the next generation of the J2ME platform. At the time of writing, nothing is available for public review, but it would be worth keeping an eye on the following JSRs:
Number | Scope |
JSR 68 | J2ME Platform Specification |
JSR 118 | Mobile Information Device Next Generation |
JSR 139 | Connected Limited Device Configuration Next Generation |
J2ME and Other Java Platforms
J2ME is intended to be the way ahead for Java on small devices, but, as noted at the beginning of this chapter, there are other Java platforms already in existence (and in use) that have similar scope. The following sections briefly summarize these alternative platforms and compare them to J2ME.
JavaCard
JavaCard is a platform aimed at smart card technology. Smart cards are the smallest environment for which a Java platform exists. The constraints of these devices are such that the JavaCard virtual machine and the small set of Java class libraries that it supports require only around 16 KB of non-volatile memory and 512 bytes of volatile memory. The scope of J2ME does not extend to platforms with this little resource, so there is no J2ME configuration that is suitable for the current generation of smart cards. You can find more information about JavaCard at this link.
EmbeddedJava
EmbeddedJava is a JDK 1.1-based platform that is used to create software for embedded devices. These devices typically have a 32-bit processor with 512 KB of ROM and 512 KB of RAM available for the VM, class libraries, and embedded application. Since embedded devices generally serve only one purpose, it is unnecessary to include parts of the Java platform that the application does not require. In fact, EmbeddedJava allows the implementor to remove any package or class -- or even a method within a class -- that is not required, in order to fit the final product into the memory available. The EmbeddedJava specification, which can be found at this link, defines only the maximum possible content of the platform, rather than a minimum (as is the case with J2ME specifications).
EmbeddedJava is currently undergoing its end-of-life cycle, which means that it will no longer be supported as of January 1, 2003. In the future, developers in embedded environments will probably migrate to CDLC and one of its profiles, which are targeted to devices with similar resources.
PersonalJava
PersonalJava is intended for a much more general application environment than EmbeddedJava. The target devices for Personal Java have up to 2 MB of ROM and at least 1 MB of RAM available for the Java platform itself, with more required for application software. Some of the larger PDAs and communicator devices, such as the Compaq iPAQ and the Nokia 9210 cell phone, are currently using the PersonalJava environment.
PersonalJava is based on JDK 1.1.8 and includes a fully featured Java VM. The specification, available at this link, designates each of the core JDK 1.1.8 packages as required, modified, or optional. Similar designations may also be applied to individual classes and methods. A required package must contain all of the classes from its JDK 1.1.8 counterpart, and each class must be a full implementation. An optional package may or may not be present, but if it is present, it must be complete. A modified package must be present, but its content may differ from its JDK 1.1.8 equivalent according to rules laid down in the specification. PersonalJava includes user interface components in the form of a modified java.awt package, and it also has optional support for RMI.
PersonalJava developers are expected to use CDC as a migration path to the Java 2 platform. Since PersonalJava includes user interface components, it will be necessary to wait for the Personal Basis and Personal Profiles to become available before migration can be started. PersonalJava applications that use RMI will also need to use the CDC RMI profile.