Personally, I think J2ME is what Java is really about. Let's leave aside the fact that Java was originally developed (as project Oak) for just this purpose, and see what it means today.
The demand for embedded microprocessor systems has exploded, as consumers and equipment manufacturers require systems that incorporate more "intelligence." The "intelligence" is used in a number of different ways. Systems can, of course, be used to automate complex tasks without user intervention - the traditional requirement. However, there's also a trend toward systems that are adaptive to changing needs and can communicate with other equipment or with other applications running on the same device.
These extra requirements are putting traditional methods of designing embedded systems under increasing strain. Conventional embedded systems can suffer from the following problems: increased complexity and device count, lack of portability of solutions, lack of support for networking, poor performance, and so forth. Designing a working embedded system has been something of a black art, and the number of engineers with the required skills are in short supply.
Java, and J2ME in particular, offers a number of solutions to these problems, and also offers the promise of completely new ways of building embedded systems.
The most obviously helpful feature of Java is the notion of "write once, run anywhere." This is achieved through the distribution of code via class files, and also through the definition of the APIs. In the past, it was extremely difficult to port an application from one embedded platform to another. With Java it'll be easier to sell your application into multiple markets.
Of course, the big bugbear of using Java in embedded environments was always the large amount of resources required to run interpreted or Just-In-Time (JIT) JVMs - usually a desktop PC. Now that we have J2ME and, in particular, Java processors, Java in embedded systems will really take off.
However, my vision is a little different from what you might expect. When most of us start eulogizing about J2ME and Java processors, it's all about cheap color PDAs using Java. Me, I get excited about light switches. My company makes native processors for Java-based applications, and these are already small enough so we can see that the cost of a Java-based controller will, in five years time, be cheap enough to put in your light switch.
Why would you want to run Java on your light switch? If you need to control your lights, you need some way of communicating with them, and this brings in the other part of the equation: wireless. Cheap wireless technologies change the picture completely because they do two things: slash installation costs and allow you to work with any controller that supports wireless technology. However, technologies such as Bluetooth need Java; the communication protocols need a reasonable amount of processing power to manage them. In the past, providing this resource for a light switch was unthinkable, but now it's just around the corner.
Java immediately brings other benefits too. The light switch is now capable of announcing itself to any passing controller, which can discover what capabilities it has and could even download a controller applet from the switch.
And what is that passing controller? Very probably a mobile phone running - guess what? - Java! These devices are starting to appear in the shops right now, so this is not science fiction. Using mobile phones as controllers also means you get wide-area networking for free. Mind you, it might be disconcerting to find that your huge phone bill is due to the light switch talking to its friend in Japan.
Do I have to change all my light switches? No, of course not. The light switch simply downloads a new interface, or possibly the controller downloads an adapter class. Easy! And automatic too - the user wouldn't need to know it has happened.
The light switch is perhaps a facetious example; it certainly won't be the first application of the technology, and it sounds a bit like overkill. However, I think it's the ultimate point of this sort of technology: cheap, controllable, and above all, adaptable.
Rob is a founder and technical director of Vulcan Machines, designers of native processors for Java-based applications. Rob has been involved in the manufacture of semiconductors for nearly 20 years and has been designing microprocessors for 10. In the last three years, he has concentrated exclusively on Java technology.