Rod Waldhoff's Weblog  

< Thursday, 24 July 2003 >
A is for Axion ... Z is for Zaurus #

I've got Axion up and running on my Zaurus.

If you'd like to do the same, here's how:

  • Obtain a build of the Axion HEAD (1.0M3-dev). See the instructions on building Axion for details.

  • Obtain binaries of Axion's runtime dependencies, namely Jakarta Commons Collections (currently a nightly build is required) and Jakarta Commons Logging (you'll want release 1.0.3, earlier versions don't work on the Jeode VM).

    If you want to use the LIKE operator, you'll also need Jakarta Regexp.

    If you want to use the BASE64ENCODE or BASE64DECODE functions, you'll also need Jakarta Commons Codec.

  • Ensure that you have the java.util Collections and java.sql JDBC packages available on your platform. Since the Insignia Jeode VM installed on the Zaurus by default is JDK 1.1 based, I had to copy over the JDK Collections manually. I had thought the Collections package was available as a standalone JAR to drop in to JDK 1.1 environments but as I was unable to find it. I just copied over the rt.jar from a JDK 1.3 installation, but I think the java.util package would suffice.
  • Obtain a copy of You can pull this out of the Axion JAR or from CVS. Normally Axion loads this file out of the JAR automatically, but the Jeode VM seems to always return null for getClassLoader so we had to add a mechanism for specifying the configuration as an external file.

  • Now simply copy those files over to the Zaurus, add the JARs to your classpath, and you are ready to go. For example to run the Axion console I use:

     -classpath axion-1.0-M3-dev.jar:
                rt.jar $1 $2

Similar steps should get Axion up and running on other micro or J2ME platforms or for that matter, other JDK 1.1 environments. If the console is any indication, Axion seems to run rather well on the Zaurus (even running off a compact flash card rather than the RAM disk).

If folks were interested, it wouldn't be difficult to create an IPK installer for Axion, although my interest here, and others as well I imagine, is in using Axion within other apps on the Zaurus, rather than playing with Axion via the console.

If you're curious, I did have to make a few minor changes to Axion to get it run on the Jeode/JDK 1.1 VM. Here's a brief list of what I had to change:

  • The Jeode VM always seems to return null for getClassLoader (rather than throwing a security exception), so I had to add checks for null, and provide an alternative mechanism for loading the properties file.

  • We had used File.createNewFile in several places, which is a JDK 1.2 method. These calls turned out to be unnecessary anyway, so I simply removed them.

  • Although it's easy to add java.util.Comparable and java.util.Comparator to the classpath, none of the core objects (Number, String, etc.) actually implement Comparable in JDK 1.1, so I had to add custom Comparators replacing ComparableComparator for those DataTypes.

  • For reasons I don't understand, in several places where we had an hierarchy like this:

    interface Foo {
      void someMethod();
    abstract class AbstractBar implements Foo {
      void anotherMethod() {
    class Bar extends AbstractBar {
      void someMethod() {

    I had to declare the interface methods in the abstract class:

    abstract class AbstractBar implements Foo {
      abstract void someMethod();
      void anotherMethod() {

    to make various AbstractMethodErrors go away.

These changes have already been checked into the HEAD version of Axion, and should be part of the Milestone 3 release.

There are few Axion-based apps I've been thinking of tinkering with on my Zaurus, some for personal use, others for my day job. That may shake out a few issues I haven't yet encountered, but so far I've got feature I've tried working without too much trouble.