LibraryLink ToToggle FramesPrintFeedback

Chapter 23. JavaSpace

The javaspace: component is a transport for working with any JavaSpace compliant implementation, this component has been tested with both the Blitz implementation and the GigaSpace implementation. This component can be used for sending and receiving any object inheriting from the Jini Entry class, it's also possible to pass an id (Spring Bean) of a template that can be used for reading/taking the entries from the space. This component can be also used for sending/receiving any serializable object acting as a sort of generic transport. The JavaSpace component contains a special optimization for dealing with the BeanExchange. It can be used, then, for invoking remotely a POJO using as a transport a JavaSpace. This latter feature can be used for an easy implementation of the master/worker pattern where a POJO provides the business logic for the worker. Look at the test cases for seeing the various usage option for this component.

javaspace:jini://host?options

In this case the payload can be any object inheriting from the Jini Entry.

Using the routes as above it's also possible to send and receive any serializable object. The component detects that the payload is not a Jini Entry and then it automatically wraps the payload into a Camel Jini Entry. In this way a JavaSpace can be used as a generic transport.

The camel-javaspace component has been tailored to work in combination with the camel-bean component. It's possible, then, to call a remote POJO using JavaSpace as a transport:

In the code there are two test cases showing how to use the a POJO for realizing the master/worker pattern. The idea is to use the POJO for providing the business logic and relying on FUSE Mediation Router for sending/receiving requests/replies with the proper correlation.

Name Default Value Description
spaceName null This is the JavaSpace name
verb take This is the verb for getting JavaSpace entries, it can be: take or read
transactional false if true, sending and receiving of entries is performed under a transaction
transactionalTimeout Long.MAX_VALUE the transaction timeout
concurrentConsumers 1 the number of concurrent consumer getting entries from the JavaSpace
templateId null if present, this option it's a Spring Bean id to be used as a template for reading/taking entries

To use this module you need to use the FUSE Mediation Router distribution. Or you could just add the following to your pom.xml, substituting the version number for the latest & greatest release.

<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-parent</artifactId>
  <version>1.4.0.0-fuse</version>
</dependency>

And ensure you are pointing at the maven repo

   <repository>
     <id>open.iona.m2</id>
     <name>IONA Open Source Community Release Repository</name>
     <url>http://repo.open.iona.com/maven2</url>
     <snapshots>
       <enabled>false</enabled>
     </snapshots>
     <releases>
       <enabled>true</enabled>
     </releases>
   </repository>

The source for camel-javaspace is available here: https://projects.open.iona.com/projects/svn/iona/camel/trunk/components/camel-javaspace/

You'll need to register with http://open.iona.com to be able to access subversion.

The full FUSE distro is here: https://projects.open.iona.com/projects/svn/iona/camel/trunk/