Remoting

Introduction

Remoting is a framework issuing remote calls over TCP/IP with optional TLS support. It provides for callback patterns, broadcating and bean support and interoperates well with the spring framework and OSGi.

Furthermore, it offers two alternative wire protocols. One is based on java.io.ObjectOuputStream while the other protocol uses a highly optimized binary data stream, which additionally features C++ interoperability through the fancysock library.

The source code can be checked out from the SVN repository located here:

http://svn.clazzes.org/svn/remoting

For manual installation you may download the .jar files from the maven repository:

http://maven.clazzes.org/org/clazzes/remoting/

Maven integration

We recommend to build your project with Maven. Just add the following snippets to your pom.xml file:

<repository>
  <id>clazzes.org</id>
  <url>http://mvn.clazzes.org/</url>
</repository>
 
<dependency>
  <groupId>org.clazzes</groupId>
  <artifactId>remoting</artifactId>
  <version>yourversion</version>
</dependency>

Source code and issue tracker

Subversion: http://svn.clazzes.org/svn/remoting

Jira: REMOTING

Git-Mirrors: See https://git.clazzes.org/, search for "java-libs/rpc".

Protocol and Client / Server Support

Binary Protocol

The binary protocol that is based on but not quite equal to Java serialization.

Both Java and C++ can act as client and server for this variant.

Binary Protocol C++

For C++ see fancysock3-dev from the *-fancylibs-3 repos on deb.clazzes.org and rpm.clazzes.org.

As as starting point look at class Fancy::Sock::RemotingConnectionHandlerFactory (server) and Fancy::Sock::RemotingClientPool (client).

JSON Protocol

The JSON protocol is based on JSON-RPC-2.0 and supported by a server helper for C++, and there are examples for JavaScript clients (but nothing public yet).

JSON Protocol C++

For C++ see fancysock3-dev from the *-fancylibs-3 repos on deb.clazzes.org and rpm.clazzes.org.

As as starting point look at class Fancy::Sock::HttpD::JsonRpc2RequestHandler.

JSON Protocol JavaScript

There is no public example from clazzes.org yet, but it's basically JSON-RPC-2.0.

JSON Serialization and Deserialization behaviour & requirements (of C++ backend)

If an object is serialized all fields are serialized. Addtionally there's a field "serialID" that's basically the fully qualified class name of the Java data classe ("POJO"), like org.clazzes.foobar.api.data.MyPojo. All complex fields can be null, including Strings.

When deserializing a complex top-level object that field "serialID" is required to understand the contained type.