I had lunch & a good chat with John Davies
yesterday. Among the many things we chatted about JavaSpaces came up.
In the past John has found JavaSpaces to be a very useful way of
building complex distributed applications easily allowing lots of
'worker nodes' to be plugged together into a cluster with failover to make a grid etc.
It got me thinking about JavaSpaces again. I look at it every year or
so and it never quite seems to fit for some reason - it always seems to
me to be a combination of database, cache and message bus doing a bit
of everything but never quite using the power of any of these
technologies quite optimally for my liking. (Jack of all trades and all
I thought as an experiment, lets try come up with a JavaSpace-like API
which is really simple to use and has the same kinds of semantics but
which could be very efficiently layered on top of any existing high
performance messaging system - using high performance streaming of
objects both intra-VM and around a cluster while allowing for powerful
routing & filtering, both queue and publish/subscribe semantics and
various Quality of Services (reliable, durable etc) and levels of transactionality etc.
Without further ado, here's my first cut of the API for ActiveSpace.
I'd really appreciate comments, especially from existing JavaSpace
users to see what folks think. e.g. are there things that you really
rely on that JavaSpaces does that ActiveSpace can't do?
If there's sufficient interest I'd be happy to actually implement this
thing :) (using an Apache 2.0 licence of course). It should be pretty
trivial to do on top of any JMS provider and support custom marshalling
(serialization, XMLBeans, XStream etc) and support Spring-like
transaction demarkation, XA etc.