Are you ready for WABA?
By Piroz
Mohseni
The so-called experts predict that the next big wave will involve small devices running network-aware applications. Coming from a Java background, I was looking for an environment that allowed me to develop device applications using Java. Furthermore, since I already had a PalmPilot, I wanted to develop applications for the Palm OS. I found a perfect match called Waba from wabasoft.com. Although still a beta release, Waba provides a nice entry point to satisfy the curiosity of those who are interested in learning about developing applications for small devices. In this article, I'll summarize my experience.
Waba has several components. First there is the Waba Virtual Machine which you must install on your PalmPilot. The VM is small (around 36K). The distribution is a zip file. Two files in the distribution make up the VM. They are waba.pdb and waba.prc. You should install these two files in your PalmPilot as you do any other installations. I used the Palm Desktop program to upload these files into my PalmPilot.
The other component is the Waba SDK, which is what you would use to develop Waba applications. The SDK contains a number of Java classes, which make up the API for Waba. You write your applications in Java and compile them using your favorite Java compiler/IDE. The only catch is that you are limited to using only the classes that are part of the SDK. While your full-scale Java compiler will compile any valid Java program, the Waba VM does not support the entire Java environment. So if you use a class that is not part of Waba, you won't see an error until you run it inside your Waba VM (on the PalmPilot). This took me a while to get used to, since I constantly had to check to see what I was about to write was indeed supported by Waba VM.
In this section, we'll go through the typical steps for writing a Waba application. There is a good tutorial on the Wabasoft Web site, and there are some example applications in the Waba SDK as well. For our purposes, I decided to write a simple data-entry application. Once the data is entered, the application will provide an XML representation of the data. That XML output can then be sent to another device for further processing (but that's beyond the scope of this article).
Our task is then to display a few fields where the user can enter some data. The program will then translate that data into XML and display it back. I developed this application on Windows 98, with JDK 1.2 from Sun Microsystems and Beta 8 of Waba SDK. I tested the program on Palm V and Palm IIIx.
Writing a Waba application is similar to writing an applet. Waba classes inherit from the MainWindow class. You have a graphics context where you can draw text and geometric objects. You also have access to an array of user interface controls such as labels, buttons, check boxes, radio buttons, etc. If you have been doing GUI development with Swing, you will be disappointed with what Waba has to offer, but always remember the environment where Waba programs were intended to run. Small devices most likely will not support a sophisticated GUI any time soon (see your VCR for an example).
The entire listing for our program is shown in Listing 1. The program uses a number of controls like buttons, labels, and check boxes. Displaying a control is merely a matter of instantiating it and then placing it on the screen. For example, to place a label you have to do the following:
label = new Label("Enter Information:");
label.setRect(30, 0, 60, 30);
add(label);
The
setRect() |
method specifies the x,y location on where the label should go (x=30, y=0 in our example) and the width and height of the label control (width=60, height =30 in our example).
The constructor for our class calls the
FirstPage() |
method which basically paints the data-entry screen for our application. Creating user interfaces by hand can become very tedious. There is an application called "UIGen" which helps in creating complex Waba user interfaces. The application is available from the WabaSoft site.
The next part of the program had to capture an event and
then display the XML data. The event I decided to capture was the pressing of a
button. Waba is based on a simple event model. The
onEvent() |
method can be overridden to provide custom event-handling.
This method received an Event object as its input. We check to make sure the
event is a "
PRESSED |
" event and its source was the button on our data-entry screen using the following code:
if (event.type == ControlEvent.PRESSED && event.target == button) {
SecondPage();
}
Again, the event model is not like Java's event model with
event sources and listeners, but it is good enough for simple applications.
Other methods that can be overridden include
onStart() |
,
onExit() |
, and
onPaint() |
.
When the mouse press occurs, we remove all the controls
from the page and then display the XML output using a series of
"Edit" controls (one on each line). That code is in the
SecondPage() |
method, which is called by the event handler.
Listing 1. This program displays a few "edit" boxes and then converts the input data into XML.
|
Listing 1 |
|
|
With the application in hand, we had to compile it and
upload it to the Palm device. The compilation is just like any Java program.
Make sure the Waba classes are included in your CLASSPATH. The development
process would be too cumbersome if you had to upload the program to the
PalmPilot every time while you debug and fine-tune it. To get around that, you
can actually see your Waba program on your PC using a Java applet environment
that simulates the PalmPilot screen. If your application code is in a file called
foo.class |
, you can run it using the following command:
java waba.applet.Applet foo |
The files that get uploaded to the PalmPilot are not the
Java class files. You have to go through an extra step. In the bin directory of
the Waba SDK, there are two programs called
exegen.exe |
and
warp.exe |
. These are binary programs and only run under Windows, but you can download versions for other platforms as well.
The
exegen |
program generates a PalmPilot OS executable that actually
launches your program under the Waba VM. With
exegen |
, you can specify the application name, its memory allocation requirement, and an icon (in the form of a .bmp file). Palm OS executables have a ".prc" extension. If you don't specify any parameters, the default is taken. For our example, we used the following command line:
exegen MyApp ShowXML MyApp |
The first parameter is the name of the output file without the .prc extension. The second parameter is the name of the main class of the application and the last parameter is the "warp" file that contains the Java classes (without the .extension). The warp program is a packaging application that merely puts the various files needed for your application (mainly class files) into one single file with the .pdb extension. We used the following command line for our program:
warp c MyApp ShowXML.class |
The first parameter (i.e.,
MyApp |
) must match the last parameter of the
exegen |
program.
You should now have a .pdb and .prc file. The .pdb file is really the container of your application code. The .prc file merely launches your program and does not change when your program changes. You can now install these two files on your PalmPilot, find the icon representing the ShowXML application (called MyApp), and run it. Congratulations! You have just written an application for a device without doing chip design!
Waba is a nice environment for developing simple to moderate applications using the Java programming language. Small devices have their own unique requirements, so simply knowing Java is not going to be enough for developing effective applications for devices. One must take into account the network capabilities, memory limitations, and performance issues often associated with such applications. Your PalmPilot is not running a 500-MHz Pentium processor. There are two good articles on the WabaSoft Web site regarding performance and memory issues of Waba programs.
Another factor to consider is that Sun wants Java to be a big player in the device market and will have offerings in that market soon. It would be interesting to see how an environment like Waba or REBOL would compete under that scenario. For now, if you are curious about device applications or simply want to create a program to impress your PalmPilot-loving friends, Waba is definitely a nice place to start.
Java programming for
the Palm OS using Jump
Piroz Mohseni is president of Bita Technologies focusing on business improvement through effective usage of technology. His areas of interest include enterprise Java, XML, and e-commerce applications. Contact him at mohseni@bita-tech.com.