java.rmi.activation

接口
异常
所有超级接口:
Remote

public interface Activator
     
extends Remote

Activator 方便了远程对象激活。“失效的”远程引用调用激活器 (activator) 的 activate 方法来获得到“可激活的”远程对象的“活”引用。接收到激活的请求后,激活器为激活标识符 id 查找激活描述符,确定应当激活的对象所在的组通过组的 ActivationInstantiator 来初始化对象重创建(通过调用 newInstance 方法)。激活器在必要时才初始化激活组的执行。例如,如果针对某个特定组标识符的激活组尚未执行,则激活器为该组初始化 VM 的执行。

ActivatorActivationSystemActivationMonitor 紧密协作,ActivationSystem 提供了一种方式来注册那些组中的组和对象,而 ActivationMonitor 接收有关活动和不活动对象以及不活动组的信息。

激活器负责监视和检测,当激活组失败时,它可以移除那些组中的组和活动对象的旧远程引用。

从以下版本开始:
1.2
另请参见:
ActivationInstantiator, ActivationGroupDesc, ActivationGroupID

方法摘要
 MarshalledObject<? extends Remote> activate(ActivationID id, boolean force)
          激活与激活标识符 id 关联的对象。
 

方法详细信息

activate

MarshalledObject<? extends Remote> activate(ActivationID id,
                                            boolean force)
                                            throws ActivationException,
                                                   UnknownObjectException,
                                                   RemoteException
激活与激活标识符 id 关联的对象。如果激活器知道对象已经是活动的,并且 force 为 false,则立即向调用方返回具有一个“活”引用的 stub;否则,如果激活器不知道对应的远程对象是否为活动的,则激活器使用激活描述符信息(前面已注册)来确定应当被激活的对象所在的组 (VM)。如果与对象组描述符相对应的 ActivationInstantiator 已经存在,则激活器调用激活组的 newInstance 方法来传递对象的 id 和描述符。

如果针对该对象的组描述符的激活组尚未存在,则激活器启动一次 ActivationInstantiator 执行(例如,通过生成一个子进程)。当激活器接收到激活组的指定该激活组引用的回调(通过 ActivationSystemactiveGroup 方法)时,然后激活器可以调用该激活初始化程序的 newInstance 方法来转发每一个挂起的激活请求给激活组,并且向调用方返回结果(一个编组的远程对象引用,一个 stub)。

注意,激活器接收一个“编组”的对象,而不是一个远程对象,以便激活器无需为该对象加载代码或者参与针对该对象的分布式垃圾收集。如果激活器保持对该远程对象的一个强引用,则在正常的分布式垃圾收集机制下,激活器可能阻止对象被垃圾回收。

参数:
id - 正被激活的对象的激活标识符
force - 如果为 true,激活器联络该组来获得该远程对象的引用;如果为 false,返回允许的缓存值。
返回:
以一种编组形式返回远程对象(一个 stub)
抛出:
ActivationException - 如果对象激活失败
UnknownObjectException - 如果对象未知(未注册)
RemoteException - 如果远程调用失败
从以下版本开始:
1.2