- java.lang.Object
-
- java.rmi.server.RemoteObject
-
- java.rmi.server.RemoteServer
-
- java.rmi.server.UnicastRemoteObject
-
- java.rmi.activation.ActivationGroup
-
- 实现的所有接口
-
Serializable,ActivationInstantiator,Remote
public abstract class ActivationGroup extends UnicastRemoteObject implements ActivationInstantiator
ActivationGroup负责在其组中创建“可激活”对象的新实例,在以下情况下通知其ActivationMonitor:其对象变为活动或非活动,或整个组变为非活动状态。ActivationGroup最初是通过以下几种方式之一创建的:- 作为为组中的第一个可激活对象创建
ActivationDesc而没有显式ActivationGroupID,或者 - 通过
ActivationGroup.createGroup方法 - 作为激活
ActivationGroupDesc仅注册的组中的第一个对象的ActivationGroupDesc。
只有激活器才能重建
ActivationGroup。 激活器根据需要为每个已注册的激活组生成单独的VM(例如,作为子进程),并将激活请求定向到适当的组。 具体实现如何生成VM。 通过ActivationGroup.createGroup静态方法创建激活组。createGroup方法对要创建的组有两个要求:1)组必须是ActivationGroup的具体子类,以及2)组必须具有带两个参数的构造函数:- 该集团的
ActivationGroupID,和 - 组的初始化数据(在
java.rmi.MarshalledObject)
当创建的默认实现
ActivationGroup将覆盖与性能的系统属性要求其时ActivationGroupDesc创建,并会设置一个SecurityManager作为默认的系统安全管理。 如果您的应用程序要求当对象在组中被激活时设置特定的属性,应用程序应该创建一个特殊Properties包含这些属性的对象,然后创建一个ActivationGroupDesc与Properties对象,并使用ActivationGroup.createGroup创建任何之前ActivationDesc默认前S(ActivationGroupDesc已创建)。 如果您的应用程序需要使用SecurityManager以外的安全管理器,则可以在ActivativationGroupDescriptor属性列表中将java.security.manager属性设置为您要安装的安全管理器的名称。- 从以下版本开始:
- 1.2
- 另请参见:
-
ActivationInstantiator,ActivationGroupDesc,ActivationGroupID, Serialized Form
-
-
字段汇总
-
声明的属性在类 java.rmi.server.RemoteObject
ref
-
-
构造方法摘要
构造方法 变量 构造器 描述 protectedActivationGroup(ActivationGroupID groupID)使用给定的激活组标识符构造激活组。
-
方法摘要
所有方法 静态方法 实例方法 抽象方法 具体的方法 变量和类型 方法 描述 protected voidactiveObject(ActivationID id, MarshalledObject<? extends Remote> mobj)子类必须使用此受保护的方法将activeObject回调到组的监视器。abstract voidactiveObject(ActivationID id, Remote obj)导出对象时调用组的activeObject方法(通过Activatable对象构造或显式调用Activatable.exportObject。static ActivationGroupcreateGroup(ActivationGroupID id, ActivationGroupDesc desc, long incarnation)为当前VM创建并设置激活组。static ActivationGroupIDcurrentGroupID()返回当前激活组的标识符。static ActivationSystemgetSystem()返回VM的激活系统。protected voidinactiveGroup()子类必须使用此受保护的方法将inactiveGroup回调到组的监视器。booleaninactiveObject(ActivationID id)该集团的inactiveObject方法是通过对呼叫间接调用Activatable.inactive方法。static voidsetSystem(ActivationSystem system)设置VM的激活系统。-
声明方法的类 java.rmi.server.UnicastRemoteObject
clone, exportObject, exportObject, exportObject, exportObject, exportObject, unexportObject
-
声明方法的类 java.rmi.server.RemoteServer
getClientHost, getLog, setLog
-
声明方法的接口 java.rmi.activation.ActivationInstantiator
newInstance
-
-
-
-
构造方法详细信息
-
ActivationGroup
protected ActivationGroup(ActivationGroupID groupID) throws RemoteException
使用给定的激活组标识符构造激活组。 该组出口为java.rmi.server.UnicastRemoteObject。- 参数
-
groupID- 组的标识符 - 异常
-
RemoteException- 如果无法导出该组 -
UnsupportedOperationException- 当且仅当此实现不支持激活时 - 从以下版本开始:
- 1.2
-
-
方法详细信息
-
inactiveObject
public boolean inactiveObject(ActivationID id) throws ActivationException, UnknownObjectException, RemoteException
该集团的inactiveObject方法是通过对呼叫间接调用Activatable.inactive方法。 当该对象停用时(对象认为它不再处于活动状态),远程对象实现必须调用Activatable的inactive方法。 如果对象在取消激活时未调用Activatable.inactive,则该对象将永远不会被垃圾回收,因为该组保留对其创建的对象的强引用。组的
inactiveObject方法从RMI运行时inactiveObject导出远程对象,以便该对象不再接收传入的RMI调用。 如果对象没有挂起或正在执行的调用,则只会取消导出对象。ActivationGroup的子类必须覆盖此方法并取消导出该对象。从RMI运行时删除对象后,该组必须通知其
ActivationMonitor(通过监视器的inactiveObject方法)远程对象当前未处于活动状态,以便激活器在后续激活请求时重新激活远程对象。此方法只是通知组的监视器该对象处于非活动状态。 由ActivationGroup的具体子类决定是否满足取消导出对象的额外要求。
- 参数
-
id- 对象的激活标识符 - 结果
- 如果对象已成功停用,则为true; 否则返回false。
- 异常
-
UnknownObjectException- 如果对象未知(可能已经处于非活动状态) -
RemoteException- 如果呼叫通知监视器失败 -
ActivationException- 如果组处于非活动状态 - 从以下版本开始:
- 1.2
-
activeObject
public abstract void activeObject(ActivationID id, Remote obj) throws ActivationException, UnknownObjectException, RemoteException
导出对象时调用组的activeObject方法(通过Activatable对象构造或显式调用Activatable.exportObject如果组尚未完成,则组必须通知其ActivationMonitor对象处于活动状态(通过监视器的activeObject方法)所以。- 参数
-
id- 对象的标识符 -
obj- 远程对象实现 - 异常
-
UnknownObjectException- 如果未注册对象 -
RemoteException- 如果呼叫通知监视器失败 -
ActivationException- 如果组处于非活动状态 - 从以下版本开始:
- 1.2
-
createGroup
public static ActivationGroup createGroup(ActivationGroupID id, ActivationGroupDesc desc, long incarnation) throws ActivationException
为当前VM创建并设置激活组。 只有当前未设置激活组时才能设置激活组。 当Activator启动重新创建激活组以执行传入的activate请求时,使用createGroup方法设置激活组。 在通过此方法创建ActivationSystem之前,必须先向ActivationSystem注册组。由指定的组类
ActivationGroupDesc必须的具体子类ActivationGroup,并具有公共构造两个参数:ActivationGroupID为组和MarshalledObject含有组的初始化数据(从所获得的ActivationGroupDesc。如果
ActivationGroupDesc指定的组类名称为null,则此方法的行为就像组描述符包含默认激活组实现类的名称一样。请注意,如果您的应用程序创建自己的自定义激活组,则必须为该组设置安全管理器。 否则,无法在组中激活对象。 默认设置为
SecurityManager。如果已在组VM中设置了安全管理器,则此方法首先调用安全管理器的
checkSetFactory方法。 这可能会导致SecurityException。 如果您的应用程序需要设置其他安全管理器,则必须确保该组的ActivationGroupDesc指定的策略文件授予该组设置新安全管理器所需的权限。 (注意:如果您的组下载并设置安全管理器,则必须执行此操作)。创建组后,通过调用
activeGroup方法通知ActivationSystem该组处于活动状态,该方法返回该组的ActivationMonitor。 该应用程序无需独立调用activeGroup因为这种方法需要处理。创建组后,对
currentGroupID方法的后续调用将返回该组的标识符,直到该组变为非活动状态。- 参数
-
id- 激活组的标识符 -
desc- 激活组的描述符 -
incarnation- 该组的化身编号(组初始创建时为零) - 结果
- VM的激活组
- 异常
-
ActivationException- 如果组已存在或组创建期间发生错误 -
SecurityException- 如果拒绝创建组的权限。 (注意:安全管理器checkSetFactory方法的默认实现需要RuntimePermission“setFactory”) -
UnsupportedOperationException- 当且仅当此实现不支持激活时 - 从以下版本开始:
- 1.2
- 另请参见:
-
SecurityManager.checkSetFactory()
-
currentGroupID
public static ActivationGroupID currentGroupID()
返回当前激活组的标识符。 如果此VM当前没有活动组,则返回null。- 结果
- 激活组的标识符
- 异常
-
UnsupportedOperationException- 当且仅当此实现不支持激活时 - 从以下版本开始:
- 1.2
-
setSystem
public static void setSystem(ActivationSystem system) throws ActivationException
设置VM的激活系统。 只有当前没有组处于活动状态时,才能设置激活系统。 如果未通过此调用设置激活系统,则getSystem方法尝试通过在Activator的注册表中查找名称“java.rmi.activation.ActivationSystem”来获取对ActivationSystem的引用。 默认情况下,用于查找激活系统的端口号由ActivationSystem.SYSTEM_PORT定义。 可以通过设置属性java.rmi.activation.port来覆盖此端口。如果有安全管理器,则此方法首先调用安全管理器的
checkSetFactory方法。 这可能会导致SecurityException。- 参数
-
system- 远程引用ActivationSystem - 异常
-
ActivationException- 如果已设置激活系统 -
SecurityException- 如果拒绝设置激活系统的权限。 (注意:安全管理器checkSetFactory方法的默认实现需要RuntimePermission“setFactory”) -
UnsupportedOperationException- 当且仅当此实现不支持激活时 - 从以下版本开始:
- 1.2
- 另请参见:
-
getSystem(),SecurityManager.checkSetFactory()
-
getSystem
public static ActivationSystem getSystem() throws ActivationException
返回VM的激活系统。 激活系统可以通过setSystem方法设置。 如果未通过setSystem方法设置激活系统,则getSystem方法尝试通过在Activator注册表中查找名称“java.rmi.activation.ActivationSystem”来获取对ActivationSystem的引用。 默认情况下,用于查找激活系统的端口号由ActivationSystem.SYSTEM_PORT定义。 可以通过设置属性java.rmi.activation.port来覆盖此端口。- 结果
- VM /组的激活系统
- 异常
-
ActivationException- 如果无法获取或未绑定激活系统(表示它未运行) -
UnsupportedOperationException- 当且仅当此实现不支持激活时 - 从以下版本开始:
- 1.2
- 另请参见:
-
setSystem(java.rmi.activation.ActivationSystem)
-
activeObject
protected void activeObject(ActivationID id, MarshalledObject<? extends Remote> mobj) throws ActivationException, UnknownObjectException, RemoteException
子类必须使用此受保护的方法将activeObject回调到组的监视器。 该呼叫只是转发给该组的ActivationMonitor。- 参数
-
id- 对象的标识符 -
mobj- 包含远程对象存根的编组对象 - 异常
-
UnknownObjectException- 如果未注册对象 -
RemoteException- 如果呼叫通知监视器失败 -
ActivationException- 如果发生激活错误 - 从以下版本开始:
- 1.2
-
inactiveGroup
protected void inactiveGroup() throws UnknownGroupException, RemoteException子类必须使用此受保护的方法将inactiveGroup回调到组的监视器。 该呼叫只是转发给该组的ActivationMonitor。 此外,VM的当前组设置为null。- 异常
-
UnknownGroupException- 如果组未注册 -
RemoteException- 如果呼叫通知监视器失败 - 从以下版本开始:
- 1.2
-
-