public class RmiRegistryFactoryBean extends Object implements org.springframework.beans.factory.FactoryBean<Registry>, org.springframework.beans.factory.InitializingBean, org.springframework.beans.factory.DisposableBean
FactoryBean that locates a Registry and
exposes it for bean references. Can also create a local RMI registry
on the fly if none exists already.
Can be used to set up and pass around the actual Registry object to
applications objects that need to work with RMI. One example for such an
object that needs to work with RMI is Spring's RmiServiceExporter,
which either works with a passed-in Registry reference or falls back to
the registry as specified by its local properties and defaults.
Also useful to enforce creation of a local RMI registry at a given port,
for example for a JMX connector. If used in conjunction with
ConnectorServerFactoryBean,
it is recommended to mark the connector definition (ConnectorServerFactoryBean)
as "depends-on" the registry definition (RmiRegistryFactoryBean),
to guarantee starting up the registry first.
Note: The implementation of this class mirrors the corresponding logic
in RmiServiceExporter, and also offers the same customization hooks.
RmiServiceExporter implements its own registry lookup as a convenience:
It is very common to simply rely on the registry defaults.
RmiServiceExporter.setRegistry(java.rmi.registry.Registry),
ConnectorServerFactoryBean,
Registry,
LocateRegistry| Constructor and Description |
|---|
RmiRegistryFactoryBean() |
| Modifier and Type | Method and Description |
|---|---|
void |
afterPropertiesSet() |
void |
destroy()
Unexport the RMI registry on bean factory shutdown,
provided that this bean actually created a registry.
|
String |
getHost()
Return the host of the registry for the exported RMI service.
|
Registry |
getObject() |
Class<? extends Registry> |
getObjectType() |
int |
getPort()
Return the port of the registry for the exported RMI service.
|
protected Registry |
getRegistry(int registryPort)
Locate or create the RMI registry.
|
protected Registry |
getRegistry(int registryPort,
RMIClientSocketFactory clientSocketFactory,
RMIServerSocketFactory serverSocketFactory)
Locate or create the RMI registry.
|
protected Registry |
getRegistry(String registryHost,
int registryPort,
RMIClientSocketFactory clientSocketFactory,
RMIServerSocketFactory serverSocketFactory)
Locate or create the RMI registry.
|
boolean |
isSingleton() |
void |
setAlwaysCreate(boolean alwaysCreate)
Set whether to always create the registry in-process,
not attempting to locate an existing registry at the specified port.
|
void |
setClientSocketFactory(RMIClientSocketFactory clientSocketFactory)
Set a custom RMI client socket factory to use for the RMI registry.
|
void |
setHost(String host)
Set the host of the registry for the exported RMI service,
i.e.
|
void |
setPort(int port)
Set the port of the registry for the exported RMI service,
i.e.
|
void |
setServerSocketFactory(RMIServerSocketFactory serverSocketFactory)
Set a custom RMI server socket factory to use for the RMI registry.
|
protected void |
testRegistry(Registry registry)
Test the given RMI registry, calling some operation on it to
check whether it is still active.
|
protected final Log logger
public void setHost(String host)
rmi://HOST:port/name
Default is localhost.
public String getHost()
public void setPort(int port)
rmi://host:PORT/name
Default is Registry.REGISTRY_PORT (1099).
public int getPort()
public void setClientSocketFactory(RMIClientSocketFactory clientSocketFactory)
If the given object also implements java.rmi.server.RMIServerSocketFactory,
it will automatically be registered as server socket factory too.
public void setServerSocketFactory(RMIServerSocketFactory serverSocketFactory)
Only needs to be specified when the client socket factory does not
implement java.rmi.server.RMIServerSocketFactory already.
public void setAlwaysCreate(boolean alwaysCreate)
Default is "false". Switch this flag to "true" in order to avoid the overhead of locating an existing registry when you always intend to create a new registry in any case.
public void afterPropertiesSet()
throws Exception
afterPropertiesSet in interface org.springframework.beans.factory.InitializingBeanExceptionprotected Registry getRegistry(String registryHost, int registryPort, RMIClientSocketFactory clientSocketFactory, RMIServerSocketFactory serverSocketFactory) throws RemoteException
registryHost - the registry host to use (if this is specified,
no implicit creation of a RMI registry will happen)registryPort - the registry port to useclientSocketFactory - the RMI client socket factory for the registry (if any)serverSocketFactory - the RMI server socket factory for the registry (if any)RemoteException - if the registry couldn't be located or createdprotected Registry getRegistry(int registryPort, RMIClientSocketFactory clientSocketFactory, RMIServerSocketFactory serverSocketFactory) throws RemoteException
registryPort - the registry port to useclientSocketFactory - the RMI client socket factory for the registry (if any)serverSocketFactory - the RMI server socket factory for the registry (if any)RemoteException - if the registry couldn't be located or createdprotected Registry getRegistry(int registryPort) throws RemoteException
registryPort - the registry port to useRemoteException - if the registry couldn't be located or createdprotected void testRegistry(Registry registry) throws RemoteException
Default implementation calls Registry.list().
registry - the RMI registry to testRemoteException - if thrown by registry methodsRegistry.list()public Class<? extends Registry> getObjectType()
getObjectType in interface org.springframework.beans.factory.FactoryBean<Registry>public boolean isSingleton()
isSingleton in interface org.springframework.beans.factory.FactoryBean<Registry>public void destroy()
throws RemoteException
destroy in interface org.springframework.beans.factory.DisposableBeanRemoteException