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.InitializingBean
Exception
protected Registry getRegistry(String registryHost, int registryPort, @Nullable RMIClientSocketFactory clientSocketFactory, @Nullable 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, @Nullable RMIClientSocketFactory clientSocketFactory, @Nullable 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.DisposableBean
RemoteException