public class RMIConnectorServer extends JMXConnectorServer
从远程客户端创建基于RMI的连接的JMX API连接器服务器。 通常,这种连接器服务器是使用JMXConnectorServerFactory
制造的 。 但是,专门的应用程序可以直接使用此类,例如使用RMIServerImpl
对象。
Modifier and Type | Field and Description |
---|---|
static String |
JNDI_REBIND_ATTRIBUTE
指定表示RMI连接器服务器的 RMIServer 存根是否应覆盖同一地址的现有存根的属性名称。
|
static String |
RMI_CLIENT_SOCKET_FACTORY_ATTRIBUTE
指定的属性名称 RMIClientSocketFactory 用于与此连接器一起创建的RMI对象。
|
static String |
RMI_SERVER_SOCKET_FACTORY_ATTRIBUTE
指定的属性名称 RMIServerSocketFactory 用于与此连接器一起创建的RMI对象。
|
AUTHENTICATOR
Constructor and Description |
---|
RMIConnectorServer(JMXServiceURL url, Map<String,?> environment)
做一个
RMIConnectorServer 。
|
RMIConnectorServer(JMXServiceURL url, Map<String,?> environment, MBeanServer mbeanServer)
为给定的MBean服务器创建一个
RMIConnectorServer 。
|
RMIConnectorServer(JMXServiceURL url, Map<String,?> environment, RMIServerImpl rmiServerImpl, MBeanServer mbeanServer)
为给定的MBean服务器创建一个
RMIConnectorServer 。
|
Modifier and Type | Method and Description |
---|---|
protected void |
connectionClosed(String connectionId, String message, Object userData)
当客户端连接正常关闭时,由子类调用。
|
protected void |
connectionFailed(String connectionId, String message, Object userData)
当客户端连接失败时由子类调用。
|
protected void |
connectionOpened(String connectionId, String message, Object userData)
当新的客户端连接打开时由子类调用。
|
JMXServiceURL |
getAddress()
该连接器服务器的地址。
|
Map<String,?> |
getAttributes()
此连接器服务器的属性。
|
boolean |
isActive()
确定连接器服务器是否处于活动状态。
|
void |
setMBeanServerForwarder(MBeanServerForwarder mbsf)
插入一个对象,拦截通过此连接器服务器到达的MBean服务器的请求。
|
void |
start()
激活连接器服务器,即开始侦听客户端连接。
|
void |
stop()
停用连接器服务器,即停止侦听客户端连接。
|
JMXConnector |
toJMXConnector(Map<String,?> env)
返回此连接器服务器的客户端存根。
|
getConnectionIds, getMBeanServer, getNotificationInfo, postDeregister, postRegister, preDeregister, preRegister
addNotificationListener, handleNotification, removeNotificationListener, removeNotificationListener, sendNotification
public static final String JNDI_REBIND_ATTRIBUTE
指定表示RMI连接器服务器的884898442837存根是否应覆盖同一地址上的现有存根的属性名称。 与此属性相关联的值(如果有)应为一个等于忽略大小写的字符串,为"true"
或"false"
。 默认值为false。
public static final String RMI_CLIENT_SOCKET_FACTORY_ATTRIBUTE
指定的属性名称RMIClientSocketFactory
用于与此连接器一起创建的RMI对象。 与此属性关联的值必须为RMIClientSocketFactory
类型,并且只能在创建连接器服务器时提供的Map
参数中指定。
public static final String RMI_SERVER_SOCKET_FACTORY_ATTRIBUTE
指定的属性名称RMIServerSocketFactory
用于与此连接器一起创建的RMI对象。 与此属性相关联的值必须为RMIServerSocketFactory
类型,并且只能在创建连接器服务器时提供的Map
参数中指定。
public RMIConnectorServer(JMXServiceURL url, Map<String,?> environment) throws IOException
做一个RMIConnectorServer
。 这相当于调用RMIConnectorServer(directoryURL,environment,null,null)
url
- 定义如何创建连接器服务器的URL。
不能为空。
environment
- 管理RMI对象的创建和存储的属性。
可以为空,这相当于一个空的地图。
IllegalArgumentException
- 如果
url
为null。
MalformedURLException
- 如果url
不符合RMI连接器的语法,或者如果其实现不能识别其协议。
当使用此构造函数时,只有“rmi”和“iiop”才有效。
IOException
- 如果由于某种原因无法创建连接器服务器,或者其
start
方法将无法
避免 。
public RMIConnectorServer(JMXServiceURL url, Map<String,?> environment, MBeanServer mbeanServer) throws IOException
为给定的MBean服务器创建一个RMIConnectorServer
。 这相当于调用RMIConnectorServer(directoryURL,environment,null,mbeanServer)
url
- 定义如何创建连接器服务器的URL。
不能为空。
environment
- 管理RMI对象的创建和存储的属性。
可以为空,这相当于一个空的地图。
mbeanServer
- 连接新连接器服务器的MBean服务器,如果通过在MBean服务器中注册为MBean,将附加为null。
IllegalArgumentException
- 如果
url
为空。
MalformedURLException
- 如果url
不符合RMI连接器的语法,或者该实现不能识别其协议。
当使用此构造函数时,只有“rmi”和“iiop”才有效。
IOException
- 如果由于某种原因无法创建连接器服务器,或者其
start
方法将不可避免。
public RMIConnectorServer(JMXServiceURL url, Map<String,?> environment, RMIServerImpl rmiServerImpl, MBeanServer mbeanServer) throws IOException
为给定的MBean服务器创建一个RMIConnectorServer
。
url
- 定义如何创建连接器服务器的URL。
不能为空。
environment
- 管理RMI对象的创建和存储的属性。
可以为空,这相当于一个空的地图。
rmiServerImpl
- RMIServer接口的实现,与url中指定的协议类型一致。
如果此参数为非空,则由url指定的协议类型不受约束,并被假定为有效。
否则,只能识别“rmi”和“iiop”。
mbeanServer
- 连接新连接器服务器的MBean服务器,如果通过在MBean服务器中注册为MBean,将附加为null。
IllegalArgumentException
- 如果
url
为空。
MalformedURLException
- 如果url
不符合RMI连接器的语法,或者如果其实现不能识别其协议。
当rmiServerImpl为空时, 只能识别 “rmi”和“iiop”。
IOException
- 如果由于某种原因无法创建连接器服务器,或者如果其
start
方法不可避免,则不可避免。
start()
public JMXConnector toJMXConnector(Map<String,?> env) throws IOException
返回此连接器服务器的客户端存根。 客户端存根是一个可串行化的对象,其connect
方法可用于与此连接器服务器建立一个新连接。
toJMXConnector
在接口
JMXConnectorServerMBean
toJMXConnector
在
JMXConnectorServer
env
- 可以提供给JMXConnector.connect(Map)
的客户端连接参数 。
可以为空,这相当于一个空的地图。
UnsupportedOperationException
- 如果此连接器服务器不支持生成客户端存根。
IllegalStateException
- 如果JMXConnectorServer未启动(请参阅
isActive()
)。
IOException
- 如果通信问题意味着无法创建存根。
public void start() throws IOException
激活连接器服务器,即开始侦听客户端连接。 当连接器服务器已经处于活动状态时调用此方法没有任何效果。 当连接器服务器停止时调用此方法将生成一个IOException
。
第一次调用该方法的行为取决于在建造过程中提供的参数,如下所述。
首先,需要RMIServerImpl
子类的对象,通过RMI导出连接器服务器:
RMIServerImpl
提供了一个RMIServerImpl,则使用它。 JMXServiceURL
提供给构造为iiop
,类型的对象RMIIIOPServerImpl
被创建。 JMXServiceURL
为空,或它的协议的部分是rmi
,类型的对象RMIJRMPServerImpl
被创建。 RMIServerImpl
或者它可以抛出MalformedURLException
。 如果给定的地址包含一个JNDI目录URL作为包文件中指定的javax.management.remote.rmi
,那么这RMIConnectorServer
将通过结合引导RMIServerImpl
到指定地址。
如果JMXServiceURL
的URL路径部分为空或单个斜杠( /
),则RMI对象将不会绑定到目录。 相反,对它的引用将被编码在RMIConnectorServer地址的URL路径(由getAddress()
返回)。 rmi
和iiop
的编码在javax.management.remote.rmi
的软件包文档中有所描述 。
当URL路径既不为空,也不是JNDI目录URL,或协议既不是rmi
也不是iiop
时,行为是实现定义的,并且可能包括在创建连接器服务器或启动连接器服务器时投掷MalformedURLException
。
IllegalStateException
- 如果连接器服务器尚未连接到MBean服务器。
IOException
- 如果连接器服务器无法启动,或者在
iiop
协议的情况下,
iiop
支持RMI / IIOP。
public void stop() throws IOException
停用连接器服务器,即停止侦听客户端连接。 调用此方法还将关闭此服务器所做的所有客户端连接。 此方法返回后,无论是正常还是异常,连接器服务器将不会创建任何新的客户端连接。
一旦连接器服务器停止,它将无法再次启动。
当连接器服务器已经停止时调用此方法没有任何作用。 当连接器服务器尚未启动时调用此方法将永久禁用连接器服务器对象。
如果关闭客户端连接会产生异常,则不会从此方法抛出该异常。 甲JMXConnectionNotification
从此MBean与无法关闭的连接的连接ID射出。
关闭连接器服务器是一个潜在的慢操作。 例如,如果具有打开连接的客户端计算机崩溃,则关闭操作可能必须等待网络协议超时。 不想封闭操作的调用者应该在单独的线程中执行。
此方法调用连接器服务器的RMIServerImpl
对象上的方法close
。
如果RMIServerImpl
必定会由一个JNDI目录start
方法,它是通过这种方法的目录绑定。
IOException
- 如果服务器无法正常关闭,或者RMIServerImpl
无法从目录中解除绑定。
抛出此异常时,如果适用,服务器已尝试关闭所有客户端连接;
致电RMIServerImpl.close()
;
并RMIServerImpl
解除其RMIServerImpl
中的RMIServerImpl绑定。
除了服务器尝试关闭客户端连接之外,所有客户端连接都可能关闭。
public boolean isActive()
JMXConnectorServerMBean
复制
确定连接器服务器是否处于活动状态。 当连接器服务器的start
方法成功返回时,连接器服务器开始处于活动状态,直到调用其88489844936390方法或连接器服务器发生故障为止。
public JMXServiceURL getAddress()
JMXConnectorServerMBean
该连接器服务器的地址。
返回的地址可能不是创建连接器服务器时提供的原始JMXServiceURL
,因为原始地址可能并不总是完成。 例如,启动连接器服务器时可以动态分配端口号。 相反,返回的地址是JMXConnectorServer
的实际JMXServiceURL
。 这是客户提供给JMXConnectorFactory.connect(JMXServiceURL)
的地址。
需要注意的是返回的地址可能是null
如果JMXConnectorServer
尚未active
。
public Map<String,?> getAttributes()
JMXConnectorServerMBean
此连接器服务器的属性。
public void setMBeanServerForwarder(MBeanServerForwarder mbsf)
JMXConnectorServerMBean
复制
插入一个对象,拦截通过此连接器服务器到达的MBean服务器的请求。 该对象将作为MBeanServer
提供,用于由此连接器服务器创建的任何新连接。 现有连接不受影响。
该方法可以使用不同的MBeanServerForwarder
对象多次调用 。 结果是一连串的代理商。 最后一名货车是连锁店的第一名。 更详细地说:
如果此连接器服务器已与MBeanServer
对象相关联,则该对象将发送给mbsf.setMBeanServer
。 如果这样做会产生异常,则此方法会引发相同的异常,而不会产生任何其他影响。
如果此连接器尚未与MBeanServer
对象相关联,或者如果刚刚提到的mbsf.setMBeanServer
呼叫成功,则mbsf
将成为此连接器服务器的MBeanServer
。
setMBeanServerForwarder
中的
JMXConnectorServerMBean
setMBeanServerForwarder
在
JMXConnectorServer
mbsf
- 全新
MBeanServerForwarder
。
protected void connectionOpened(String connectionId, String message, Object userData)
JMXConnectorServer
当新的客户端连接打开时由子类调用。 添加connectionId
通过返回的列表JMXConnectorServer.getConnectionIds()
,然后发出JMXConnectionNotification
型JMXConnectionNotification.OPENED
。
connectionOpened
在
JMXConnectorServer
connectionId
- 新连接的ID。
这必须与以前由此连接器服务器打开的任何连接的ID不同。
message
- 发送的消息JMXConnectionNotification
。
可以为null。
见Notification.getMessage()
。
userData
- userData
发射的JMXConnectionNotification
。
可以为null。
见Notification.getUserData()
。
protected void connectionClosed(String connectionId, String message, Object userData)
JMXConnectorServer
当客户端连接正常关闭时,由子类调用。 删除connectionId
从返回的列表JMXConnectorServer.getConnectionIds()
,然后发出JMXConnectionNotification
型JMXConnectionNotification.CLOSED
。
connectionClosed
在
JMXConnectorServer
connectionId
- 已关闭连接的ID。
message
- 发送的消息JMXConnectionNotification
。
可以为null。
见Notification.getMessage()
。
userData
-在userData
的发射JMXConnectionNotification
。
可以为null。
见Notification.getUserData()
。
protected void connectionFailed(String connectionId, String message, Object userData)
JMXConnectorServer
当客户端连接失败时由子类调用。 删除connectionId
从返回的列表JMXConnectorServer.getConnectionIds()
,然后发出JMXConnectionNotification
型JMXConnectionNotification.FAILED
。
connectionFailed
在
JMXConnectorServer
connectionId
- 连接失败的ID。
message
- 发送的消息JMXConnectionNotification
。
可以为null。
见Notification.getMessage()
。
userData
- userData
发出的JMXConnectionNotification
。
可以为null。
见Notification.getUserData()
。