With an RMI invoker, RMI communication works on the {@link RmiInvocationHandler}level, needing only one stub for any service. Service interfaces do not have to extend java.rmi.Remote
or throw java.rmi.RemoteException
on all methods, but in and out parameters have to be serializable.
The major advantage of RMI, compared to Hessian and Burlap, is serialization. Effectively, any serializable Java object can be transported without hassle. Hessian and Burlap have their own (de-)serialization mechanisms, but are HTTP-based and thus much easier to setup than RMI. Alternatively, consider Spring's HTTP invoker to combine Java serialization with HTTP-based transport.
Note: RMI makes a best-effort attempt to obtain the fully qualified host name. If one cannot be determined, it will fall back and use the IP address. Depending on your network configuration, in some cases it will resolve the IP to the loopback address. To ensure that RMI will use the host name bound to the correct network interface, you should pass the java.rmi.server.hostname
property to the JVM that will export the registry and/or the service using the "-D" JVM argument. For example: -Djava.rmi.server.hostname=myserver.com
@author Juergen Hoeller
@since 13.05.2003
@see RmiClientInterceptor
@see RmiProxyFactoryBean
@see java.rmi.Remote
@see java.rmi.RemoteException
@see org.springframework.remoting.caucho.HessianServiceExporter
@see org.springframework.remoting.caucho.BurlapServiceExporter
@see org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter
|
|