|
JavaTM Platform Standard Ed. 6 |
|||||||||
| 上一个类 下一个类 | 框架 无框架 | |||||||||
| 摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 | |||||||||
java.lang.Objectjava.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 - 如果调用通知监视器失败
|
JavaTM Platform Standard Ed. 6 |
|||||||||
| 上一个类 下一个类 | 框架 无框架 | |||||||||
| 摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 | |||||||||
版权所有 2007 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策。