接口 | 描述 |
---|---|
RMIConnection |
RMI对象用于提出请求从客户端到MBeanServer MBeanServer在服务器端执行。
|
RMIServer |
RMI对象用于建立一个RMI连接器连接。
|
类 | 描述 |
---|---|
RMIConnectionImpl |
RMIConnection 接口的实现。
|
RMIConnectionImpl_Stub | |
RMIConnector |
一个远程RMI连接器连接。
|
RMIConnectorServer |
JMX API创建连接器服务器从远程客户端基于RMI连接。
|
RMIIIOPServerImpl |
一个
RMIServerImpl 是出口通过IIOP和创造为RMI对象的出口通过IIOP的客户端连接。
|
RMIJRMPServerImpl |
一是出口通过JRMP和创建RMI对象的出口通过JRMP客户端连接
RMIServer 对象。
|
RMIServerImpl |
RMI对象代表一个连接器服务器。
|
RMIServerImpl_Stub |
RMI连接器是一个JMX远程API,使用RMI传输客户端请求到远程管理服务器连接器。此包定义一个RMI连接器用户需要直接引用的类,对于客户端和服务器端。它还定义了特定的类,用户通常不会直接引用,但必须定义使RMI连接器的不同实现可互操作。
RMI连接器支持RMI JRMP运输,和任选的IIOP运输。
最喜欢的连接器在JMX远程API,RMI连接器通常有一个地址,这是一个JMXServiceURL
。这个地址的协议的一部分,是一个连接器,使用默认的RMI传输rmi
(JRMP),或iiop
一连接器使用RMI/IIOP。
有两种形式的RMI连接地址:
RMIServer
RMI存根给远程访问连接服务器java对象。这个称呼,RMI存根从外部目录条目包含在URL中获得。外部目录是公认的JNDI
任何目录,通常RMI注册表,LDAP,或名字。地址是覆盖在更详细的下面。
创建一个RMI连接器服务器通常的方法是对法JMXConnectorServerFactory.newJMXConnectorServer
供应RMI连接器地址。MBean服务器,连接服务器连接可以被指定为一个参数的方法。另外,连接器服务器可以注册在MBean服务器MBean。
RMI连接器服务器也可以通过构建RMIConnectorServer
实例创建,直接或通过MBean服务器的createMBean
方法。
你可以选择RMI传输(JRMP或IIOP)通过指定rmi
或iiop
在serviceURL
的protocol
部分创建连接器服务器时。你也可以通过实例化RMIServerImpl
适当的类并将其提供给RMIConnectorServer
构造函数创建专门的连接器服务器。
如果你指定了一个空serviceURL
URL路径(可选的主机和端口后),或者如果你不指定serviceURL
,然后连接服务器将制造一个新的JMXServiceURL
,客户可以使用连接:
如果serviceURL
看起来像:
service:jmx:rmi://host:port
然后连接服务器将产生一个RMIJRMPServerImpl
和返回的JMXServiceURL
看起来像:
service:jmx:rmi://host:port/stub/XXXX
在XXXX
是序列化形式的存根生成的对象,编码base64不换行。
如果serviceURL
看起来像:
service:jmx:iiop://host:port
然后连接服务器将产生一个RMIIIOPServerImpl
和返回的JMXServiceURL
看起来像:
service:jmx:iiop://host:port/ior/IOR:XXXX
在IOR:XXXX
是标准的CORBA为生成的对象互操作对象引用的编码。
如果没有serviceURL
,必须有一个用户提供的RMIServerImpl
。如果toStub
方法对该对象返回Stub
实例,然后连接服务器将使用iiop
形式上产生JMXServiceURL
。否则,它将使用rmi
表生成一个JMXServiceURL
。
在一个用户提供的serviceURL
是可选的host
。如果存在,它被复制到生成的JMXServiceURL
但忽略。如果缺席,所产生的JXMServiceURL
将本地主机名。
在一个用户提供的serviceURL
也是可选的port
。如果存在,它也复制到生成的JMXServiceURL
;否则,产生的JMXServiceURL
没有港口。使用rmi
协议,一个serviceURL
的port
,如果存在,表明什么端口生成远程对象应该是出口。它没有其他效果。
如果用户提供了一个RMIServerImpl
而不是JMXServiceURL
,然后生成的JMXServiceURL
将在其host
部分本地主机名和没有port
。
作为一种替代生成的地址描述,serviceURL
提供的地址在创建连接器服务器可以指定一个目录地址存储提供或产生RMIServer
存根。然后,客户端和服务器都使用此目录地址。
在这种情况下,该serviceURL
有这两种形式:
service:jmx:rmi://host:port/jndi/jndi-name
service:jmx:iiop://host:port/jndi/jndi-name
在这里,jndi-name
是一个字符串,可以提供给javax.naming.InitialContext.bind
。
像往常一样,在host
和:port
可以省略。
连接器服务器将生成基于协议的RMIServerImpl
(rmi
或iiop
),为rmi
,如果任何的port
。当连接器服务器启动时,它会得到一个存根从该对象使用其toStub
方法和存储对象使用给定的jndi-name
。该属性定义了JNDI API一样。
例如,如果JMXServiceURL
是:
service:jmx:rmi://ignoredhost/jndi/rmi://myhost/myname
然后连接服务器将产生一个
RMIJRMPServerImpl
和储存的存根使用JNDI名称
rmi://myhost/myname
即RMI注册表对宿主
myhost
默认端口运行进入
myname
。注意,RMI注册登记只允许从本地主机。所以,在这种情况下,必须
myhost
姓名(或名称)的主机服务器上运行的连接器。
在这JMXServiceURL
,第一rmi:
指定RMI连接器,而第二rmi:
指定RMI注册表。
另一个例子是,如果JMXServiceURL
:
service:jmx:iiop://ignoredhost/jndi/ldap://dirhost:9999/cn=this,ou=that
然后连接服务器将产生一个
RMIIIOPServerImpl
和储存的存根使用JNDI名称
ldap://dirhost:9999/cn=this,ou=that
意味着对宿主
dirhost
9999端口运行LDAP目录条目
cn=this,ou=that
。
如果JMXServiceURL
是:
service:jmx:iiop://ignoredhost/jndi/cn=this,ou=that
然后连接服务器将产生一个
RMIIIOPServerImpl
和储存的存根使用JNDI名称
cn=this,ou=that
在此情况下工作,JNDI API必须被适当配置供应什么目录使用的信息。
在这些例子中,主机名ignoredhost
不是由连接器服务器或客户端使用。它可以被省略,例如:
service:jmx:iiop:///jndi/cn=this,ou=that
然而,使用连接器服务器正在运行的主机的名称,是很好的做法。这通常与目录主机的名称不同。
使用默认的JRMP运输时,RMI套接字工厂可以使用属性jmx.remote.rmi.client.socket.factory
和jmx.remote.rmi.server.socket.factory
在给RMIConnectorServer
构造函数的environment
指定。这些属性值的类型必须是RMIClientSocketFactory
和RMIServerSocketFactory
,分别。这些工厂创造与连接器相关的RMI对象时使用。
RMI连接器客户端通常采用JMXConnectorFactory
,与JMXServiceURL
,rmi
或iiop
作为它的协议。
如果JMXServiceURL
是由服务器生成的,如上下"connector addresses generated by the server",然后客户端将需要获得直接或间接地从服务器。通常,服务器使JMXServiceURL
可存储在文件或查找服务。
如果JMXServiceURL
使用目录的语法,如上下"connector addresses based on directory entries",然后客户可以获得它只是解释,或者客户端和服务器都可以知道相应的目录项使用。例如,如果对小玩意儿代理连接器服务器使用入门whatsit-agent-connector
在主机上的myhost
RMI注册表,然后客户端和服务器都可以知道JMXServiceURL
是合适的:
service:jmx:rmi:///jndi/rmi://myhost/whatsit-agent-connector
如果你有型RMIServer
RMI存根,可以直接利用RMIConnector
适当的构造函数构造一个RMI连接。
使用IIOP传输时,客户端和服务器可以指定所使用的属性java.naming.corba.orb
ORB。连接到球发生在start
连接器服务器,在客户端的连接connect
时间。如果java.naming.corba.orb
属性包含在环境Map,那么它的价值(一ORB
),用于连接IIOP存根。否则,一个新的org.omg.corba.orb是通过调用org.omg.CORBA.ORB.init((String[])null,(Properties)null)
创建。后来的RMI连接器客户端或服务器在同一个JVM可以重用这个球,也可以创建另一个以同样的方式。
如果java.naming.corba.orb
属性指定并没有指向一个ORB
,然后
将抛出。IllegalArgumentException
这里所描述的机制并不适用于当IIOP远程对象(存根或服务器)的创建和再传递给rmiconnector和rmiconnectorserver ORB手动连接。
如果一个RMI连接器客户端或服务器接收来自同一个类的实例,它不知道,如果动态代码下载RMI连接是活动的,则类可以从代码库由同行指定下载。本文Dynamic code downloading using Java RMI解释更详细。
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.