Hessian
- Lightweight binary protocol by Caucho
- HTTP-based
- Uses custom serialization mechanism
- Support for several platforms
PHP / Python / C++ / C# / Ruby / Java - Problematic when using for example
Hibernate lazy loading without OSIV - HessianServiceExporter
- HessianProxyFactoryBean
Burlap
- XML-based lightweight protocol (Caucho)
- HTTP-based
- Uses custom serialization mechanism
- Known support only for Java
- Problematic when using for example Hibernate lazy loading without OSIV
Spring HttpInvoker
- Spring-based Java-to-Java remoting
- HTTP-based
- Uses Java serialization just like RMI
- Easy to setup(no HTTP tunneling as with RMI)
- HttpInvokerServiceExporter
- HttpInvokerProxyFactoryBean
RMI
- Plain-and-simple RMI
- With some additions:
Converts checked RemoteExceptions to unchecked RemoteAccessExceptions
Supports exposing plain Java interfaces - Client support for both Spring-exposed as well as convential RMI endpoints
- RmiServiceExporter
- RmiProxyFactoryBean
RMI-IIOP / CORBA
- Ability to use RMI-IIOP implementation from vendor (see demo)
- Of course with the need for stubs and skeletons
- With a Spring-based client, still no need for java.rmi.Remote
- JndiRmiServiceExporter
- JndiRmiProxyFactoryBean
When to use what
- Both client and server under control
Both Spring: HttpInvoker, Hessian, Burlap
Low bandwidth: Hessian, Burlap(beware of complex object graphs)
No servlet container: RMI(-IIOP) - Only server under control: RMI
- Multiple client platforms: Hessian(or web services)
- Need for security: HttpInvoker or RMI