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
对象,并在创建任何ActivationDesc
之前使用ActivationGroup.createGroup
ActivationGroupDesc
被创建)。 如果您的应用程序需要使用除SecurityManager
之外的安全管理员,则在ActivativationGroupDescriptor属性列表中,您可以将java.security.manager
属性设置为要安装的安全管理器的名称。
ActivationInstantiator
, ActivationGroupDesc
, ActivationGroupID
, Serialized Form
ref
Modifier | Constructor and Description |
---|---|
protected |
ActivationGroup(ActivationGroupID groupID)
构造具有给定激活组标识符的激活组。
|
Modifier and Type | Method and Description |
---|---|
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 方法
Activatable.inactive 调用。
|
static void |
setSystem(ActivationSystem system)
设置VM的激活系统。
|
clone, exportObject, exportObject, exportObject, unexportObject
getClientHost, getLog, setLog
equals, getRef, hashCode, toString, toStub
finalize, getClass, notify, notifyAll, wait, wait, wait
newInstance
protected ActivationGroup(ActivationGroupID groupID) throws RemoteException
java.rmi.server.UnicastRemoteObject
。
groupID
- 组的标识符
RemoteException
- 如果此组无法导出
UnsupportedOperationException
- 当且仅当此实现不支持激活时
public boolean inactiveObject(ActivationID id) throws ActivationException, UnknownObjectException, RemoteException
inactiveObject
方法通过调用Activatable.inactive
方法Activatable.inactive
调用。
远程对象实现必须调用Activatable
的inactive
方法,该对象取消激活(对象认为它不再有效)。
如果对象在Activatable.inactive
时不调用Activatable.inactive
,则该对象永远不会被垃圾回收,因为该组对其创建的对象保持强烈引用。
该组的inactiveObject
方法从RMI运行时取消导出远程对象,以使对象不再能够接收传入的RMI调用。 如果对象没有挂起或执行调用,对象将只会被取消导出。 ActivationGroup
的子类必须覆盖此方法并取消导出该对象。
从RMI运行时中删除对象后,组必须通知其ActivationMonitor
(通过监视器的inactiveObject
方法)远程对象当前未处于活动状态,以便远程对象在后续激活请求时由激活程序重新激活。
该方法只是通知组的监视器对象是否处于非活动状态。 由ActivationGroup的具体子类来满足解除对象的附加要求。
id
- 对象的激活标识符
UnknownObjectException
- 如果对象未知(可能已处于非活动状态)
RemoteException
- 如果呼叫通知监视器失败
ActivationException
- 如果组不活动
public abstract void activeObject(ActivationID id, Remote obj) throws ActivationException, UnknownObjectException, RemoteException
Activatable
对象构造或显式调用
Activatable.exportObject
该组的
activeObject
方法被调用。该组必须通知其
ActivationMonitor
该对象是活动的(通过监视器的
activeObject
方法),如果该组尚未完成所以。
id
- 对象的标识符
obj
- 远程对象实现
UnknownObjectException
- 如果对象未注册
RemoteException
- 如果呼叫通知监视器失败
ActivationException
- 如果组不活动
public static ActivationGroup createGroup(ActivationGroupID id, ActivationGroupDesc desc, long incarnation) throws ActivationException
Activator
启动重新创建激活组以便执行传入的activate
请求时,使用createGroup
方法设置激活组。
A组首先必须与所登记的ActivationSystem
它可以通过这种方法来创建之前。
由指定的组类ActivationGroupDesc
必须的具体子类ActivationGroup
并具有公共构造两个参数: ActivationGroupID
为组和MarshalledObject
含有组的初始化数据(从所获得的ActivationGroupDesc
。
如果在指定的组类名ActivationGroupDesc
是null
,则此方法将像组描述符包含默认激活组实现类的名称。
请注意,如果您的应用程序创建自己的自定义激活组,则必须为该组设置安全管理器。 否则在组中无法激活对象。 默认设置为SecurityManager
。
如果组VM中已经设置了安全管理器,则该方法首先调用安全管理器的checkSetFactory
方法。 这可能会导致一个SecurityException
。 如果您的应用程序需要设置其他安全管理器,则必须确保组ActivationGroupDesc
的策略文件授予组设置新安全管理器所需的权限。 (注意:如果您的小组下载并设置了安全管理器,这将是必要的)。
在创建组后, ActivationSystem
被通知的组是通过调用活性activeGroup
方法,该方法返回ActivationMonitor
的组。 该应用程序不必调用activeGroup
,因为它是用这种方法照顾独立。
一旦创建了组,对currentGroupID
方法的后续调用将返回该组的标识符,直到组变为非活动状态。
id
- 激活组的标识符
desc
- 激活组的描述符
incarnation
- 集团的化身号码(集团初始创建时为零)
ActivationException
- 如果组已存在或组创建过程中发生错误
SecurityException
- 如果创建组的权限被拒绝。
(注意:安全管理器checkSetFactory
方法的默认实现需要RuntimePermission“setFactory”)
UnsupportedOperationException
- 当且仅当此实现不支持激活时
SecurityManager.checkSetFactory()
public static ActivationGroupID currentGroupID()
UnsupportedOperationException
- 当且仅当此实现不支持激活时
public static void setSystem(ActivationSystem system) throws ActivationException
getSystem
方法将通过查看激活器注册表中的名称“java.rmi.activation.ActivationSystem”来尝试获取对ActivationSystem的ActivationSystem
。
默认情况下,用于查找激活系统的端口号由ActivationSystem.SYSTEM_PORT
定义。
该端口可以通过设置属性java.rmi.activation.port
。
如果有安全管理员,这种方法首先调用安全管理器的checkSetFactory
方法。 这可能会导致SecurityException。
system
- 远程参考
ActivationSystem
ActivationException
- 如果激活系统已经设置
SecurityException
- 如果设置激活系统的权限被拒绝。
(注意:安全管理器checkSetFactory
方法的默认实现需要RuntimePermission“setFactory”)
UnsupportedOperationException
- 当且仅当此实现不支持激活时
getSystem()
,
SecurityManager.checkSetFactory()
public static ActivationSystem getSystem() throws ActivationException
setSystem
方法设置。
如果没有通过setSystem
方法设置激活系统,那么getSystem
方法会通过查看激活器注册表中的名称“java.rmi.activation.ActivationSystem”来尝试获得对ActivationSystem的ActivationSystem
。
默认情况下,用于查找激活系统的端口号由ActivationSystem.SYSTEM_PORT
定义。
该端口可以通过设置属性java.rmi.activation.port
。
ActivationException
- 如果无法获取或未绑定激活系统(意味着它不在运行)
UnsupportedOperationException
- 当且仅当此实现不支持激活时
setSystem(java.rmi.activation.ActivationSystem)
protected void activeObject(ActivationID id, MarshalledObject<? extends Remote> mobj) throws ActivationException, UnknownObjectException, RemoteException
activeObject
回调activeObject
。
该呼叫简单地转发给该组的ActivationMonitor
。
id
- 对象的标识符
mobj
- 包含远程对象的存根的编组对象
UnknownObjectException
- 如果对象未注册
RemoteException
- 如果呼叫通知监视器失败
ActivationException
- 如果发生激活错误
protected void inactiveGroup() throws UnknownGroupException, RemoteException
inactiveGroup
。
该呼叫简单地转发到组的ActivationMonitor
。
此外,VM的当前组设置为null。
UnknownGroupException
- 如果组未注册
RemoteException
- 如果呼叫通知监视器失败