java.lang.Object java.rmi.server.RemoteObject java.rmi.server.RemoteServer java.rmi.activation.Activatable
public abstract class Activatable
Activatable
类为那些需要进行持久访问并能由系统激活的远程对象提供支持。
对于构造方法和静态 exportObject
方法,可以像 UnicastRemoteObject
中所描述的那样获得将被导出的远程对象的 stub。
试图显式序列化此类的实例将失败。
字段摘要 |
---|
从类 java.rmi.server.RemoteObject 继承的字段 |
---|
ref |
构造方法摘要 | |
---|---|
protected |
Activatable(ActivationID id, int port) 构造方法用于在指定端口上激活/导出对象。 |
protected |
Activatable(ActivationID id, int port, RMIClientSocketFactory csf, RMIServerSocketFactory ssf) 构造方法用于在指定端口上激活/导出对象。 |
protected |
Activatable(String location, MarshalledObject<?> data, boolean restart, int port) 构造一个可激活的远程对象:注册此对象的激活描述符(使用指定的位置、数据和重启模式),并使用指定的端口输出该对象。 |
protected |
Activatable(String location, MarshalledObject<?> data, boolean restart, int port, RMIClientSocketFactory csf, RMIServerSocketFactory ssf) 构造一个可激活远程对象:注册此对象的激活描述符(使用指定的位置、数据和重启模式),并使用指定的端口、指定的客户端和服务器套接字工厂输出该对象。 |
方法摘要 | |
---|---|
static Remote |
exportObject(Remote obj, ActivationID id, int port) 将可激活远程对象导出到 RMI 运行库中,使该对象能接收传入的调用。 |
static Remote |
exportObject(Remote obj, ActivationID id, int port, RMIClientSocketFactory csf, RMIServerSocketFactory ssf) 将可激活远程对象导出到 RMI 运行库中,使该对象能接收传入的调用。 |
static ActivationID |
exportObject(Remote obj, String location, MarshalledObject<?> data, boolean restart, int port) 注册指定对象的激活描述符(使用指定的位置、数据和重启模式),并使用指定的端口输出该对象。 |
static ActivationID |
exportObject(Remote obj, String location, MarshalledObject<?> data, boolean restart, int port, RMIClientSocketFactory csf, RMIServerSocketFactory ssf) 注册指定对象的激活描述符(使用指定的位置、数据和重启模式),并使用指定的端口、指定的客户端和服务器套接字工厂输出该对象。 |
protected ActivationID |
getID() 返回对象的激活标识符。 |
static boolean |
inactive(ActivationID id) 通知系统具有相应激活 id 的对象目前没有处于活动状态的。 |
static Remote |
register(ActivationDesc desc) 为可激活远程对象注册一个对象描述符,以便可以根据需要激活它。 |
static boolean |
unexportObject(Remote obj, boolean force) 从 RMI 运行库中移除远程对象 obj。 |
static void |
unregister(ActivationID id) 为与 id 关联的激活描述符撤消前面的注册。 |
从类 java.rmi.server.RemoteServer 继承的方法 |
---|
getClientHost, getLog, setLog |
从类 java.rmi.server.RemoteObject 继承的方法 |
---|
equals, getRef, hashCode, toString, toStub |
从类 java.lang.Object 继承的方法 |
---|
clone, finalize, getClass, notify, notifyAll, wait, wait, wait |
构造方法详细信息 |
---|
protected Activatable(String location, MarshalledObject<?> data, boolean restart, int port) throws ActivationException, RemoteException
注:建议最好使用同时注册和输出可激活远程对象的 Activatable
构造方法,因为不 保证注册和输出远程对象操作是原子操作。相反,应用程序应该分开注册激活描述符和输出远程对象操作,这样才能正确地处理异常。
此方法使用该对象、指定位置、数据、重启模式和端口调用 exportObject
方法。getID()
的后续调用将返回从 exportObject
调用中返回的激活标识符。
location
- 此对象的类的位置
data
- 对象的初始化数据
port
- 导出对象的端口(如果 port=0,则使用匿名端口)
restart
- 如果该参数为 true,那么在一次意外崩溃之后,如果重启激活器或者重启对象激活组,则该对象也会被重启(激活);如果参数为 false,则只能根据需要激活该对象。指定
restart
为
true
,不强制对新注册的对象立即进行初始激活操作;初始激活是延后进行的。
ActivationException
- 如果对象注册失败。
RemoteException
- 如果下列操作之一失败:a) 通过激活系统注册对象 b) 将对象导出到 RMI 运行库。
protected Activatable(String location, MarshalledObject<?> data, boolean restart, int port, RMIClientSocketFactory csf, RMIServerSocketFactory ssf) throws ActivationException, RemoteException
注:建议最好使用同时注册和输出可激活远程对象的 Activatable
构造方法,因为不 保证注册和输出远程对象操作是原子操作。相反,应用程序应该分开注册激活描述符和输出远程对象操作,这样才能正确地处理异常。
此方法使用该对象、指定位置、数据、重启模式、端口、客户端和服务器套接字工厂调用 exportObject
方法。getID()
的后续调用将返回从 exportObject
调用中返回的激活标识符。
location
- 此对象的类的位置
data
- 对象的初始化数据
restart
- 如果该参数为 true,那么在一次意外崩溃之后,如果重启激活器或者重启对象激活组,则该对象也会被重启(激活);如果该参数为 false,则只能根据需要激活该对象。指定
restart
为
true
,不强制对新注册的对象立即进行初始激活操作;初始激活是延后进行的。
port
- param port 导出对象的端口(如果 port=0,则使用匿名端口)
csf
- 进行远程对象调用的客户端套接字工厂
ssf
- 接收远程调用的服务器端套接字工厂
ActivationException
- 如果注册失败。
RemoteException
- 如果下列操作之一失败:a) 通过激活系统注册对象 b) 将对象导出到 RMI 运行库。
protected Activatable(ActivationID id, int port) throws RemoteException
ActivationID
),以及 MarshalledObject
)。 当此类的具体子类通过上述带两个参数的构造方法激活 时,它必须调用此构造方法。作为构造的副作用,远程对象被“导出”到 RMI 运行库中(在指定 port
上),并且可用于接受从客户端传入的调用。
id
- 对象的激活标识符
port
- 导出对象的端口的端口号
RemoteException
- 如果将对象导出到 RMI 运行库中失败
protected Activatable(ActivationID id, int port, RMIClientSocketFactory csf, RMIServerSocketFactory ssf) throws RemoteException
ActivationID
),以及 MarshalledObject
)。 当此类的具体子类通过上述带两个参数的构造方法激活 时,它必须调用此构造方法。作为构造的副作用,远程对象被“导出”到 RMI 运行库中(在指定 port
上),并且可用于接受从客户端传入的调用。
id
- 对象的激活标识符
port
- 导出对象的端口的端口号
csf
- 进行远程对象调用的客户端套接字工厂
ssf
- 接收远程调用的服务器端套接字工厂
RemoteException
- 如果将对象导出到 RMI 运行库中失败
方法详细信息 |
---|
protected ActivationID getID()
public static Remote register(ActivationDesc desc) throws UnknownGroupException, ActivationException, RemoteException
desc
- 对象的描述符
UnknownGroupException
- 如果
desc
中的组 id 未使用激活系统注册
ActivationException
- 如果激活系统未运行
RemoteException
- 如果远程调用失败
public static boolean inactive(ActivationID id) throws UnknownObjectException, ActivationException, RemoteException
id
的对象目前没有处于活动状态的。如果对象当前处于活动状态的,则该对象从 RMI 运行库“取消导出”(仅在没有任何挂起或者进程内调用时),使其无法再接收传入的调用。此调用通知此 VM 的 ActivationGroup,告诉它对象处于不活动状态,并依次通知其 ActivationMonitor。如果成功完成此调用,则对激活器的后续激活请求将导致对象被重新激活。如果对象被认为是活动的,但是其自身已经取消导出,此操作仍能获得成功。
id
- 对象的激活标识符
UnknownObjectException
- 如果对象未知(可能已经处于不活动状态)
ActivationException
- 如果组处于不活动状态
RemoteException
- 如果调用通知监视器失败
public static void unregister(ActivationID id) throws UnknownObjectException, ActivationException, RemoteException
id
关联的激活描述符撤消前面的注册。无法再通过该
id
激活对象。
id
- 对象的激活标识符
UnknownObjectException
- 如果对象(
id
)未知
ActivationException
- 如果激活系统未运行
RemoteException
- 如果对激活系统的远程调用失败
public static ActivationID exportObject(Remote obj, String location, MarshalledObject<?> data, boolean restart, int port) throws ActivationException, RemoteException
注:建议最好使用此方法(以及同时注册和输出可激活远程对象的 Activatable
构造方法),因为不 保证注册和输出远程对象操作是原子操作。相反,应用程序应该分开注册激活描述符和输出远程对象操作,这样才能正确地处理异常。
此方法使用指定对象、位置、数据、重启模式、端口、客户端和服务器套接字工厂(为 null
)调用 exportObject
方法,然后返回得到的激活标识符。
obj
- 将被导出的对象
location
- 对象的代码基
data
- 对象的引导数据
restart
- 如果该参数为 true,那么在一次意外崩溃之后,如果重启激活器或者重启对象激活组,则该对象也会被重启(激活);如果该参数为 false,则只能根据需要激活该对象。指定
restart
为
true
,不强制对新注册的对象立即进行初始激活操作;初始激活是延后进行的。
port
- 导出对象的端口的端口号(如果 port=0,则使用匿名端口)
desc
所获得的激活标识符
ActivationException
- 如果激活组处于不活动状态
RemoteException
- 如果对象注册或者导出失败
public static ActivationID exportObject(Remote obj, String location, MarshalledObject<?> data, boolean restart, int port, RMIClientSocketFactory csf, RMIServerSocketFactory ssf) throws ActivationException, RemoteException
注:建议最好使用此方法(以及同时注册和输出可激活远程对象的 Activatable
构造方法),因为不 保证注册和输出远程对象操作是原子操作。相反,应用程序应该分开注册激活描述符和输出远程对象操作,这样才能正确地处理异常。
此方法首先按以下步骤注册指定对象的激活描述符。它通过调用 ActivationGroup.getSystem
方法来获取激活系统。然后,此方法通过使用 ActivationDesc
调用激活系统的 registerObject
方法来获取 ActivationID
,其中,ActivationDesc 是使用指定对象的类名称、指定位置、数据和重启模式构造的。如果在获取激活系统或注册激活描述符时发生异常,则将向调用者抛出该异常。
然后,此方法使用指定的远程对象、通过注册获取的激活标识符、指定的端口、指定的客户端和服务器套接字工厂调用 exportObject
方法输出对象。如果输出对象时发生异常,那么此方法将尝试使用激活标识符调用激活系统的 unregisterObject
方法来注销激活标识符(通过注册获得)。如果注销标识符时发生异常,则忽略该异常,并向调用者抛出输出对象时发生的原异常。
最后,此方法使用激活标识符和指定远程对象对此 VM 中的激活组调用 activeObject
方法,并向调用者返回激活标识符。
obj
- 将被导出的对象
location
- 对象的代码基
data
- 对象的引导数据
restart
- 如果该参数为 true,那么在一次意外崩溃之后,如果重启激活器或者重启对象激活组,则该对象也会被重启(激活);如果该参数为 false,则只能根据需要激活该对象。指定
restart
为
true
,不强制对新注册的对象立即进行初始激活操作;初始激活是延后进行的。
port
- 导出对象的端口的端口号(如果 port=0,则使用匿名端口)
csf
- 进行远程对象调用的客户端套接字工厂
ssf
- 接收远程调用的服务器端套接字工厂
ActivationException
- 如果激活组处于不活动状态
RemoteException
- 如果对象注册或者导出失败
public static Remote exportObject(Remote obj, ActivationID id, int port) throws RemoteException
port
为零,则在匿名端口上导出对象。
在激活过程中,此 exportObject
方法应当由一个未扩展 Activatable
类的“可激活”对象显式调用。对于确实扩展了 Activatable
类的对象,无需直接调用此方法,因为该对象是在构造期间输出的。
obj
- 远程对象实现
id
- 对象的激活标识符
port
- 导出对象的端口的端口号(如果 port=0,则使用匿名端口)
RemoteException
- 如果对象导出失败
public static Remote exportObject(Remote obj, ActivationID id, int port, RMIClientSocketFactory csf, RMIServerSocketFactory ssf) throws RemoteException
port
为零,则在匿名端口上导出对象。
在激活过程中,此 exportObject
方法应当由一个未扩展 Activatable
类的“可激活”对象显式调用。对于确实扩展了 Activatable
类的对象,无需直接调用此方法,因为该对象是在构造期间输出的。
obj
- 远程对象实现
id
- 对象的激活标识符
port
- 导出对象的端口的端口号(如果 port=0,则使用匿名端口)
csf
- 进行远程对象调用的客户端套接字工厂
ssf
- 接收远程调用的服务器端套接字工厂
RemoteException
- 如果对象导出失败
public static boolean unexportObject(Remote obj, boolean force) throws NoSuchObjectException
obj
- 要取消导出的远程对象
force
- 如果该参数为 true,则即使存在挂起或者进程内调用,仍取消导出对象;如果该参数为 false,则仅当不存在挂起或者进程内调用时,才取消导出对象
NoSuchObjectException
- 如果远程对象目前没有被导出