Java ME Technology: Everything a Developer Needs for the Mobile Market

By Richard Marejka, July 2008  

Before describing how to learn Java ME technology, it is important to answer why you would benefit from learning about it. With the myriad of technology choices, what makes Java ME a good investment? There are 3 clear reasons:

  • Economics - mobile devices and Java ME are a growth market.
  • Low cost of entry - the cost of what you need to get started is zero, assuming you're reading this on-line.
  • Short learning curve - Java ME is smaller than the other Java platforms; therefore, it has fewer classes, fewer methods, and one developer can know it all.

Let's explore each of these reasons.

The economics

The mobile handset market is very large and growing. In 2007, annual unit sales exceeded 1 billion units for the first time -- that's over 2.7 million units per day.

The chart below shows unit sales by manufacturer (in thousands) for the years 1998 through 2007. The data was collected from press releases found on the Gartner Group site.

Manufacturer Unit Sales by Year

Some observations using 2001 as the reference year: The overall size of market is 2.89x bigger in 2007 than in 2001. This is an annual compound growth rate of more than 18% since 2001. In 2007, Nokia alone was larger than the entire industry was in 2001 and 2002. The bottom line is that, from a unit-sales perspective, the mobile market is a high growth market.

In The Long Tail, Chris Anderson illustrates where the money can be found in the Internet economy. One of Anderson's observations is a variation on the 80/20 rule. He found that a small percentage of the offerings in a market segment garners a large percentage of the unit sales. While this observation was no surprise, the insight is in Anderson's further research: He proceeded to investigate what happens, in a sufficiently large market, to the other side of the rule - the 20/80 side or the tail. The tail is populated by niche applications and content. For example, Apple has plans to account for 1% of the unit sales in 2008. That 1% represents 10 million iPhones or approximately $4.5 billion in revenue, enough to qualify as a Fortune 500 company with just one product. Anderson's advice is to identify a niche, create services and content for it, make yourself easy to find, and make payment and delivery as efficient as possible.

The mobile software market is smaller than the handset market when it comes to average selling price, but with such large unit numbers even modest revenue per sale can quickly add up. A simple model for revenue is:

revenue = units sold x % Java ME enabled x % sales penetration x revenue per unit

where " % Java ME enabled" represents the percentage of units sold that are able to run your Java ME application and " % sales penetration" is the percentage of those Java ME enabled devices that purchase your application. Using the units sold as 1 billion and a revenue per unit of $1 the equation becomes:

revenue = $1,000,000,000 x % Java ME enabled x % sales penetration

What the equation comes down to is: How much of the potential $1 billion market can you capture? The following table illustrates revenue for various levels of combined market penetration.

Revenue projections
% Java ME enabled % sales penetration revenue ($) comment
10 0.1 100,000 conservative case
15 0.5 750,000 getting interesting
25 1.0 2,500,000 optimistic
35 2.0 7,000,000 wildly optimistic, no longer part of the tail.

In this market 1% of 1% represents $100,000 in revenue, sufficient to attract the attention of a small development team interested in servicing a niche market, i.e. somewhere in the long tail. Bottom line - because of the overall size of the Java ME market there is significant revenue potential in the long tail. The challenge is to identify and create applications for a niche market, help the niche market find your application (search = Google et al) and ideally to participate in more than one niche.

The cost of entry

The cost of entry to the Java ME developer world is zero. Would you expect anything different? The NetBeans IDE - the award winning development IDE is available with a mobility bundle from The major device manufacturers all offer development tools and documentation for free, although some do require registration.

Forum Nokia MotoDev Samsung Sony Ericsson Developer World

To get started you'll need either a Windows or Linux environment (real or virtual) in-order to run the NetBeans IDE with the Mobility bundle and a web server, preferably WebDAV enabled to offer over-the-air (OTA) deployment of your application. If you do not have your own web server there are several Java ME application hosting sites available -, and are 3 that were easily found using Google. These sites allow registered developers to upload their applications to servers configured for OTA deployment of MIDlets.

More serious developers might employ a source code management (SCM) system such as CVS, Subversion or Mercurial - all available for free and integrated with the NetBeans IDE.

For those developers who seek a more streamlined development environment, Sun offers the Sun Java Wireless Toolkit for CLDC(sometimes referred to as the WTK or Wireless Toolkit). The WTK provides the same JSR collection and emulator as NetBeans so there is no change in the breadth of applications that can be built. The difference is the IDE or rather lack of one. The WTK has been described as a toolbar - it does not include an integrated editor that choice is left to the developer. It does manage projects, provide automated builds, and an execution and debug environment.

The learning curve

If you're one of the 6 million Java developers you already know more than enough to develop for the Java ME platform. In fact, you'll have to un-learn a few things to develop for the Java ME platform.

The Java ME platform was originally derived from Java 2 Standard Edition 1.3.1 with the memory and compute intensive classes and methods removed. Classes that were not relevant for the target market of Java ME platform were also removed. As an example of how a JDK 1.3.1 class was modified for the Java ME platform consider the java.util.Date class. In JDK 1.3.1 java.util.Date consists of 6 constructors and 28 methods, in the CLDC 1.1 specification the same class has been reduced to 2 constructors and 5 methods.

