JavaTM 2 Platform
Standard Ed. 6

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 通過以下方式之一被初始 創建:

只有啟動器能重建 一個 ActivationGroup。啟動器根據需要為每個已註冊的啟動組產生一個單獨的 VM(例如,作為一個子進程),並且將啟動請求導向適當的組。它是如何產生 VM 的特定實作。一個啟動組通過 ActivationGroup.createGroup 靜態方法創建。createGroup 方法在創建組方面有兩個需求:1) 組必須是 ActivationGroup 的一個具體子類別,以及 2) 組必須具有帶兩個參數的建構子:

組被創建後,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<? 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
 

建構子詳細資訊

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 方法。當該物件不活動(物件認為它不再活動)時,遠端物件實作必須調用 Activatableinactive 方法。當物件不活動時,如果物件未調用 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<? extends Remote> mobj)
                     throws ActivationException,
                            UnknownObjectException,
                            RemoteException
如果子類別要進行對組監視器的 activeObject 回調,則此 protected 方法是必要的。此調用簡單地轉發到組的 ActivationMonitor

參數:
id - 物件的標識符
mobj - 套件含遠端物件的 stub 的編組物件
拋出:
UnknownObjectException - 如果物件未註冊
RemoteException - 如果調用通知監視器失敗
ActivationException - 如果發生啟動錯誤
從以下版本開始:
1.2

inactiveGroup

protected void inactiveGroup()
                      throws UnknownGroupException,
                             RemoteException
如果子類別要進行對組監視器的 inactiveGroup 回調,則此 protected 方法是必要的。此調用簡單地轉發到組的 ActivationMonitor。同時,該 VM 的當前組被設置為 null。

拋出:
UnknownGroupException - 如果組未註冊
RemoteException - 如果調用通知監視器失敗
從以下版本開始:
1.2

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only