- 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
-
-
构造方法摘要
构造方法 变量 构造器 描述 protected
ActivationGroup(ActivationGroupID groupID)
使用给定的激活组标识符构造激活组。
-
方法摘要
所有方法 静态方法 实例方法 抽象方法 具体的方法 变量和类型 方法 描述 protected void
activeObject(ActivationID id, MarshalledObject<? extends Remote> mobj)
子类必须使用此受保护的方法将activeObject
回调到组的监视器。abstract void
activeObject(ActivationID id, Remote obj)
导出对象时调用组的activeObject
方法(通过Activatable
对象构造或显式调用Activatable.exportObject
。static ActivationGroup
createGroup(ActivationGroupID id, ActivationGroupDesc desc, long incarnation)
为当前VM创建并设置激活组。static ActivationGroupID
currentGroupID()
返回当前激活组的标识符。static ActivationSystem
getSystem()
返回VM的激活系统。protected void
inactiveGroup()
子类必须使用此受保护的方法将inactiveGroup
回调到组的监视器。boolean
inactiveObject(ActivationID id)
该集团的inactiveObject
方法是通过对呼叫间接调用Activatable.inactive
方法。static void
setSystem(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
-
-