Posted by kohsuke
on December 28, 2005 at 12:58 PM PST
A year-end progress report about my Dalma project. Byte code, byte code, and more byte code ...
I've been working on a project called Dalma , a variation of workflow engine that uses continuation. I've implemented the 'engine' component, that can be embedded into any application. Then the 'container' component, which works like a web container and hosts user-written applications (a container is harder to reuse, but it frees developers from low-level details, such as where to persist data, byte-code instrumentation, configuration, logging, etc.)
I then implemented a web user interface around the container; it's a web application that allows you to host the whole container inside a web container. I thought this is probably the easiest-to-use option, since all you need to do is just to drop a war in your web container. It gives you nice GUI for administration and monitoring, too. So far, so good (screen shot below)
I'm now at a point of deploying some workflow application into this web ui, so I'm using my hangman game as a guinea pig. The application itself is small, but it uses an e-mail endpoint, which uses JavaMail, and, that's a sizable library. Loading this inside javaflow revealed a lot of javaflow bugs, and so for the past few days, I'm fixing bugs in javaflow, struggling with byte code, byte code verifications, Java VM spec, and all those low level things.
In fact, I'm so deep in this stuff that I suspect I might be able to actually write my own byte code verifier.
One thing you really need when you are working with bytecode generation is a good verifier that can tell you why/where/how your (generated) byte code violates the JVM spec. I haven't found a good one yet, and I might just as well write one.