The largest change from Java SE to the Java ME environment is in the user interface (UI). Where Java SE includes the AWT and Swing packages for UI, the Java ME environment includes javax.microedtion.lcdui (LCDUI). The LCDUI is a much simplified UI toolkit - simplified as in without layout management and fewer widgets.

The Java ME technology platform consists of 83 JSRs of which approximately half have been ratified by the Java Community Process (JCP). Each device supports a number of JSRs. The problem is that not all JSRs are supported on all platforms. Which leads the developer to ask:

  • What JSRs can be assumed to be present?
  • How is the presence of a particular JSR detected?
  • What happens if a required JSR is not present?

All good questions. Since December 2006 the answer as to the question of what to learn is increasingly JSR 248 Mobile Services Architecture (MSA). The MSA standard is an umbrella standard, it defines a collection of JSRs that together define a sophisticated platform sufficient to develop visually and technically rich applications. The Sun Developer Network (SDN) has an MSA Overview that includes links to pages for each included JSR covering package names, system properties and technical articles. The major manufacturers are offering MSA devices and more are being announced each quarter.

The table below defines all of the packages available on an MSA device with a brief description of purpose and contents of each package.

MSA packages and classes
Java ME JSR Packages Description
JSR 139 CLDC 1.1 Various I/O Streams
java.lang Wrappers for basic types
java.lang.ref Reference and WeakReference classes
java.util Date and time classes, container classes Generic connection framework (GCF)
JSR 118 MIDP 2.1 java.lang Application resource files
java.util Timer and TimerTask classes GCF for http, https, ssl, TCP and UDP sockets, and serial port, and Push Registry
javax.microedition.lcdui User interface User interface for gaming Audio playback, support for media controls Controls to be used with a media Player
javax.microedition.midlet MIDlet execution environment
javax.microedition.pki Certificate management for secure connections
javax.microedition.rms Record Management System for persistent storage
JSR 238 Mobile i18n Formatting of locale specific-content, resource retrieval and sorting of text strings
JSR 75 PIM and File Access to on-device file systems.
javax.microedition.pim Contact, Event / Calendar and To-do list access.
JSR 82 Bluetooth javax.bluetooth Bluetooth client and server access
javax.obex Bluetooth object exchange
JSR 135 Mobile Media Media player and controls Specific media controls Media stream content types
JSR 172 Web Services javax.xml.parsers JAXP Subset APIs
org.xml.sax JAXP Subset APIs
org.xml.sax.helpers JAXP Subset APIs
java.rmi JAX-RPC Subset
javax.xml.rpc JAX-RPC Subset Core APIs
JSR 177 SATSA java.lang Two exceptions required from the Java SE platform
java.rmi A subset of the Java SE platform - Remote interface. Generation and storage of cryptographic public key pairs, a number of exportable cryptographic operations. Key specifications and algorithm parameters
javacard.framework Java Card API exceptions
javacard.framework.service Java Card API exceptions Java Card API exceptions
javax.crypto Cryptographic operations
javax.crypto.spec Key specifications and algorithm parameters
javax.microedition.apdu APDU protocol handler to a smart card device GCF for APDU and Java Card RMI
javax.microedition.jcrmi Classes and interfaces for Java Card RMI connections
javax.microedition.pki Classes to support basic user certificate management
javax.mimcroedition.securityservice Classes to generate application-level digital signatures
JSR 179 Location javax.microedition.location Location classes including address, coordinates, landmarks, location and orientation.
JSR 180 SIP javax.microedition.sip Session Initiation Protocol management
JSR 184 3D Graphics javax.miroedition.m3g API for 3D including scene graph structure and external file format
JSR 205 Wireless Messaging GCF for SMS and MMS connections
javax.wireless.messaging Message creation, sending and reception
JSR 211 CHAPI javax.microedition.content Invoke applications by URL, by content type, or by content handler application id
JSR 226 SVG javax.microedition.m2g SVG images and animators
org.w3c.dom Document, Element and Node classes Event handling
org.w3c.dom.svg Basic SVG data types and elements within a SVG document tree
JSR 229 Payment javax.microedition.payment Financial transaction management
JSR 234 Mobile Media Supp javax.microedition.amms GlobalManager and Spectator classes, media, effect and module interfaces.
javax.microedition.amms.control Specific controls for media management.
javax.microedition.amms.control.audio3d Controls for 3D audio effects
javax.microedition.amms.control.audioeffect Effect controls for audio controls Camera controls.
javax.microedition.amms.control.imageeffect Effect controls for video and still images
javax.microedition.amms.control.tuner Radio controls
JSR 248 MSA   Clarifications to the included JSRs

This article summarized the business reasons for learning and supporting Java ME technology. We hope it inspires you to check out the possiblities in the ever-growing and converging mobile and embedded market.

Rate and Review
Tell us what you think of the content of this page.
Excellent   Good   Fair   Poor  
Your email address (no reply is possible without an address):
Sun Privacy Policy

Note: We are not able to respond to all submitted comments.