public class RmiProxyFactoryBean extends RmiClientInterceptor implements org.springframework.beans.factory.FactoryBean<Object>, org.springframework.beans.factory.BeanClassLoaderAware
FactoryBean for RMI proxies, supporting both conventional RMI services
and RMI invokers. Exposes the proxied service for use as a bean reference,
using the specified service interface. Proxies will throw Spring's unchecked
RemoteAccessException on remote invocation failure instead of RMI's RemoteException.
The service URL must be a valid RMI URL like "rmi://localhost:1099/myservice".
RMI invokers work at the RmiInvocationHandler level, using the same invoker stub
for any service. Service interfaces do not have to extend java.rmi.Remote
or throw java.rmi.RemoteException. Of course, in and out parameters
have to be serializable.
With conventional RMI services, this proxy factory is typically used with the RMI service interface. Alternatively, this factory can also proxy a remote RMI service with a matching non-RMI business interface, i.e. an interface that mirrors the RMI service methods but does not declare RemoteExceptions. In the latter case, RemoteExceptions thrown by the RMI stub will automatically get converted to Spring's unchecked RemoteAccessException.
The major advantage of RMI, compared to Hessian, is serialization. Effectively, any serializable Java object can be transported without hassle. Hessian has its own (de-)serialization mechanisms, but is HTTP-based and thus much easier to setup than RMI. Alternatively, consider Spring's HTTP invoker to combine Java serialization with HTTP-based transport.
RemoteAccessor.setServiceInterface(java.lang.Class<?>),
UrlBasedRemoteAccessor.setServiceUrl(java.lang.String),
RmiClientInterceptor,
RmiServiceExporter,
Remote,
RemoteException,
RemoteAccessException,
org.springframework.remoting.caucho.HessianProxyFactoryBean,
org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBeanlogger| 构造器和说明 |
|---|
RmiProxyFactoryBean() |
| 限定符和类型 | 方法和说明 |
|---|---|
void |
afterPropertiesSet() |
Object |
getObject() |
Class<?> |
getObjectType() |
boolean |
isSingleton() |
doInvoke, doInvoke, getStub, invoke, isConnectFailure, lookupStub, prepare, refreshAndRetry, setCacheStub, setLookupStubOnStartup, setRefreshStubOnConnectFailure, setRegistryClientSocketFactorycreateRemoteInvocation, getRemoteInvocationFactory, recreateRemoteInvocationResult, setRemoteInvocationFactorygetServiceUrl, setServiceUrlgetServiceInterface, setServiceInterfacegetBeanClassLoader, overrideThreadContextClassLoader, resetThreadContextClassLoader, setBeanClassLoaderpublic void afterPropertiesSet()
afterPropertiesSet 在接口中 org.springframework.beans.factory.InitializingBeanafterPropertiesSet 在类中 RmiClientInterceptorpublic Object getObject()
getObject 在接口中 org.springframework.beans.factory.FactoryBean<Object>public Class<?> getObjectType()
getObjectType 在接口中 org.springframework.beans.factory.FactoryBean<Object>public boolean isSingleton()
isSingleton 在接口中 org.springframework.beans.factory.FactoryBean<Object>