- java.lang.Object
-
- java.rmi.server.RemoteObject
-
- java.rmi.server.RemoteServer
-
- java.rmi.server.UnicastRemoteObject
-
- java.rmi.activation.ActivationGroup
-
- All Implemented Interfaces:
-
Serializable,ActivationInstantiator,Remote
public abstract class ActivationGroup extends UnicastRemoteObject implements ActivationInstantiator
一个ActivationGroup负责在其组中创建“可激活”对象的新实例,通知其ActivationMonitor何时:其对象变为活动或非活动,或组作为一个整体变为不活动。一个
ActivationGroup最初是通过以下几种方式之一创建的:- 作为创建
ActivationDesc没有明确的ActivationGroupID用于组中的第一个可激活对象,或 - 通过
ActivationGroup.createGroup方法 - 作为激活
ActivationGroupDesc仅注册的组中的第一个对象的ActivationGroupDesc。
只有激活者才能重新创建一个
ActivationGroup。 激活器根据需要产生一个单独的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
-
-
Field Summary
-
Fields inherited from class java.rmi.server.RemoteObject
ref
-
-
构造方法摘要
构造方法 Modifier Constructor 描述 protectedActivationGroup(ActivationGroupID groupID)构造具有给定激活组标识符的激活组。
-
方法摘要
所有方法 静态方法 接口方法 抽象方法 具体的方法 Modifier and Type 方法 描述 protected voidactiveObject(ActivationID id, MarshalledObject<? extends Remote> mobj)这个受保护的方法对于子类来说使得activeObject回调到组的监视器是必要的。abstract voidactiveObject(ActivationID id, Remote obj)当对象被导出(由Activatable对象构造或显式调用到Activatable.exportObject时),将调用该组的activeObject方法。static ActivationGroupcreateGroup(ActivationGroupID id, ActivationGroupDesc desc, long incarnation)创建并设置当前虚拟机的激活组。static ActivationGroupIDcurrentGroupID()返回当前激活组的标识符。static ActivationSystemgetSystem()返回VM的激活系统。protected voidinactiveGroup()这个受保护的方法对于子类来说使inactiveGroup回调到组的监视器是必要的。booleaninactiveObject(ActivationID id)该组的inactiveObject方法通过调用Activatable.inactive方法间接调用。static voidsetSystem(ActivationSystem system)设置VM的激活系统。-
Methods inherited from interface java.rmi.activation.ActivationInstantiator
newInstance
-
Methods inherited from class java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait
-
Methods inherited from class java.rmi.server.RemoteObject
equals, getRef, hashCode, toString, toStub
-
Methods inherited from class java.rmi.server.RemoteServer
getClientHost, getLog, setLog
-
Methods inherited from class java.rmi.server.UnicastRemoteObject
clone, exportObject, exportObject, exportObject, exportObject, exportObject, unexportObject
-
-
-
-
构造方法详细信息
-
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
当对象被导出(通过Activatable对象构造或显式调用到Activatable.exportObject时,将调用该组的activeObject方法。该组必须通知其ActivationMonitor该对象是活动的(通过监视器的activeObject方法),如果该组尚未完成所以。- 参数
-
id- 对象的标识符 -
obj- 远程对象实现 - 异常
-
UnknownObjectException- 如果对象未注册 -
RemoteException- 如果呼叫通知监视器失败 -
ActivationException- 如果组不活动 - 从以下版本开始:
- 1.2
-
createGroup
public static ActivationGroup createGroup(ActivationGroupID id, ActivationGroupDesc desc, long incarnation) throws ActivationException
创建并设置当前虚拟机的激活组。 激活组只能在当前设置时才能设置。 当Activator启动重新创建激活组以便执行传入的activate请求时,使用createGroup方法设置激活组。 必须首先向ActivationSystem注册,才能通过此方法创建。由指定的组类
ActivationGroupDesc必须的具体子类ActivationGroup并具有公共构造两个参数:ActivationGroupID为组和MarshalledObject含有组的初始化数据(从所获得的ActivationGroupDesc。如果
ActivationGroupDesc指定的组类名称为null,则该方法将表现为组描述符包含默认激活组实现类的名称。请注意,如果您的应用程序创建自己的自定义激活组,则必须为该组设置安全管理器。 否则在组中无法激活对象。 默认设置为
SecurityManager。如果组VM中已经设置了安全管理器,则该方法首先调用安全管理器的
checkSetFactory方法。 这可能会导致一个SecurityException。 如果您的应用程序需要设置不同的安全管理器,则必须确保组ActivationGroupDesc指定的策略文件授予组必要的权限以设置新的安全管理器。 (注意:如果您的小组下载并设置了安全管理器,这将是必要的)。创建组后,通过调用该组返回
ActivationMonitor的activeGroup方法,通知ActivationSystem该组处于活动状态。 应用程序不需要独立调用activeGroup因为它是通过这种方法来处理的。一旦创建了组,对
currentGroupID方法的后续调用将返回该组的标识符,直到组变为非活动状态。- 参数
-
id- 激活组的标识符 -
desc- 激活组的描述符 -
incarnation- 组的化身数(组初始创建时为零) - 结果
- 虚拟机的激活组
- 异常
-
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方法将通过查找激活器注册表中的名称“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方法将通过查看激活器注册表中的名称“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
-
-