java.lang.Object java.rmi.server.RemoteObject java.rmi.server.RemoteServer java.rmi.server.UnicastRemoteObject java.rmi.activation.ActivationGroup
public abstract class ActivationGroup
ActivationGroup
负责创建组中“可激活”对象的新实例,在以下情况通知其 ActivationMonitor
:它的对象变成活动的或者不活动的,或者整个组变成不活动的。
ActivationGroup
通过以下方式之一被初始 创建:
ActivationGroupID
的 ActivationDesc
,或者 ActivationGroup.createGroup
方法 ActivationGroupDesc
被注册的组中的第一个对象。 只有激活器能重建 一个 ActivationGroup
。激活器根据需要为每个已注册的激活组生成一个单独的 VM(例如,作为一个子进程),并且将激活请求导向适当的组。它是如何生成 VM 的特定实现。一个激活组通过 ActivationGroup.createGroup
静态方法创建。createGroup
方法在创建组方面有两个需求:1) 组必须是 ActivationGroup
的一个具体子类,以及 2) 组必须具有带两个参数的构造方法:
ActivationGroupID
,以及 java.rmi.MarshalledObject
中) 组被创建后,ActivationGroup
的默认实现将在创建 ActivationGroupDesc
时用请求的属性重写系统属性,并且将设置一个 java.rmi.RMISecurityManager
作为默认的系统安全管理器。如果应用程序需要对象在组中被激活时设置特定的属性,则应用程序应当创建一个特殊的包含这些属性的 Properties
对象,然后使用此 Properties
对象创建一个 ActivationGroupDesc
,并且在创建任何 ActivationDesc
之前使用 ActivationGroup.createGroup
(在默认的 ActivationGroupDesc
被创建之前)。如果应用程序需要使用安全管理器而不是 java.rmi.RMISecurityManager
,则在 ActivativationGroupDescriptor 属性列表中可以将 java.security.manager
属性设置为想要安装的安全管理器的名称。
ActivationInstantiator
,
ActivationGroupDesc
,
ActivationGroupID
,
序列化表格
字段摘要 |
---|
从类 java.rmi.server.RemoteObject 继承的字段 |
---|
ref |
构造方法摘要 | |
---|---|
protected |
ActivationGroup(ActivationGroupID groupID) 用给定的激活组标识符创建一个激活组。 |
方法摘要 | |
---|---|
protected void |
activeObject(ActivationID id, MarshalledObject<? extends Remote> mobj) 如果子类要进行对组监视器的 activeObject 回调,则此 protected 方法是必要的。 |
abstract void |
activeObject(ActivationID id, Remote obj) 当对象被导出时(通过 Activatable 对象的构造或者通过显式调用 Activatable.exportObject ),组的 activeObject 方法被调用。 |
static ActivationGroup |
createGroup(ActivationGroupID id, ActivationGroupDesc desc, long incarnation) 为当前 VM 创建并设置激活组。 |
static ActivationGroupID |
currentGroupID() 返回当前激活组的标识符。 |
static ActivationSystem |
getSystem() 返回该 VM 的激活系统。 |
protected void |
inactiveGroup() 如果子类要进行对组监视器的 inactiveGroup 回调,则此 protected 方法是必要的。 |
boolean |
inactiveObject(ActivationID id) 通过调用 Activatable.inactive 方法间接地调用组的 inactiveObject 方法。 |
static void |
setSystem(ActivationSystem system) 设置该 VM 的激活系统。 |
从类 java.rmi.server.UnicastRemoteObject 继承的方法 |
---|
clone, exportObject, exportObject, exportObject, unexportObject |
从类 java.rmi.server.RemoteServer 继承的方法 |
---|
getClientHost, getLog, setLog |
从类 java.rmi.server.RemoteObject 继承的方法 |
---|
equals, getRef, hashCode, toString, toStub |
从类 java.lang.Object 继承的方法 |
---|
finalize, getClass, notify, notifyAll, wait, wait, wait |
从接口 java.rmi.activation.ActivationInstantiator 继承的方法 |
---|
newInstance |
构造方法详细信息 |
---|
protected ActivationGroup(ActivationGroupID groupID) throws RemoteException
java.rmi.server.UnicastRemoteObject
被导出。
groupID
- 组标识符
RemoteException
- 如要组不能被导出
方法详细信息 |
---|
public boolean inactiveObject(ActivationID id) throws ActivationException, UnknownObjectException, RemoteException
Activatable.inactive
方法间接地调用组的
inactiveObject
方法。当该对象不活动(对象认为它不再活动)时,远程对象实现必须调用
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
方法来设置。在组可以通过此方法创建之前,该组必须首先通过
ActivationSystem
注册。
由 ActivationGroupDesc
指定的组类必须是 ActivationGroup
的具体子类,并且具有一个公共的带两个参数的构造方法:组的 ActivationGroupID
和包含组的初始化数据的 MarshalledObject
(从 ActivationGroupDesc
获得)。
如果 ActivationGroupDesc
中指定的组类名为 null
,则此方法将像组描述符包含默认激活组实现类的名称一样执行。
注意,如果应用程序创建其自己的自定义激活组,则必须为该组设置安全管理器。否则,该组中的对象不能被激活,默认设置为 java.rmi.RMISecurityManager
。
如果在该组的 VM 中已经设置安全管理器,此方法首先调用该安全管理器的 checkSetFactory
方法。这可能会导致抛出 SecurityException
。如果应用程序需要设置不同的安全管理器,则必须确保由组的 ActivationGroupDesc
所指定的策略文件授予该组必要的权限来设置一个新的安全管理器。(注:如果组下载并设置一个安全管理器,这将是必要的)。
在组被创建之后,通过调用 activeGroup
方法通知 ActivationSystem
该组是活动的,返回该组的 ActivationMonitor
。应用程序无需独立调用 activeGroup
,因为它通过此方法来维护。
一旦组被创建,对 currentGroupID
方法的后续调用将返回此组的标识符,直到组变为不活动的。
id
- 激活组的标识符
desc
- 激活组的描述符
incarnation
- 组的代号(在组初始化创建时为零)
ActivationException
- 如果组已经存在或者如果在组创建过程中发生错误
SecurityException
- 如果创建组的权限被拒绝。(注:安全管理器
checkSetFactory
方法的默认实现需要 RuntimePermission 的 "setFactory")
SecurityManager.checkSetFactory()
public static ActivationGroupID currentGroupID()
public static void setSystem(ActivationSystem system) throws ActivationException
getSystem
方法尝试通过在 Activator 注册表中查找名称 "java.rmi.activation.ActivationSystem" 来获取对
ActivationSystem
的引用。默认情况下,用于查找该激活系统的端口号由
ActivationSystem.SYSTEM_PORT
定义。此端口可通过设置属性
java.rmi.activation.port
而被重写。
如果存在安全管理器,则此方法首先调用安全管理器的 checkSetFactory
方法。这可能会导致抛出 SecurityException 异常。
system
- 对
ActivationSystem
的远程引用
ActivationException
- 如果已经设置激活系统
SecurityException
- 如果设置激活系统的权限被拒绝。(注:安全管理器
checkSetFactory
方法的默认实现需要 RuntimePermission 的 "setFactory")
getSystem()
,
SecurityManager.checkSetFactory()
public static ActivationSystem getSystem() throws ActivationException
setSystem
方法设置。如果激活系统未通过
setSystem
方法设置,则
getSystem
方法尝试通过在 Activator 注册表中查找名称 "java.rmi.activation.ActivationSystem" 来获取对
ActivationSystem
的引用。默认情况下,用于查找该激活系统的端口号由
ActivationSystem.SYSTEM_PORT
定义。此端口可通过设置属性
java.rmi.activation.port
而被重写。
ActivationException
- 如果激活系统无法获得或者未绑定(意味着它没有运行)
setSystem(java.rmi.activation.ActivationSystem)
protected void activeObject(ActivationID id, MarshalledObject<? extends Remote> mobj) throws ActivationException, UnknownObjectException, RemoteException
activeObject
回调,则此 protected 方法是必要的。此调用简单地转发到组的
ActivationMonitor
。
id
- 对象的标识符
mobj
- 包含远程对象的 stub 的编组对象
UnknownObjectException
- 如果对象未注册
RemoteException
- 如果调用通知监视器失败
ActivationException
- 如果发生激活错误
protected void inactiveGroup() throws UnknownGroupException, RemoteException
inactiveGroup
回调,则此 protected 方法是必要的。此调用简单地转发到组的
ActivationMonitor
。同时,该 VM 的当前组被设置为 null。
UnknownGroupException
- 如果组未注册
RemoteException
- 如果调用通知监视器失败