- java.lang.Object
-
- javax.management.remote.rmi.RMIServerImpl
-
- All Implemented Interfaces:
-
Closeable
,AutoCloseable
,Remote
,RMIServer
- 已知直接子类:
-
RMIIIOPServerImpl
,RMIJRMPServerImpl
public abstract class RMIServerImpl extends Object implements Closeable, RMIServer
表示连接器服务器的RMI对象。 远程客户端可以使用
newClient(Object)
方法进行连接。 此方法返回表示连接的RMI对象。用户代码通常不直接引用此类。 RMI连接服务器通常使用
RMIConnectorServer
类创建 。 远程客户端通常通过JMXConnectorFactory
创建连接或通过实例化RMIConnector
创建连接。这是一个抽象类。 具体的子类定义客户端连接对象的详细信息。
- 从以下版本开始:
- 1.5
-
-
构造方法摘要
构造方法 Constructor 描述 RMIServerImpl(Map<String,?> env)
构造新的RMIServerImpl
。
-
方法摘要
所有方法 接口方法 抽象方法 具体的方法 Modifier and Type 方法 描述 protected void
clientClosed(RMIConnection client)
当由makeClient
创建的客户端连接关闭时调用的方法。void
close()
关闭此连接服务器。protected abstract void
closeClient(RMIConnection client)
关闭由makeClient
制造的客户端连接。protected abstract void
closeServer()
调用close()
关闭连接器服务器。protected abstract void
export()
导出此RMI对象。ClassLoader
getDefaultClassLoader()
获取此连接器服务器使用的默认值ClassLoader
。MBeanServer
getMBeanServer()
连接此连接器服务器的MBeanServer
。protected abstract String
getProtocol()
返回此对象的协议字符串。String
getVersion()
该连接器服务器了解的RMI连接器协议版本。protected abstract RMIConnection
makeClient(String connectionId, Subject subject)
创建一个新的客户端连接。RMIConnection
newClient(Object credentials)
创建一个新的客户端连接。void
setDefaultClassLoader(ClassLoader cl)
设置此连接器服务器的默认ClassLoader
。void
setMBeanServer(MBeanServer mbs)
设置此连接器服务器所连接的MBeanServer
。abstract Remote
toStub()
返回此服务器对象的远程存根。
-
-
-
方法详细信息
-
export
protected abstract void export() throws IOException
导出此RMI对象。
- 异常
-
IOException
- 如果此RMI对象无法导出。
-
toStub
public abstract Remote toStub() throws IOException
返回此服务器对象的远程存根。- 结果
- 一个遥远的短桩
- 异常
-
IOException
- 如果无法获取存根 - 例如RMIServerImpl尚未导出。
-
setDefaultClassLoader
public void setDefaultClassLoader(ClassLoader cl)
设置此连接器服务器的默认
ClassLoader
。 新的客户端连接将使用此类加载器。 现有的客户端连接不受影响。- 参数
-
cl
- 此连接器服务器使用的新ClassLoader
。 - 另请参见:
-
getDefaultClassLoader()
-
getDefaultClassLoader
public ClassLoader getDefaultClassLoader()
获取此连接器服务器使用的默认值
ClassLoader
。- 结果
-
该连接器服务器使用的默认
ClassLoader
。 - 另请参见:
-
setDefaultClassLoader(java.lang.ClassLoader)
-
setMBeanServer
public void setMBeanServer(MBeanServer mbs)
设置此连接器服务器所连接的
MBeanServer
。 新的客户端连接将与此MBeanServer
交互。 现有的客户端连接不受影响。- 参数
-
mbs
- 新的MBeanServer
。 可以为null,但是只要新的客户端连接将被拒绝。 - 另请参见:
-
getMBeanServer()
-
getMBeanServer
public MBeanServer getMBeanServer()
连接此连接器服务器的
MBeanServer
。 这是传递给最后一个值setMBeanServer(javax.management.MBeanServer)
这个对象上,或者null如果该方法从未被调用。- 结果
-
该连接器所连接的
MBeanServer
。 - 另请参见:
-
setMBeanServer(javax.management.MBeanServer)
-
getVersion
public String getVersion()
说明从接口RMIServer
复制该连接器服务器了解的RMI连接器协议版本。 这是一个具有以下格式的字符串:
protocol-version implementation-name
protocol-version
是由句点(.
)分隔的一系列两个或多个非负整数。 本文档描述的版本的实现必须在此处使用字符串1.0
。协议版本后必须有一个空格,后跟执行名称。 实现名称的格式未指定。 建议包含一个实现版本号。 实现可以使用空字符串作为其实现名称,例如出于安全原因。
- Specified by:
-
getVersion
在接口RMIServer
- 结果
- 一个这样描述格式的字符串。
-
newClient
public RMIConnection newClient(Object credentials) throws IOException
创建一个新的客户端连接。 此方法调用
makeClient
并将返回的客户端连接对象添加到内部列表。 当此RMIServerImpl
通过其close()
方法关闭时,将调用剩余在列表中的每个对象的close()
方法。客户端连接对象在此内部列表中的事实并不能阻止它被垃圾回收。
- Specified by:
-
newClient
在接口RMIServer
- 参数
-
credentials
- 此对象指定要传递到服务器的用户定义的凭据,以便在创建RMIConnection
之前对呼叫者进行身份验证。 可以为null。 - 结果
-
新创
RMIConnection
。 这通常是由makeClient
创建的对象,虽然实现可以选择将该对象包含在另一个实现RMIConnection
对象中。 - 异常
-
IOException
- 如果不能创建或导出新的客户端对象。 -
SecurityException
- 如果给定的凭据不允许服务器成功验证用户。 -
IllegalStateException
- 如果getMBeanServer()
为空。
-
makeClient
protected abstract RMIConnection makeClient(String connectionId, Subject subject) throws IOException
创建一个新的客户端连接。 该方法由公共方法
newClient(Object)
调用 。- 参数
-
connectionId
- 新连接的ID。 此连接器服务器打开的每个连接将具有不同的ID。 如果此参数为空,则该行为是未指定的。 -
subject
- 认证主题。 可以为null。 - 结果
-
新创
RMIConnection
。 - 异常
-
IOException
- 如果新的客户端对象无法创建或导出。
-
closeClient
protected abstract void closeClient(RMIConnection client) throws IOException
关闭由
makeClient
制造的客户端连接。- 参数
-
client
- 之前由makeClient
返回的closeClient
方法以前未被调用的连接。 如果违反这些条件,行为是未指定的,包括client
为空的情况。 - 异常
-
IOException
- 如果客户端连接不能关闭。
-
getProtocol
protected abstract String getProtocol()
返回此对象的协议字符串。 RMI / JRMP的字符串为
rmi
。- 结果
- 该对象的协议字符串。
-
clientClosed
protected void clientClosed(RMIConnection client) throws IOException
当由
makeClient
创建的客户端连接关闭时调用的方法。 定义makeClient
的子类必须安排在调用结果对象的close
方法时调用此方法。 这使它能够从RMIServerImpl
的连接列表中删除。 不是client
不是在列表中的错误。从连接列表中删除
client
后,此方法调用closeClient(client)
。- 参数
-
client
- 已关闭的客户端连接。 - 异常
-
IOException
- 如果closeClient(javax.management.remote.rmi.RMIConnection)
抛出这个异常。 -
NullPointerException
- 如果client
为空。
-
close
public void close() throws IOException
关闭此连接服务器。 此方法首先调用
closeServer()
方法,以便不会接受新的客户端连接。 然后,对于makeClient
返回的剩余RMIConnection
对象, 调用其close
方法。此方法被多次调用的行为是未指定的。
如果
closeServer()
抛出一个IOException
,则各个连接仍然关闭,然后从该方法抛出IOException
。如果
closeServer()
正常返回,但是一个或多个单个连接会引发IOException
,则在关闭所有连接后,将从该方法中抛出IOException
的一个。 如果一个以上的连接引发了一个IOException
,那么这个方法就是抛出了一个错误。- Specified by:
-
close
在接口AutoCloseable
- Specified by:
-
close
在接口Closeable
- 异常
-
IOException
- 如果closeServer()
或其中一个RMIConnection.close()
调用了IOException
。
-
closeServer
protected abstract void closeServer() throws IOException
调用
close()
关闭连接器服务器。 从此方法返回后,连接器服务器不能接受任何新的连接。- 异常
-
IOException
- 如果尝试关闭连接器服务器失败。
-
-