模块  java.rmi
软件包  java.rmi.activation

Class ActivationGroup

  • 实现的所有接口
    SerializableActivationInstantiatorRemote

    public abstract class ActivationGroup
    extends UnicastRemoteObject
    implements ActivationInstantiator
    ActivationGroup负责在其组中创建“可激活”对象的新实例,在以下情况下通知其ActivationMonitor :其对象变为活动或非活动,或整个组变为非活动状态。

    ActivationGroup 最初是通过以下几种方式之一创建的:

    • 作为为组中的第一个可激活对象创建ActivationDesc而没有显式ActivationGroupID ,或者
    • 通过ActivationGroup.createGroup方法
    • 作为激活ActivationGroupDesc仅注册的组中的第一个对象的ActivationGroupDesc

    只有激活器才能重建 ActivationGroup 激活器根据需要为每个已注册的激活组生成单独的VM(例如,作为子进程),并将激活请求定向到适当的组。 具体实现如何生成VM。 通过ActivationGroup.createGroup静态方法创建激活组。 createGroup方法对要创建的组有两个要求:1)组必须是ActivationGroup的具体子类,以及2)组必须具有带两个参数的构造函数:

    • 该集团的ActivationGroupID ,和
    • 组的初始化数据(在java.rmi.MarshalledObject

    当创建的默认实现ActivationGroup将覆盖与性能的系统属性要求其时ActivationGroupDesc创建,并会设置一个SecurityManager作为默认的系统安全管理。 如果您的应用程序要求当对象在组中被激活时设置特定的属性,应用程序应该创建一个特殊Properties包含这些属性的对象,然后创建一个ActivationGroupDescProperties对象,并使用ActivationGroup.createGroup创建任何之前ActivationDesc默认前S( ActivationGroupDesc已创建)。 如果您的应用程序需要使用SecurityManager以外的安全管理器,则可以在ActivativationGroupDescriptor属性列表中将java.security.manager属性设置为您要安装的安全管理器的名称。

    从以下版本开始:
    1.2
    另请参见:
    ActivationInstantiatorActivationGroupDescActivationGroupIDSerialized Form
    • 构造方法详细信息

      • 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方法。 当该对象停用时(对象认为它不再处于活动状态),远程对象实现必须调用Activatableinactive方法。 如果对象在取消激活时未调用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
        导出对象时调用组的 activeObject方法(通过 Activatable对象构造或显式调用 Activatable.exportObject如果组尚未完成,则组必须通知其 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之前,必须先向ActivationSystem注册组。

        由指定的组类ActivationGroupDesc必须的具体子类ActivationGroup ,并具有公共构造两个参数: ActivationGroupID为组和MarshalledObject含有组的初始化数据(从所获得的ActivationGroupDesc

        如果ActivationGroupDesc指定的组类名称为null ,则此方法的行为就像组描述符包含默认激活组实现类的名称一样。

        请注意,如果您的应用程序创建自己的自定义激活组,则必须为该组设置安全管理器。 否则,无法在组中激活对象。 默认设置为SecurityManager

        如果已在组VM中设置了安全管理器,则此方法首先调用安全管理器的checkSetFactory方法。 这可能会导致SecurityException 如果您的应用程序需要设置其他安全管理器,则必须确保该组的ActivationGroupDesc指定的策略文件授予该组设置新安全管理器所需的权限。 (注意:如果您的组下载并设置安全管理器,则必须执行此操作)。

        创建组后,通过调用activeGroup方法通知ActivationSystem该组处于活动状态,该方法返回该组的ActivationMonitor 该应用程序无需独立调用activeGroup因为这种方法需要处理。

        创建组后,对currentGroupID方法的后续调用将返回该组的标识符,直到该组变为非活动状态。

        参数
        id - 激活组的标识符
        desc - 激活组的描述符
        incarnation - 该组的化身编号(组初始创建时为零)
        结果
        VM的激活组
        异常
        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方法尝试通过在Activator的注册表中查找名称“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方法尝试通过在Activator注册表中查找名称“java.rmi.activation.ActivationSystem”来获取对ActivationSystem的引用。 默认情况下,用于查找激活系统的端口号由ActivationSystem.SYSTEM_PORT定义。 可以通过设置属性java.rmi.activation.port来覆盖此端口。
        结果
        VM /组的激活系统
        异常
        ActivationException - 如果无法获取或未绑定激活系统(表示它未运行)
        UnsupportedOperationException - 当且仅当此实现不支持激活时
        从以下版本开始:
        1.2
        另请参见:
        setSystem(java.rmi.activation.ActivationSystem)
      • inactiveGroup

        protected void inactiveGroup()
                              throws UnknownGroupException,
                                     RemoteException
        子类必须使用此受保护的方法将inactiveGroup回调到组的监视器。 该呼叫只是转发给该组的ActivationMonitor 此外,VM的当前组设置为null。
        异常
        UnknownGroupException - 如果组未注册
        RemoteException - 如果呼叫通知监视器失败
        从以下版本开始:
        1.2