- 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 描述 protected
ActivationGroup(ActivationGroupID groupID)
构造具有给定激活组标识符的激活组。
-
方法摘要
所有方法 静态方法 接口方法 抽象方法 具体的方法 Modifier and Type 方法 描述 protected void
activeObject(ActivationID id, MarshalledObject<? extends Remote> mobj)
这个受保护的方法对于子类来说使得activeObject
回调到组的监视器是必要的。abstract void
activeObject(ActivationID id, Remote obj)
当对象被导出(由Activatable
对象构造或显式调用到Activatable.exportObject
时),将调用该组的activeObject
方法。static ActivationGroup
createGroup(ActivationGroupID id, ActivationGroupDesc desc, long incarnation)
创建并设置当前虚拟机的激活组。static ActivationGroupID
currentGroupID()
返回当前激活组的标识符。static ActivationSystem
getSystem()
返回VM的激活系统。protected void
inactiveGroup()
这个受保护的方法对于子类来说使inactiveGroup
回调到组的监视器是必要的。boolean
inactiveObject(ActivationID id)
该组的inactiveObject
方法通过调用Activatable.inactive
方法间接调用。static void
setSystem(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
-
-