Some reader favorites:
EJB fundamentals and session beans
Create a scrollable virtual desktop in Swing
More action with Struts 2
In a recent review of Struts 2 in Action, JW Blogger Oleg Mikheev notes that Struts 2 is "just a collection of extensions built upon WebWork, which is ultimately
the right thing to learn before starting a Struts 2 project." While Struts 2 has some architectural flaws, Oleg calls WebWork
well-designed, well-tested, and reliable. What are your experiences using Struts 2 and WebWork?
Also see "Hello World the WebWork way," a JavaWorld excerpt from WebWork in Action, by Patrick Lightbody and Jason Carreira.
| Memory Analysis in Eclipse |
| Enterprise AJAX - Transcend the Hype |
Today, we can see three distinct but overlapping eras of computing:
Most of us use more computers embedded in devices and appliances than we do PCs, workstations, and mainframes combined. For instance, a quick inventory of my average workday shows that I use a laptop, a couple of servers, and a workstation. But the car I use to commute to work each day has many more CPUs than all of those traditional computers put together! When we include the computer chips in mobile phones, Palm handhelds, microwave ovens, Ethernet hubs and the communication equipment we use at work (the phone system, and so on), you can see that we're already firmly planted in the era of ubiquitous computing.
Not only are CPUs everywhere, but almost all of our interactions with CPUs involve (or very soon will involve) interactions with networks. How can you as a programmer take advantage of computers and networks embedded everywhere in heterogeneous devices and environments?
Many articles on the history of Java describe its early days as having been device-oriented. Java was originally designed for nontraditional computing devices; over time, it moved up into desktops and servers. From the beginning, Java's small bytecode size, ability to move objects around networks, and cross-platform portability were engineered to enable programming for small, mobile, heterogeneous devices. It luckily turned out that these features were also quite useful in an interconnected, Net-based world on bigger computers.
Java technology has come full circle, and programming devices with Java is once again on the rise. In this column, I will examine the various APIs, tools, and products available for Java programming for various consumer devices, such as personal digital assistants (PDAs), mobile phones, pagers, and similar embedded computers.
As these articles unfold, I hope you will gain a greater appreciation of both what Java can do for these devices and how you can take advantage of them in future projects.
Sun and its partners are building a number of Java device environments and APIs:
In addition, several other companies have independent clean-room Java for consumer and embedded device initiatives. Among these, the most talked about technologies include:
There are also some emerging sets of consumer-oriented APIs. These API groupings, known as profiles in Sun parlance, are meant to sit on top of underlying Java runtimes and provide a certain level of portability and interoperability within classes of devices targeted at specific markets or vertical industries. Note that profiles may include other profiles -- that is, profiles can be nested.
Profiles are currently under development by working groups within the consumer device and embedded device community. Some possible profiles to watch for include:
The profiles are still under development, but most of the platforms and tools are already available in some form. Please refer to the Resources at the end of this column for more information on each of the platforms, profiles, and other embedded Java technologies mentioned above.
The states of the major consumer and embedded Java APIs and technologies as of June 23, 1999 are revealed in the following table.
| Technology | Type | API specification (version) | FAQ | Reference implementation (version) | Discussion e-mail list |
| PersonalJava | Application environment (likely profile in future) | Yes (1.1.1) | Yes | Yes (3.0, corresponds to 1.1.1 API) | No |
| JavaPhone | Extension API (likely part of one or more profiles) | Yes (0.91) | Yes | No | No |
| JavaTV | Extension API (likely part of one or more profiles) | Yes (0.90) | Yes | No | No |
| EmbeddedJava | Application environment | Yes (1.1) | No | Yes (Based upon JDK 1.1.6) | No |
| JavaCard | Platform | Yes (2.1) | Yes | Yes (early access) | No |
| K Virtual Machine | Runtime environment | No (expected by end of July 1999) | No (does have datasheet and whitepaper) | Yes (early preview to JavaOne attendees only) | Yes (refer to KVM site for subscription info) |
| Java 2 Platform, Micro Edition | Java 2 Platform, for devices | No | No | No (except for KVM preview at JavaOne) | No (except for KVM mailing list) |
Note that the above refers to publicly available information from Sun and other companies and does not include licensee-only releases or nonreference implementations. Most of this information came from links available from Sun's Java home page, from the home pages of other companies, or from public announcements and demonstrations at the 1999 JavaOne Developer Conference.
Be sure to review the URLs provided in the Resources at the end of this article for more information. The JavaOne Today article on device developments, in particular, contains a lot of useful resources and information.
Please also be sure to review the material on the J2ME Web site, as Sun's repackaging of Java 2 technology into an Enterprise Edition (J2EE), Standard Edition (J2SE), and Micro Edition (J2ME) will likely have many subtle but important consequences in the coming months.
We will explore the details of these technologies in later articles. Taken as a whole, they give developers a lot of options and opportunities for targeting devices in Java.
I had a fair amount of success with my Media Programming column roadmap, so why not issue another? Over the course of this column, I will track the various Java device programming technologies and give as many concrete examples as possible so that you can learn about them and use them yourself. I will always provide information on any emulators and related tools that will let you get started programming devices as early as possible, sometimes even before the actual device hardware is available. (This should also keep your costs down as you follow the column and learn about programming devices.) I strongly encourage you to get your hands dirty with the code as the columns roll out.
Ideas for upcoming columns include:
As always, please let me know about topics you want covered. I appreciate any ideas or comments you care to share. I hope this column will provide you with useful information and ideas that allow you to develop networked Java applications for use throughout the ubiquitous computing infrastructure.
I had good success with the nomenclature I used in my Media Programming columns. Therefore, I've decided to keep this nomenclature, with a couple of slight updates.
For this column, I hope to provide platform-specific tips and tricks where possible, but I will focus on Java, then Windows and Linux, since that is where I will be spending most of my time.
I will be distinct in my usage of the terms consumer and embedded. I will use the former to refer to Java for small devices and the latter for devices embedded into systems (like a network chip in the telephone system). Context should help to clear up any confusion.
I will always attempt to:
methodName().
com.billday.device, with each topic nested in at least one subpackage under this top level. For instance, all of the code for the upcoming Palm
programming series will be in com.billday.device.palm.
billday.jar.
All of the source code and examples will be available under the most liberal open source or community source license I can find. (I have used the GNU General Public License in the past, but some readers have found that too restrictive; I am strongly considering the Sun Community Source License (SCSL) or something similar. If you have suggestions, please send me an e-mail.)
Thousands of JavaOne attendees have already started writing Java code for their Palm devices. In the next few months we will see the deployment of Java on Palms, mobile phones, and other devices increase rapidly. Millions of Palm handhelds are in widespread use today, and Symbian's partners plan to deploy 40 to 60 million Java-enabled wireless phones within the next three years. The moral of the story: Java device programming is real today, and will be extremely widespread in very short order.
Next month, I will kick off a series on Java programming for Palm devices. The time to start developing for these Java-enabled devices is now, so let's get busy!
libgcj library. Part of the toolkit is GCJ, a Java front-end compiler that works with various GNU back-end compilers to enable Java-to-native
compilation