|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object org.springframework.remoting.support.RemoteExporter org.springframework.remoting.support.RemoteInvocationBasedExporter org.springframework.remoting.rmi.RmiServiceExporter
RMI exporter that exposes the specified service as RMI object with the specified name. Such services can be accessed via plain RMI or via RmiProxyFactoryBean. Also supports exposing any non-RMI service via RMI invokers, to be accessed via RmiClientInterceptor/RmiProxyFactoryBean's automatic detection of such invokers.
With an RMI invoker, RMI communication works on the RmiInvocationHandler level, needing only one stub for any service. Service interfaces do not have to extend java.rmi.Remote or throw 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, use 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. Ensuring 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
RmiClientInterceptor
,
RmiProxyFactoryBean
,
Remote
,
RemoteException
,
HessianServiceExporter
,
BurlapServiceExporter
,
HttpInvokerServiceExporter
Field Summary |
Fields inherited from class org.springframework.remoting.support.RemoteExporter |
logger |
Constructor Summary | |
RmiServiceExporter()
|
Method Summary | |
void |
afterPropertiesSet()
Register the service as RMI object. |
void |
destroy()
Unbind the RMI service from the registry at bean factory shutdown. |
protected java.rmi.Remote |
getObjectToExport()
Determine the object to export: either the service object itself or a RmiInvocationWrapper in case of a non-RMI service object. |
protected java.rmi.registry.Registry |
getRegistry(int registryPort)
Locate or create the RMI registry for this exporter. |
protected java.lang.Object |
invoke(RemoteInvocation invocation,
java.lang.Object targetObject)
Redefined here to be visible to RmiInvocationWrapper. |
void |
setClientSocketFactory(java.rmi.server.RMIClientSocketFactory clientSocketFactory)
Set a custom RMI client socket factory to use for exporting. |
void |
setRegistryPort(int registryPort)
Set the port of the registry for the exported RMI service, i.e. rmi://localhost:PORT/name Default is Registry.REGISTRY_PORT (1099). |
void |
setServerSocketFactory(java.rmi.server.RMIServerSocketFactory serverSocketFactory)
Set a custom RMI server socket factory to use for exporting. |
void |
setServiceName(java.lang.String serviceName)
Set the name of the exported RMI service, i.e. rmi://localhost:port/NAME |
void |
setServicePort(int servicePort)
Set the port that the exported RMI service will use. |
Methods inherited from class org.springframework.remoting.support.RemoteInvocationBasedExporter |
getRemoteInvocationExecutor, invokeAndCreateResult, setRemoteInvocationExecutor |
Methods inherited from class org.springframework.remoting.support.RemoteExporter |
checkService, checkServiceInterface, getProxyForService, getService, getServiceInterface, setService, setServiceInterface |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Constructor Detail |
public RmiServiceExporter()
Method Detail |
public void setServiceName(java.lang.String serviceName)
public void setServicePort(int servicePort)
public void setRegistryPort(int registryPort)
public void setClientSocketFactory(java.rmi.server.RMIClientSocketFactory clientSocketFactory)
setServerSocketFactory(java.rmi.server.RMIServerSocketFactory)
,
UnicastRemoteObject.exportObject(Remote, int, RMIClientSocketFactory, RMIServerSocketFactory)
public void setServerSocketFactory(java.rmi.server.RMIServerSocketFactory serverSocketFactory)
setClientSocketFactory(java.rmi.server.RMIClientSocketFactory)
public void afterPropertiesSet() throws java.rmi.RemoteException
afterPropertiesSet
in interface InitializingBean
java.rmi.RemoteException
protected java.rmi.registry.Registry getRegistry(int registryPort) throws java.rmi.RemoteException
registryPort
- the registry port to use
java.rmi.RemoteException
- if the registry couldn't be located or createdprotected java.rmi.Remote getObjectToExport()
protected java.lang.Object invoke(RemoteInvocation invocation, java.lang.Object targetObject) throws java.lang.NoSuchMethodException, java.lang.IllegalAccessException, java.lang.reflect.InvocationTargetException
invoke
in class RemoteInvocationBasedExporter
invocation
- the remote invocationtargetObject
- the target object to apply the invocation to
java.lang.NoSuchMethodException
- if the method name could not be resolved
java.lang.IllegalAccessException
- if the method could not be accessed
java.lang.reflect.InvocationTargetException
- if the method invocation resulted in an exceptionRemoteInvocationExecutor.invoke(org.springframework.remoting.support.RemoteInvocation, java.lang.Object)
public void destroy() throws java.rmi.RemoteException, java.rmi.NotBoundException
destroy
in interface DisposableBean
java.rmi.RemoteException
java.rmi.NotBoundException
|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |