Module  java.rmi
软件包  java.rmi.activation

Class ActivationGroup

  • All Implemented Interfaces:
    SerializableActivationInstantiatorRemote


    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包含这些属性的对象,然后创建一个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
        当对象被导出(通过 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
        创建并设置当前虚拟机的激活组。 激活组只能在当前设置时才能设置。 Activator启动重新创建激活组以便执行传入的activate请求时,使用createGroup方法设置激活组。 必须首先向ActivationSystem注册,才能通过此方法创建。

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

        如果ActivationGroupDesc指定的组类名称为null ,则该方法将表现为组描述符包含默认激活组实现类的名称。

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

        如果组VM中已经设置了安全管理器,则该方法首先调用安全管理器的checkSetFactory方法。 这可能会导致一个SecurityException 如果您的应用程序需要设置不同的安全管理器,则必须确保组ActivationGroupDesc指定的策略文件授予组必要的权限以设置新的安全管理器。 (注意:如果您的小组下载并设置了安全管理器,这将是必要的)。

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

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

        参数
        id - 激活组的标识符
        desc - 激活组的描述符
        incarnation - 组的化身数(组初始创建时为零)
        结果
        虚拟机的激活组
        异常
        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方法将通过查找激活器注册表中的名称“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方法将通过查看激活器注册表中的名称“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