|
|||||||||
摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 |
java.rmi.activation
类 ActivationGroup
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
通过以下方式之一被初始 创建:
- 一方面,为组中的第一个可激活对象创建一个不带显式
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
属性设置为想要安装的安全管理器的名称。
- 从以下版本开始:
- 1.2
- 另请参见:
-
ActivationInstantiator
,ActivationGroupDesc
,ActivationGroupID
, 序列化表格
字段摘要 |
---|
从类 java.rmi.server.RemoteObject 继承的字段 |
---|
ref |
构造方法摘要 | |
---|---|
protected |
ActivationGroup(ActivationGroupID groupID) 用给定的激活组标识符创建一个激活组。 |
方法摘要 | |
---|---|
protected void |
activeObject(ActivationID id, MarshalledObject 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 |
构造方法详细信息 |
---|
ActivationGroup
protected ActivationGroup(ActivationGroupID groupID) throws RemoteException
-
用给定的激活组标识符创建一个激活组。该组将作为一个
java.rmi.server.UnicastRemoteObject
被导出。- 参数:
-
groupID
- 组标识符 - 抛出:
-
RemoteException
- 如要组不能被导出 - 从以下版本开始:
- 1.2
方法详细信息 |
---|
inactiveObject
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
- 对象的激活标识符 - 返回:
- 如果该对象被成功地取消激活,则返回 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
-
为当前 VM 创建并设置激活组。仅当当前尚未设置激活组时才设置激活组。当
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
- 组的代号(在组初始化创建时为零) - 返回:
- 针对该 VM 的激活组
- 抛出:
-
ActivationException
- 如果组已经存在或者如果在组创建过程中发生错误 -
SecurityException
- 如果创建组的权限被拒绝。(注:安全管理器checkSetFactory
方法的默认实现需要 RuntimePermission 的 "setFactory") - 从以下版本开始:
- 1.2
- 另请参见:
-
SecurityManager.checkSetFactory()
currentGroupID
public static ActivationGroupID currentGroupID()
- 返回当前激活组的标识符。如果此 VM 当前没有任何组是活动的,则返回 null。
-
-
- 返回:
- 激活组的标识符
- 从以下版本开始:
- 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") - 从以下版本开始:
- 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
- 如果激活系统无法获得或者未绑定(意味着它没有运行) - 从以下版本开始:
- 1.2
- 另请参见:
-
setSystem(java.rmi.activation.ActivationSystem)
activeObject
protected void activeObject(ActivationID id, MarshalledObject mobj) throws ActivationException, UnknownObjectException, RemoteException
-
如果子类要进行对组监视器的
activeObject
回调,则此 protected 方法是必要的。此调用简单地转发到组的ActivationMonitor
。 -
-
- 参数:
-
id
- 对象的标识符 -
mobj
- 包含远程对象的 stub 的编组对象 - 抛出:
-
UnknownObjectException
- 如果对象未注册 -
RemoteException
- 如果调用通知监视器失败 -
ActivationException
- 如果发生激活错误 - 从以下版本开始:
- 1.2