Monday, October 27, 2008

Clustering Kawa with Terracotta

In my recent post I described a method of building a cluster of JScheme instances using Terracotta object management system. I also prepared a small library for JScheme that makes using Terracotta in JScheme easy - it is LGPL licensed and free for download. Today I tried the same trick with Kawa, which is not only a full-featured Scheme implementation in Java, but also a complete framework for implementing other programming languages to run on Java platform. Knowing how to cluster JScheme, making Kawa work with Terracotta was a piece of cake.
First you start a Terracotta server. Then you run a Kawa shell through the following command:

java -Xbootclasspath/p:[terracotta boot jar] -Dtc.config=tc-config.xml -Dtc.install-root=[terracotta install dir] -jar kawa.jar

Just as with JScheme, boot jar is is a stub jar file that starts a Terracotta client before the main application and tc-config is a Terracotta configuration file (see the post about JScheme for details).
Next, you load the Terracotta library:

(load "kwtc.scm")

and define an object (for example an ArrayList) to share across the cluster:

(define ob (create-root "list" (make <java.util.ArrayList>)))

Now you can put values on the list:

(sync-write (lambda () (ob:add 1)) ob)

and read them back synchronously:

(sync-read (lambda () (ob:get 0)) ob))

or simply with:

(ob:get 0)

The library for Kawa can be downloaded from here.
Happy coding!

No comments: