- Cajo project
The Cajo Project is a framework that enables multiple Java applications that are spread across multiple machines to work together as one transparently and dynamically.This framework is useful for both open/free and proprietary applications that need distributed computing capabilities and is capable of being used on almost any Java-equipped platform (JRE/JME 1.2 or higher) (
mobile phones ,mainframes , servers, embedded devices, etc.). It is a “drop-in” framework, because it does not impose any structural requirements orsource code changes and is 100% pure Java with no XML code. It also is not dependent on any other frameworks and can work behind NAT,firewalls , evenHTTP proxies .History
The Cajo Project has recently been issued by the IANA port number 1198 and UDP Multicast address 224.0.23.162.
License
The source code is free under the LGPL, and the documentation is free under the GFDL.
Usage
Overview
Using the Cajo Project, ordinary unmodified Java objects, can be remote using a single line of code [cite web
url=https://cajo.dev.java.net/overview.html
title=Adding cajo to existing applications
publisher=Cajo project
date=2007-08-04
accessdate=2008-01-19] :Itemserver.bind(someObject, "someName");These can then be used by remote machines either statically, or dynamically.
tatic remote object usage
"Static remote object usage" is typically performed when there exists one or more interfaces to the object, defining how the client may use it, known at
Compile time . For example:public interface SomeInterface { ... // method signatures}The remote object implements this interface, and possibly others, then remotes the object as shown previously.
"Static remote object usage" is provided through a
TransparentItemProxy
[cite web
url=http://wiki.java.net/bin/view/Communications/TransparentProxy
title= Using remote objects as if they were local
publisher=Cajo project
date=2007-08-04
accessdate=2008-01-19] . The user of a remote object can create a reference to this object, which actually implements the shared interface, as follows:SomeInterface si = (SomeInterface)TransparentItemProxy.getItem( "//someHost:1198/someName", new Class [] { SomeInterface.class } );A remote machine may now invoke methods on the remote object, with the exact Java syntax and semantics, as if it were local.
Dynamic remote object usage
"Dynamic remote object usage" is typically performed when the interface to an object will be determined at runtime. This is often the case when using Cajo remote objects in a scripting [cite web
url=http://wiki.java.net/bin/view/Communications/CajoScripting
title= Why script cajo?
publisher=Cajo project
date=2007-08-04
accessdate=2008-01-19] . A machine dynamically uses a remote object reference as follows:// obtain referenceObject object = Remote.getItem("//someHost:1198/someName");// typically obtained at runtimeString someMethod = "someMethod";
// also obtained at runtimeObject someArgs = new Object [] { someArgs, ... };
Object result = Remote.invoke(object, someMethod, someArgs);
This snippet invokes a method on a remote object, providing the arguments, "(if any)" and returning the result. "(if any)"
The cajo framework can allow a machine to remote its object reference using UDP/IP Multicast [cite web
url=http://wiki.java.net/bin/view/Communications/UsingMulticast
title= Using cajo Multicasting
publisher=Cajo project
date=2007-08-04
accessdate=2008-01-19] . This technique lets machines interested to use remote references, simply listen for the announcements. This provides a "One-to-many " linkage mechanism, where the users of the remote object do not need to know the TCP/IP address of the host machine.Remote graphical user interfaces
The Cajo Project is also used to remote graphical user interfaces [cite web
url=http://wiki.java.net/bin/view/Communications/ProxyUsage
title= Using the cajo proxy mechanism
publisher=Cajo project
date=2007-08-04
accessdate=2008-01-19] . This provides the ability for an application to run its view on separate machines from its model, and even its controller objects.ee also
*
Java remote method invocation References
External links
* [https://cajo.dev.java.net/ https://cajo.dev.java.net/] The Cajo Project page
* [https://cajo.dev.java.net/servlets/NewsItemView?newsItemID=2539 Official IANA port number Announcement ]
* [https://cajo.dev.java.net/servlets/NewsItemView?newsItemID=3564 IANA Multicast Address Announcement ]
* [http://www.iana.org/assignments/multicast-addresses Internet Multicast Addresses ]
Wikimedia Foundation. 2010.