public class RMIConnectionImpl extends Object implements RMIConnection, Unreferenced
实现了RMIConnection
接口。 用户代码通常不会引用此类。
Constructor and Description |
---|
RMIConnectionImpl(RMIServerImpl rmiServer, String connectionId, ClassLoader defaultClassLoader, Subject subject, Map<String,?> env)
构造一个新的 RMIConnection 。
|
public RMIConnectionImpl(RMIServerImpl rmiServer, String connectionId, ClassLoader defaultClassLoader, Subject subject, Map<String,?> env)
RMIConnection
。
该连接可以与JRMP或IIOP传输一起使用。
此对象不导出自身:呼叫者有责任适当地导出它(请参阅RMIJRMPServerImpl.makeClient(String,Subject)
和RMIIIOPServerImpl.makeClient(String,Subject)
) 。
rmiServer
- 创建此连接的RMIServerImpl对象。
如果此参数为空,则该行为是未指定的。
connectionId
- 此连接的ID。
如果此参数为空,则该行为是未指定的。
defaultClassLoader
- 反序列化编组对象时使用的默认ClassLoader。
可以为null,表示引导类加载器。
subject
- 被认证的主题用于授权。
可以为null,表示没有任何主题已被认证。
env
- 包含新的RMIServerImpl
。
可以为null,相当于空的地图。
public String getConnectionId() throws IOException
RMIConnection
返回连接ID。 每个与给定RMI连接器服务器的打开连接的字符串不同。
getConnectionId
在接口
RMIConnection
IOException
- 如果发生一般通信异常。
RMIConnector.connect
public void close() throws IOException
RMIConnection
关闭此连接。 从此方法返回时,实现此接口的RMI对象将被取消导出,因此对其的远程调用将失败。
close
在接口
Closeable
close
在接口
AutoCloseable
close
在接口
RMIConnection
IOException
- 如果无法关闭连接,或者Remote对象无法取消导出,或者发送远程关闭请求时发生通信故障。
public void unreferenced()
Unreferenced
unreferenced
在接口
Unreferenced
public ObjectInstance createMBean(String className, ObjectName name, Subject delegationSubject) throws ReflectionException, InstanceAlreadyExistsException, MBeanRegistrationException, MBeanException, NotCompliantMBeanException, IOException
RMIConnection
复制
createMBean
在界面
RMIConnection
className
- 要实例化的MBean的类名。
name
- MBean的对象名称。
可能为null。
delegationSubject
- 包含
Subject
主体的Subject或使用
null
的null。
ObjectInstance
,包含ObjectName
和新实例化的MBean的Java类名。
如果包含的ObjectName
是n
,则包含的Java类名称为getMBeanInfo(n)
.getClassName()
。
ReflectionException
- 包装一个
java.lang.ClassNotFoundException
或
java.lang.Exception
,当尝试调用MBean的构造函数时。
InstanceAlreadyExistsException
- MBean已经在MBean服务器的控制之下了。
MBeanRegistrationException
- MBean的preRegister
( MBeanRegistration
接口)方法抛出异常。
MBean将不会被注册。
MBeanException
- MBean的构造函数抛出异常。
NotCompliantMBeanException
- 此类不是符合JMX的MBean。
IOException
- 如果发生通用通信异常。
public ObjectInstance createMBean(String className, ObjectName name, ObjectName loaderName, Subject delegationSubject) throws ReflectionException, InstanceAlreadyExistsException, MBeanRegistrationException, MBeanException, NotCompliantMBeanException, InstanceNotFoundException, IOException
RMIConnection
createMBean
中的
RMIConnection
className
- 要实例化的MBean的类名。
name
- MBean的对象名称。
可能为null。
loaderName
- 要使用的类加载器的对象名称。
delegationSubject
- 如果使用
Subject
主体,则包含委托主体或
null
的Subject。
ObjectInstance
,包含ObjectName
和新实例化的MBean的Java类名。
如果包含的ObjectName
是n
,则所包含的Java类名称为getMBeanInfo(n)
.getClassName()
。
ReflectionException
- 包装一个
java.lang.ClassNotFoundException
或
java.lang.Exception
,当尝试调用MBean的构造函数时。
InstanceAlreadyExistsException
- MBean已经在MBean服务器的控制之下了。
MBeanRegistrationException
- MBean的preRegister
( MBeanRegistration
接口)方法已经抛出异常。
MBean将不会被注册。
MBeanException
- MBean的构造函数已抛出异常。
NotCompliantMBeanException
- 此类不是符合JMX的MBean。
InstanceNotFoundException
- 指定的类加载器未在MBean服务器中注册。
IOException
- 如果发生通用通信异常。
public ObjectInstance createMBean(String className, ObjectName name, MarshalledObject params, String[] signature, Subject delegationSubject) throws ReflectionException, InstanceAlreadyExistsException, MBeanRegistrationException, MBeanException, NotCompliantMBeanException, IOException
RMIConnection
MBeanServerConnection.createMBean(String, ObjectName, Object[], String[])
。
Object[]
参数包装在一个MarshalledObject
。
createMBean
在接口
RMIConnection
className
- 要实例化的MBean的类名。
name
- MBean的对象名称。
可能为null。
params
- 一个包含要调用的构造函数参数的数组,封装在一个MarshalledObject
。
封装的数组可以为空,相当于一个空数组。
signature
- 包含要调用的构造函数的签名的数组。
可以为null,相当于一个空数组。
delegationSubject
- 包含
Subject
主体的Subject或使用
null
的null。
ObjectInstance
,包含ObjectName
和新实例化的MBean的Java类名。
如果包含的ObjectName
是n
,则包含的Java类名称为getMBeanInfo(n)
.getClassName()
。
ReflectionException
- 包装一个
java.lang.ClassNotFoundException
或
java.lang.Exception
,当尝试调用MBean的构造函数时发生。
InstanceAlreadyExistsException
- MBean已经在MBean服务器的控制之下了。
MBeanRegistrationException
- MBean的preRegister
( MBeanRegistration
接口)方法抛出异常。
MBean将不会被注册。
MBeanException
- MBean的构造函数已抛出异常。
NotCompliantMBeanException
- 此类不是符合JMX的MBean。
IOException
- 如果发生通用通信异常。
public ObjectInstance createMBean(String className, ObjectName name, ObjectName loaderName, MarshalledObject params, String[] signature, Subject delegationSubject) throws ReflectionException, InstanceAlreadyExistsException, MBeanRegistrationException, MBeanException, NotCompliantMBeanException, InstanceNotFoundException, IOException
RMIConnection
MBeanServerConnection.createMBean(String, ObjectName, ObjectName, Object[], String[])
。
Object[]
参数包裹在一个MarshalledObject
。
createMBean
在接口
RMIConnection
className
- 要实例化的MBean的类名。
name
- MBean的对象名称。
可能为null。
loaderName
- 要使用的类加载器的对象名。
params
- 一个包含要调用的构造函数参数的数组,封装在一个MarshalledObject
。
封装的数组可以为空,相当于一个空数组。
signature
- 包含要调用的构造函数的签名的数组。
可以为null,相当于一个空数组。
delegationSubject
- 包含
Subject
主体的Subject或使用
null
的null。
ObjectInstance
,包含ObjectName
和新实例化的MBean的Java类名。
如果包含的ObjectName
是n
,则包含的Java类名称为getMBeanInfo(n)
.getClassName()
。
ReflectionException
- 包装一个
java.lang.ClassNotFoundException
或
java.lang.Exception
尝试调用MBean的构造函数时发生。
InstanceAlreadyExistsException
- MBean已经在MBean服务器的控制之下了。
MBeanRegistrationException
- MBean的preRegister
( MBeanRegistration
接口)方法已经抛出异常。
MBean将不会被注册。
MBeanException
- MBean的构造函数已抛出异常。
NotCompliantMBeanException
- 此类不是符合JMX的MBean。
InstanceNotFoundException
- 指定的类加载器未在MBean服务器中注册。
IOException
- 如果发生一般通信异常。
public void unregisterMBean(ObjectName name, Subject delegationSubject) throws InstanceNotFoundException, MBeanRegistrationException, IOException
RMIConnection
unregisterMBean
在接口
RMIConnection
name
- 要注销的MBean的对象名称。
delegationSubject
- 如果使用
Subject
主体,则包含委托主体或
null
的Subject。
InstanceNotFoundException
- 指定的MBean未在MBean服务器中注册。
MBeanRegistrationException
- MBean的preDeregister((
MBeanRegistration
接口)方法已经抛出异常。
IOException
- 如果发生一般通信异常。
public ObjectInstance getObjectInstance(ObjectName name, Subject delegationSubject) throws InstanceNotFoundException, IOException
RMIConnection
getObjectInstance
在界面
RMIConnection
name
- MBean的对象名称。
delegationSubject
- 包含
Subject
主体的Subject或使用
null
的null。
ObjectInstance
与name指定的与MBean关联。
包含的ObjectName
是name
,包含的类名是getMBeanInfo(name)
.getClassName()
。
InstanceNotFoundException
- 指定的MBean未在MBean服务器中注册。
IOException
- 如果发生一般通信异常。
public Set<ObjectInstance> queryMBeans(ObjectName name, MarshalledObject query, Subject delegationSubject) throws IOException
RMIConnection
MBeanServerConnection.queryMBeans(ObjectName, QueryExp)
。
QueryExp
包裹在一个MarshalledObject
。
queryMBeans
在接口
RMIConnection
name
- 标识要检索的MBean的对象名称模式。
如果指定了null或没有域和密钥属性,则将检索注册的所有MBean。
query
- 要应用于选择MBean的查询表达式,封装到MarshalledObject
。
如果MarshalledObject
封装了空值,则不会使用查询表达式来选择MBean。
delegationSubject
- 包含
Subject
主体的Subject或使用
null
的null。
ObjectInstance
对象。
如果没有MBean满足查询,则返回一个空列表。
IOException
- 如果发生一般通信异常。
public Set<ObjectName> queryNames(ObjectName name, MarshalledObject query, Subject delegationSubject) throws IOException
RMIConnection
复制
MBeanServerConnection.queryNames(ObjectName, QueryExp)
。
QueryExp
包裹在一个MarshalledObject
。
queryNames
在接口
RMIConnection
name
- 标识要检索的MBean名称的对象名称模式。
如果指定了null或没有域和键属性,将检索所有注册的MBean的名称。
query
- 要应用于选择MBean的查询表达式,封装在MarshalledObject
。
如果MarshalledObject
封装了空值,则不会使用查询表达式来选择MBean。
delegationSubject
- 包含
Subject
主体的Subject或
null
使用身份验证主体的null。
IOException
- 如果发生通用通信异常。
public boolean isRegistered(ObjectName name, Subject delegationSubject) throws IOException
RMIConnection
复制
isRegistered
在接口
RMIConnection
name
- 要检查的MBean的对象名称。
delegationSubject
- 包含
Subject
主体的Subject或使用
null
的null。
IOException
- 如果发生通用通信异常。
public Integer getMBeanCount(Subject delegationSubject) throws IOException
RMIConnection
getMBeanCount
在接口
RMIConnection
delegationSubject
- 包含
Subject
主体的Subject或使用
null
的null。
IOException
- 如果发生一般通信异常。
public Object getAttribute(ObjectName name, String attribute, Subject delegationSubject) throws MBeanException, AttributeNotFoundException, InstanceNotFoundException, ReflectionException, IOException
RMIConnection
getAttribute
在界面
RMIConnection
name
-
name
属性的MBean的对象名称。
attribute
- 指定要检索的属性名称的字符串。
delegationSubject
- 包含
Subject
主体的Subject或使用
null
的null。
MBeanException
- 包装MBean的getter抛出的异常。
AttributeNotFoundException
- 指定的属性在MBean中无法访问。
InstanceNotFoundException
- 指定的MBean未在MBean服务器中注册。
ReflectionException
- 在尝试调用getter时,引用一个
java.lang.Exception
。
IOException
- 如果发生通用通信异常。
RMIConnection.setAttribute(javax.management.ObjectName, java.rmi.MarshalledObject, javax.security.auth.Subject)
public AttributeList getAttributes(ObjectName name, String[] attributes, Subject delegationSubject) throws InstanceNotFoundException, ReflectionException, IOException
RMIConnection
getAttributes
在接口
RMIConnection
name
-
name
属性的MBean的对象名称。
attributes
- 要检索的属性的列表。
delegationSubject
- 包含
Subject
主体的Subject或使用
null
的null。
InstanceNotFoundException
- 指定的MBean未在MBean服务器中注册。
ReflectionException
- 尝试调用动态MBean的getAttributes方法时发生异常。
IOException
- 如果发生一般通信异常。
RMIConnection.setAttributes(javax.management.ObjectName, java.rmi.MarshalledObject, javax.security.auth.Subject)
public void setAttribute(ObjectName name, MarshalledObject attribute, Subject delegationSubject) throws InstanceNotFoundException, AttributeNotFoundException, InvalidAttributeValueException, MBeanException, ReflectionException, IOException
RMIConnection
MBeanServerConnection.setAttribute(ObjectName, Attribute)
。
Attribute
参数包装在一个MarshalledObject
。
setAttribute
在界面
RMIConnection
name
- 要在其中设置属性的MBean的名称。
attribute
- 要设置的属性的标识和要设置的值,封装在
MarshalledObject
。
delegationSubject
- 包含
Subject
主体的Subject或使用
null
的null。
InstanceNotFoundException
- MBean指定的MBean未在MBean服务器中注册。
AttributeNotFoundException
- 指定的属性在MBean中无法访问。
InvalidAttributeValueException
-
InvalidAttributeValueException
的值无效。
MBeanException
- 包装由MBean的setter抛出的异常。
ReflectionException
- 在尝试调用setter时,引发一个
java.lang.Exception
。
IOException
- 如果发生一般通信异常。
RMIConnection.getAttribute(javax.management.ObjectName, java.lang.String, javax.security.auth.Subject)
public AttributeList setAttributes(ObjectName name, MarshalledObject attributes, Subject delegationSubject) throws InstanceNotFoundException, ReflectionException, IOException
RMIConnection
复制
MBeanServerConnection.setAttributes(ObjectName, AttributeList)
。
AttributeList
参数包裹在一个MarshalledObject
。
setAttributes
在接口
RMIConnection
name
- 要在其中设置属性的MBean的对象名称。
attributes
- 属性列表:要设置的属性的标识以及要设置为的值,封装在
MarshalledObject
。
delegationSubject
- 包含
Subject
主体的Subject或使用
null
的null。
InstanceNotFoundException
- 指定的MBean未在MBean服务器中注册。
ReflectionException
- 尝试调用动态MBean的getAttributes方法时发生异常。
IOException
- 如果发生通用通信异常。
RMIConnection.getAttributes(javax.management.ObjectName, java.lang.String[], javax.security.auth.Subject)
public Object invoke(ObjectName name, String operationName, MarshalledObject params, String[] signature, Subject delegationSubject) throws InstanceNotFoundException, MBeanException, ReflectionException, IOException
RMIConnection
MBeanServerConnection.invoke(ObjectName, String, Object[], String[])
。
Object[]
参数包裹在一个MarshalledObject
。
invoke
中的
RMIConnection
name
- 要调用该方法的MBean的对象名称。
operationName
- 要调用的操作的名称。
params
- 一个包含调用操作时要设置的参数的数组,封装在一个MarshalledObject
。
封装的数组可以为空,相当于一个空数组。
signature
- 包含操作签名的数组。
将使用与用于加载调用操作的MBean相同的类加载器来加载类对象。
可以为null,相当于一个空数组。
delegationSubject
- 包含
Subject
主体的Subject或使用
null
的null。
InstanceNotFoundException
- 指定的MBean未在MBean服务器中注册。
MBeanException
- 包装由MBean调用的方法抛出的异常。
ReflectionException
- 在尝试调用该方法时抛出一个
java.lang.Exception
。
IOException
- 如果发生通用通信异常。
public String getDefaultDomain(Subject delegationSubject) throws IOException
RMIConnection
getDefaultDomain
在接口
RMIConnection
delegationSubject
- 如果使用
Subject
主体,则包含委派主体或
null
的Subject。
IOException
- 如果发生一般通信异常。
public String[] getDomains(Subject delegationSubject) throws IOException
RMIConnection
复制
getDomains
在接口
RMIConnection
delegationSubject
- 包含
Subject
主体的Subject或使用
null
的null。
IOException
- 如果发生通用通信异常。
public MBeanInfo getMBeanInfo(ObjectName name, Subject delegationSubject) throws InstanceNotFoundException, IntrospectionException, ReflectionException, IOException
RMIConnection
getMBeanInfo
在接口
RMIConnection
name
- 要分析的MBean的名称
delegationSubject
- 包含
Subject
主体的Subject或使用
null
的null。
MBeanInfo
一个实例允许检索此MBean的所有属性和操作。
InstanceNotFoundException
- 未找到
InstanceNotFoundException
的MBean。
IntrospectionException
- 内省时发生异常。
ReflectionException
- 尝试调用动态MBean的getMBeanInfo时发生异常。
IOException
- 如果发生一般通信异常。
public boolean isInstanceOf(ObjectName name, String className, Subject delegationSubject) throws InstanceNotFoundException, IOException
RMIConnection
isInstanceOf
在接口
RMIConnection
name
- MBean的
ObjectName
。
className
- 类的名称。
delegationSubject
- 包含
Subject
主体的Subject或使用
null
的null。
InstanceNotFoundException
- 指定的MBean未在MBean服务器中注册。
IOException
- 如果发生通用通信异常。
public Integer[] addNotificationListeners(ObjectName[] names, MarshalledObject[] filters, Subject[] delegationSubjects) throws InstanceNotFoundException, IOException
RMIConnection
复制
注册与给定过滤器匹配的给定MBean的通知。 远程客户端随后可以使用fetchNotifications
方法检索通知 。
对于每个听众,原始的NotificationListener
和handback
保存在客户端; 为了使客户端能够识别它们,服务器生成并返回唯一的listenerID
。 这listenerID
与Notifications
到远程客户端。
如果给定(名称,过滤器)对中的任何一个无法注册,则操作将失败并发生异常,并且不会注册名称或过滤器。
addNotificationListeners
在接口
RMIConnection
names
-
ObjectNames
通知的MBean。
filters
-所述的编组表示的阵列NotificationFilters
。
此数组的元素可以为空。
delegationSubjects
-所述Subjects
代表其被添加的监听器。
此数组的元素可以为空。
此外, delegationSubjects
参数本身可以为空,这相当于与names
和filters
数组大小相同的空值数组。
listenerIDs
标识本地侦听器。
该数组与参数的元素数量相同。
InstanceNotFoundException
- 如果
names
中的一个与任何注册的MBean不对应。
IOException
- 如果发生通用通信异常。
public void addNotificationListener(ObjectName name, ObjectName listener, MarshalledObject filter, MarshalledObject handback, Subject delegationSubject) throws InstanceNotFoundException, IOException
RMIConnection
MBeanServerConnection.addNotificationListener(ObjectName, ObjectName, NotificationFilter, Object)
。
NotificationFilter
参数包裹在一个MarshalledObject
。
Object
(handback)参数也包裹在一个MarshalledObject
。
addNotificationListener
在接口
RMIConnection
name
- 应添加侦听器的MBean的名称。
listener
- 将处理由注册的MBean发出的通知的侦听器的对象名称。
filter
- 过滤器对象,封装成一个MarshalledObject
。
如果过滤器封装在MarshalledObject
具有空值,不将滤波处理通知之前进行。
handback
- 发送通知时发送到侦听器的上下文,封装在一个
MarshalledObject
。
delegationSubject
- 包含
Subject
主体的Subject或使用
null
的null。
InstanceNotFoundException
- 通知侦听器或通知广播者的MBean名称与任何注册的MBean不匹配。
IOException
- 如果发生一般通信异常。
RMIConnection.removeNotificationListener(ObjectName, ObjectName, Subject)
,
RMIConnection.removeNotificationListener(ObjectName, ObjectName, MarshalledObject, MarshalledObject, Subject)
public void removeNotificationListeners(ObjectName name, Integer[] listenerIDs, Subject delegationSubject) throws InstanceNotFoundException, ListenerNotFoundException, IOException
RMIConnection
处理removeNotificationListener(ObjectName, NotificationListener)
和removeNotificationListener(ObjectName, NotificationListener, NotificationFilter, Object)
方法。
此方法从MBean服务器中的给定MBean中删除一个或多个NotificationListener
。
该NotificationListeners
是由是由返回的ID标识RMIConnection.addNotificationListeners(ObjectName[], MarshalledObject[], Subject[])
方法。
removeNotificationListeners
在界面
RMIConnection
name
-
ObjectName
通知的MBean。
listenerIDs
- 与要删除的侦听器相对应的ID的列表。
delegationSubject
-该
Subject
包含委托principal或
null
如果认证主要来代替。
InstanceNotFoundException
- 如果给定的
name
不对应于任何注册的MBean。
ListenerNotFoundException
- 如果在服务器端没有找到其中一个侦听器。
如果除了调用MBeanServer.removeNotificationListener
之外的某些原因,MBean丢弃了一个监听器,则可能会发生此MBeanServer.removeNotificationListener
。
IOException
- 如果发生通用通信异常。
public void removeNotificationListener(ObjectName name, ObjectName listener, Subject delegationSubject) throws InstanceNotFoundException, ListenerNotFoundException, IOException
RMIConnection
复制
removeNotificationListener
在接口
RMIConnection
name
- 应删除侦听器的MBean的名称。
listener
- 要删除的侦听器的对象名称。
delegationSubject
- 包含
Subject
主体的Subject或使用
null
的null。
InstanceNotFoundException
- 提供的MBean名称与任何注册的MBean不匹配。
ListenerNotFoundException
- 监听器未在MBean中注册。
IOException
- 如果发生通用通信异常。
RMIConnection.addNotificationListener(javax.management.ObjectName, javax.management.ObjectName, java.rmi.MarshalledObject, java.rmi.MarshalledObject, javax.security.auth.Subject)
public void removeNotificationListener(ObjectName name, ObjectName listener, MarshalledObject filter, MarshalledObject handback, Subject delegationSubject) throws InstanceNotFoundException, ListenerNotFoundException, IOException
RMIConnection
复制
MBeanServerConnection.removeNotificationListener(ObjectName, ObjectName, NotificationFilter, Object)
。
NotificationFilter
参数包装在一个MarshalledObject
。
Object
参数也包裹在一个MarshalledObject
。
removeNotificationListener
在界面
RMIConnection
name
- 应删除侦听器的MBean的名称。
listener
- 以前添加到此MBean的侦听器。
filter
- 添加侦听器时指定的过滤器,封装在
MarshalledObject
。
handback
- 添加侦听器时指定的
MarshalledObject
,封装在
MarshalledObject
。
delegationSubject
- 包含
Subject
主体的Subject或使用
null
的null。
InstanceNotFoundException
- 提供的MBean名称与任何注册的MBean不匹配。
ListenerNotFoundException
- 监听器未在MBean中注册,或者未注册给定过滤器和回传。
IOException
- 如果发生一般通信异常。
RMIConnection.addNotificationListener(javax.management.ObjectName, javax.management.ObjectName, java.rmi.MarshalledObject, java.rmi.MarshalledObject, javax.security.auth.Subject)
public NotificationResult fetchNotifications(long clientSequenceNumber, int maxNotifications, long timeout) throws IOException
RMIConnection
复制
从连接器服务器检索通知。 此方法可以阻止,直到有至少一个通知或直到达到指定的超时。 该方法也可以随时返回零通知。
如果序列号不小于clientSequenceNumber
,则该通知可以包含在结果中,并且该客户端已经为生成通知的MBean注册了至少一个监听器,并且接收该通知的过滤器。 各侦听感兴趣的通知是由被返回的整数型ID标识RMIConnection.addNotificationListeners(ObjectName[], MarshalledObject[], Subject[])
。
fetchNotifications
在界面
RMIConnection
clientSequenceNumber
- 客户端
clientSequenceNumber
的第一个序列号。如果为负,则将其解释为下一个通知将具有的序列号。
maxNotifications
- 返回的不同通知的最大数量。
返回的NotificationResult
中的TargetedNotification
数组可以具有比此更多的元素,如果相同的通知多次显示。
如果此参数为负,则该行为是未指定的。
timeout
- 等待通知到达的最长时间(毫秒)。
这可以是0表示方法不应该等待,如果没有通知,但应该立即返回。
它可以是Long.MAX_VALUE
来表示没有超时。
如果此参数为负,则该行为是未指定的。
NotificationResult
。
IOException
- 如果发生一般通信异常。