- java.lang.Object
-
- java.rmi.server.RemoteObject
-
- java.rmi.server.RemoteServer
-
- java.rmi.server.UnicastRemoteObject
-
- 实现的所有接口
-
Serializable
,Remote
- 已知直接子类:
-
ActivationGroup
public class UnicastRemoteObjectextends RemoteServer
用于通过JRMP导出远程对象并获取与远程对象通信的存根。 存根在运行时使用动态代理对象生成,或者在构建时静态生成,通常使用rmic
工具。不推荐使用:静态存根。 不推荐支持静态生成的存根。 这包括此类中需要使用静态存根的API,以及用于加载静态存根的运行时支持。 首选动态生成存根,使用下面列出的一种非弃用的导出对象的方法。 不要运行
rmic
来生成静态存根类。 这是不必要的,它也被弃用了。导出远程对象有八种方法:
- 子类化
UnicastRemoteObject
并调用UnicastRemoteObject()
构造函数。 - 子类化
UnicastRemoteObject
并调用UnicastRemoteObject(port)
构造函数。 - 子类化
UnicastRemoteObject
并调用UnicastRemoteObject(port, csf, ssf)
构造函数。 - 调用
exportObject(Remote)
方法。 已过时。 - 调用
exportObject(Remote, port)
方法。 - 调用
exportObject(Remote, port, csf, ssf)
方法。 - 调用
exportObject(Remote, port, filter)
方法。 - 调用
exportObject(Remote, port, csf, ssf, filter)
方法。
第四种技术
exportObject(Remote)
始终使用静态生成的存根,不推荐使用。其他技术都使用以下方法:如果
java.rmi.server.ignoreStubClasses
属性为true
(不区分大小写)或者无法找到静态存根,则使用Proxy
对象动态生成存根。 否则,使用静态存根。java.rmi.server.ignoreStubClasses
属性的默认值为false
。静态生成的存根通常使用
rmic
工具从远程对象的类中生成。 加载静态存根,并按如下所述构造该存根类的实例。- “根类”确定如下:如果远程对象的类直接实现扩展
Remote
的接口,则远程对象的类是根类; 否则,根类是远程对象类的派生程度最高的类,它直接实现扩展Remote
的接口。 - 要加载的存根类的名称是通过将根类的二进制名称与后缀
_Stub
连接来确定的。 - 存根类使用根类的类加载器按名称加载。 存根类必须是公共的,它必须扩展
RemoteStub
,它必须驻留在至少导出到java.rmi
模块的包中,并且它必须具有一个公共构造函数,其具有一个类型为RemoteRef
的参数。 - 最后,使用
RemoteRef
构造存根类的实例。 - 如果找不到相应的存根类,或者无法加载存根类,或者创建存根实例时出现问题,则抛出
StubNotFoundException
。
通过构造具有以下特征的
Proxy
的实例来动态生成存根:- 代理的类是根据
Proxy
类的规范定义的,使用远程对象类的类加载器。 - 代理实现远程对象类实现的所有远程接口。
- 每个远程接口必须是公共和驻留在一个包,是exported到至少
java.rmi
模块,或者它必须驻留在一个包,是open到至少java.rmi
模块。 - 代理的调用处理程序是
RemoteObjectInvocationHandler
用构建的实例RemoteRef
。 - 如果无法创建代理,将抛出
StubNotFoundException
。
导出的远程对象从存根中接收方法调用,如RMI规范中所述。 使用自定义
ObjectInputStream
解组每个调用的操作和参数。 如果在导出对象时提供了ObjectInputFilter
且不是null
,则它用于在从流中解组参数时对这些参数进行过滤。 无论调用哪种方法或参数值,过滤器都用于所有调用和所有参数。 如果没有提供过滤器或是null
为导出的对象则ObjectInputStream
默认过滤器,如果有的话,被使用。 默认筛选器配置为ObjectInputFilter.Config.setSerialFilter
。 如果过滤器拒绝的任何参数中,InvalidClassException
通过抛出ObjectInputStream
被报告为一个的原因UnmarshalException
。- Implementation Note:
- 根据导出对象的构造函数或静态方法,可以使用
RMISocketFactory
创建套接字。 默认情况下,RMISocketFactory
创建的服务器套接字侦听所有网络接口。 请参阅RMISocketFactory
类和5078034186060中的RMI Socket Factories部分 。 - 从以下版本开始:
- 1.1
- 另请参见:
- Serialized Form
-
-
字段汇总
-
声明的属性在类 java.rmi.server.RemoteObject
ref
-
-
构造方法摘要
构造方法 变量 构造器 描述 protected
UnicastRemoteObject()
使用匿名端口创建并导出新的UnicastRemoteObject对象。protected
UnicastRemoteObject(int port)
使用特定提供的端口创建并导出新的UnicastRemoteObject对象。protected
UnicastRemoteObject(int port, RMIClientSocketFactory csf, RMIServerSocketFactory ssf)
使用特定提供的端口和套接字工厂创建并导出新的UnicastRemoteObject对象。
-
方法摘要
所有方法 静态方法 实例方法 具体的方法 弃用的方法 变量和类型 方法 描述 Object
clone()
返回与原始对象不同的远程对象的克隆。static RemoteStub
exportObject(Remote obj)
已过时。不推荐使用此方法,因为它仅支持静态存根。static Remote
exportObject(Remote obj, int port)
使用特定提供的端口导出远程对象以使其可用于接收传入呼叫。static Remote
exportObject(Remote obj, int port, ObjectInputFilter filter)
使用特定提供的端口和filter导出远程对象以使其可用于接收传入呼叫。static Remote
exportObject(Remote obj, int port, RMIClientSocketFactory csf, RMIServerSocketFactory ssf)
使用给定套接字工厂指定的传输导出远程对象以使其可用于接收传入呼叫。static Remote
exportObject(Remote obj, int port, RMIClientSocketFactory csf, RMIServerSocketFactory ssf, ObjectInputFilter filter)
使用给定套接字工厂指定的传输和filter导出远程对象以使其可用于接收传入呼叫。static boolean
unexportObject(Remote obj, boolean force)
从RMI运行时中删除远程对象obj。-
声明方法的类 java.rmi.server.RemoteServer
getClientHost, getLog, setLog
-
-
-
-
构造方法详细信息
-
UnicastRemoteObject
protected UnicastRemoteObject() throws RemoteException
使用匿名端口创建并导出新的UnicastRemoteObject对象。使用
RMISocketFactory
类创建的服务器套接字导出对象。- 异常
-
RemoteException
- 如果导出对象失败 - 从以下版本开始:
- 1.1
-
UnicastRemoteObject
protected UnicastRemoteObject(int port) throws RemoteException
使用特定提供的端口创建并导出新的UnicastRemoteObject对象。使用
RMISocketFactory
类创建的服务器套接字导出对象。- 参数
-
port
- 远程对象接收呼叫的端口号(如果port
为零,则选择匿名端口) - 异常
-
RemoteException
- 如果导出对象失败 - 从以下版本开始:
- 1.2
-
UnicastRemoteObject
protected UnicastRemoteObject(int port, RMIClientSocketFactory csf, RMIServerSocketFactory ssf) throws RemoteException
使用特定提供的端口和套接字工厂创建并导出新的UnicastRemoteObject对象。套接字工厂可以是
null
,在这种情况下,使用相应的客户端或服务器套接字创建方法RMISocketFactory
。- 参数
-
port
- 远程对象接收呼叫的端口号(如果port
为零,则选择匿名端口) -
csf
- 用于调用远程对象的客户端套接字工厂 -
ssf
- 用于接收远程呼叫的服务器端套接字工厂 - 异常
-
RemoteException
- 如果导出对象失败 - 从以下版本开始:
- 1.2
-
-
方法详细信息
-
clone
public Object clone() throws CloneNotSupportedException
返回与原始对象不同的远程对象的克隆。- 重写:
-
clone
在类Object
- 结果
- 新的远程对象
- 异常
-
CloneNotSupportedException
- 如果克隆因RemoteException而失败。 - 从以下版本开始:
- 1.1
- 另请参见:
-
Cloneable
-
exportObject
@Deprecatedpublic static RemoteStub exportObject(Remote obj) throws RemoteException
Deprecated.This method is deprecated because it supports only static stubs. UseexportObject(Remote, port)
orexportObject(Remote, port, csf, ssf)
instead.- 参数
-
obj
- 要导出的远程对象 - 结果
- 远程对象存根
- 异常
-
RemoteException
- 如果导出失败 - 从以下版本开始:
- 1.1
-
exportObject
public static Remote exportObject(Remote obj, int port) throws RemoteException
使用特定提供的端口导出远程对象以使其可用于接收传入呼叫。使用
RMISocketFactory
类创建的服务器套接字导出对象。- 参数
-
obj
- 要导出的远程对象 -
port
- 要导出对象的端口 - 结果
- 远程对象存根
- 异常
-
RemoteException
- 如果导出失败 - 从以下版本开始:
- 1.2
-
exportObject
public static Remote exportObject(Remote obj, int port, RMIClientSocketFactory csf, RMIServerSocketFactory ssf) throws RemoteException
使用给定套接字工厂指定的传输导出远程对象以使其可用于接收传入呼叫。套接字工厂可以是
null
,在这种情况下,使用相应的客户端或服务器套接字创建方法RMISocketFactory
。- 参数
-
obj
- 要导出的远程对象 -
port
- 要导出对象的端口 -
csf
- 用于调用远程对象的客户端套接字工厂 -
ssf
- 用于接收远程调用的服务器端套接字工厂 - 结果
- 远程对象存根
- 异常
-
RemoteException
- 如果导出失败 - 从以下版本开始:
- 1.2
-
exportObject
public static Remote exportObject(Remote obj, int port, ObjectInputFilter filter) throws RemoteException
使用特定提供的端口和filter导出远程对象以使其可用于接收传入呼叫。使用
RMISocketFactory
类创建的服务器套接字导出对象。- 参数
-
obj
- 要导出的远程对象 -
port
- 要导出对象的端口 -
filter
- 反序列化调用参数时应用的ObjectInputFilter; 可能是null
- 结果
- 远程对象存根
- 异常
-
RemoteException
- 如果导出失败 - 从以下版本开始:
- 9
-
exportObject
public static Remote exportObject(Remote obj, int port, RMIClientSocketFactory csf, RMIServerSocketFactory ssf, ObjectInputFilter filter) throws RemoteException
使用给定套接字工厂和filter指定的传输,导出远程对象以使其可用于接收传入呼叫。套接字工厂可以是
null
,在这种情况下,使用相应的客户端或服务器套接字创建方法RMISocketFactory
。- 参数
-
obj
- 要导出的远程对象 -
port
- 要导出对象的端口 -
csf
- 用于调用远程对象的客户端套接字工厂 -
ssf
- 用于接收远程调用的服务器端套接字工厂 -
filter
- 反序列化调用参数时应用的ObjectInputFilter; 可能是null
- 结果
- 远程对象存根
- 异常
-
RemoteException
- 如果导出失败 - 从以下版本开始:
- 9
-
unexportObject
public static boolean unexportObject(Remote obj, boolean force) throws NoSuchObjectException
从RMI运行时中删除远程对象obj。 如果成功,该对象将无法再接受传入的RMI调用。 如果force参数为true,则即使存在对远程对象的挂起调用或者远程对象仍在进行调用,也强制取消导出该对象。 如果force参数为false,则只有在对象没有挂起或正在进行的调用时才会取消导出对象。- 参数
-
obj
- 要导出的远程对象 -
force
- 如果为true,即使有待处理或正在进行的调用,也会force
导出该对象; 如果为false,则仅在没有挂起或正在进行的调用时取消导出对象 - 结果
- 如果操作成功,则为true,否则为false
- 异常
-
NoSuchObjectException
- 如果当前未导出远程对象 - 从以下版本开始:
- 1.2
-
-