軟體包 org.omg.PortableServer 的描述
提供一些類和接口,用來生成跨多個供應商 ORB 的可移植應用程式的伺服器端。在 Java 中,基於可移植對象適配器(Portable Object Adaptor,POA)的動態框架接口(Dynamic Skeleton Interface,DSI)servant 繼承自標準 DynamicImplementation 類,而該類繼承自 Servant 類。本機 Servant 類型由 POA 的 PortableServer 模組定義。在 Java 中,Servant 類型被映射到 Java org.omg.PortableServer.Servant 類。它充當所有 POA servant 實現的基類,提供許多可由應用程式員調用的方法,以及可由 POA 本身調用(也可由用戶重寫)以控制 servant 行為各方面的方法。
包規範
有關 Java 2 平台、標準版 v.1.4 遵守的官方 OMG 規範的受支持部分的明確列表,請參閱 Official Specifications for CORBA support in J2SE 1.4。接口摘要
AdapterActivator | 一個適配器激活器,它提供具有隨需創建子 POA 功能的 POA。 |
AdapterActivatorOperations | 一個適配器激活器,它提供具有隨需創建子 POA 功能的 POA。 |
Current | 從 CORBA::Current 派生的 PortableServer::Current 接口,它提供一些方法實現,這些實現能夠訪問調用方法的對象的身份。 |
CurrentOperations | 從 CORBA::Current 中派生的 PortableServer::Current 接口,它提供一些能夠訪問調用方法的對象身份的方法實現。 |
ID_ASSIGNMENT_POLICY_ID | org/omg/PortableServer/ID_ASSIGNMENT_POLICY_ID.java。 |
ID_UNIQUENESS_POLICY_ID | org/omg/PortableServer/ID_UNIQUENESS_POLICY_ID.java。 |
IdAssignmentPolicy | IdAssignmentPolicy 指定創建的 POA 中的 Object Id 是由應用程式還是由 ORB 生成的。 |
IdAssignmentPolicyOperations | IdAssignmentPolicy 指定創建的 POA 中的 Object Id 是由應用程式還是由 ORB 生成的。 |
IdUniquenessPolicy | IdUniquenessPolicy 指定已創建的 POA 中激活的 servant 是否必須具有唯一的對象身份。 |
IdUniquenessPolicyOperations | IdUniquenessPolicy 指定已創建的 POA 中激活的 servant 是否必須具有唯一的對象身份。 |
IMPLICIT_ACTIVATION_POLICY_ID | org/omg/PortableServer/IMPLICIT_ACTIVATION_POLICY_ID.java。 |
ImplicitActivationPolicy | 此策略指定已創建的 POA 中是否支持隱式激活 servant。 |
ImplicitActivationPolicyOperations | 此策略指定已創建的 POA 中是否支持隱式激活 servant。 |
LIFESPAN_POLICY_ID | org/omg/PortableServer/LIFESPAN_POLICY_ID.java。 |
LifespanPolicy | LifespanPolicy 指定已創建 POA 中實現的對象的生存期。 |
LifespanPolicyOperations | LifespanPolicy 指定已創建 POA 中實現的對象的生存期。 |
POA | POA 對象管理對象集合的實現。 |
POAManager | 每個 POA 對象都有一個關聯的 POAManager 對象。 |
POAManagerOperations | 每個 POA 對象具有一個關聯的 POAManager 對象。 |
POAOperations | POA 對象管理對象集合的實現。 |
REQUEST_PROCESSING_POLICY_ID | org/omg/PortableServer/REQUEST_PROCESSING_POLICY_ID.java。 |
RequestProcessingPolicy | 此策略指定已創建的 POA 處理請求的方式。 |
RequestProcessingPolicyOperations | 此策略指定已創建的 POA 處理請求的方式。 |
SERVANT_RETENTION_POLICY_ID | org/omg/PortableServer/SERVANT_RETENTION_POLICY_ID.java。 |
ServantActivator | POA 具有 RETAIN 策略時使用 ServantActivator 這種 servant 管理器。 |
ServantActivatorOperations | POA 具有 RETAIN 策略時使用 ServantActivator 這種 servant 管理器。 |
ServantLocator | 當 POA 具有 NON_RETAIN 策略時,使用 ServantLocator 這種 servant 管理器。 |
ServantLocatorOperations | 當 POA 具有 NON_RETAIN 策略時,使用 ServantLocator 這種 servant 管理器。 |
ServantManager | servant 管理器提供一個 POA,該 POA 在接受以非激活的對象為目標的請求時能夠根據需要激活對象。 |
ServantManagerOperations | servant 管理器提供一個 POA,該 POA 在接受以非激活的對象為目標的請求時能夠根據需要激活對象。 |
ServantRetentionPolicy | 此策略指定已創建的 POA 是否在 Active Object Map 中保留激活的 servant。 |
ServantRetentionPolicyOperations | 此策略指定已創建的 POA 是否在 Active Object Map 中保留激活的 servant。 |
THREAD_POLICY_ID | org/omg/PortableServer/THREAD_POLICY_ID.java。 |
ThreadPolicy | ThreadPolicy 指定已創建的 POA 所使用的執行緒模型 (threading model)。 |
ThreadPolicyOperations | ThreadPolicy 指定與已創建的 POA 一起使用的執行緒模型 (threading model)。 |
類摘要
_ServantActivatorStub | 當 POA 具有 RETAIN 策略時,它使用 ServantActivator 這種 servant 管理器。 |
_ServantLocatorStub | POA 具有 NON_RETAIN 策略時將使用 ServantLocator 這種 servant 管理器。 |
Currenthelper | 從 CORBA::Current 派生的 PortableServer::Current 接口,它提供一些方法實現,這些實現能夠訪問調用方法的對象的身份。 |
DynamicImplementation | 允許動態處理對象調用。 |
ForwardRequestHelper | org/omg/PortableServer/ForwardRequestHelper.java。 |
IdAssignmentPolicyValue | IdAssignmentPolicyValue 可以具有以下值。 |
IdUniquenessPolicyValue | IdUniquenessPolicyValue 可以具有以下值。 |
ImplicitActivationPolicyValue | ImplicitActivationPolicyValue 具有以下語義。 |
LifespanPolicyValue | LifespanPolicyValue 可以具有以下值。 |
POAHelper | POA 對象管理對象集合的實現。 |
RequestProcessingPolicyValue | RequestProcessingPolicyValue 可以具有以下值。 |
Servant | 定義本機 Servant 類型。 |
ServantActivatorHelper | POA 具有 RETAIN 策略時使用 ServantActivator 這種 servant 管理器。 |
ServantActivatorPOA | POA 具有 RETAIN 策略時使用 ServantActivator 這種 servant 管理器。 |
ServantLocatorHelper | POA 具有 NON_RETAIN 策略時使用 ServantLocator 這種 servant 管理器。 |
ServantLocatorPOA | POA 具有 NON_RETAIN 策略時使用 ServantLocator 這種 servant 管理器。 |
ServantRetentionPolicyValue | ServantRetentionPolicyValue 可以具有以下值。 |
ThreadPolicyValue | ThreadPolicyValue 可以具有以下值。 |
異常摘要
ForwardRequest | org/omg/PortableServer/ForwardRequest.java。 |
與 POA 相關的接口
PortableServer 模組定義以下與 POA 相關的接口:POA
POAManager
ServantManager
ServantActivator
ServantLocator
AdapterActivator
ThreadPolicy
LifespanPolicy
IdUniquenessPolicy
IdAssignmentPolicy
ImplicitActivationPolicy
ServantRetentionPolicy
RequestProcessingPolicy
Current
此外,POA 還定義 Servant 本機類型。
操作類
上文列出的每個接口都有一個關聯的 Operations 接口。Operations 接口由 idlj 編譯器生成,其中包含一些方法簽名,用於在與其關聯的接口中定義的方法。Operations 接口可以通過客戶端和伺服器訪問,而其關聯的接口只能通過客戶端調用。值類
以後綴 PolicyValue 結尾的類提供了 create_POA 調用所使用的值,該調用可設定 POA 的策略。參見以下用來示範的樣本代碼。PolicyValue 檔案包括以下內容:
IdAssignmentPolicyValue
IdUniquenessPolicyValue
ImplicitActivationPolicyValue
LifespanPolicyValue
RequestProcessingPolicyValue
ServantRetentionPolicyValue
ThreadPolicyValue
Helper 類
Helper 類是為 OMG IDL 接口中所有用戶定義類型生成的,提供操作這些類型所需的靜態方法。Helper 類中只有一種供應用程式員使用的方法。narrow 方法。只有 IDL 接口所映射的 Java 接口才有包含 narrow 方法的 helper 類,因此在 PortableServer 包中,只有以下類才具有 narrow 方法:ForwardRequestHelper
ServantActivatorHelper
ServantLocatorHelper
POA 類
POA 類用於實現 ServantActivator 或 ServantLocator。異常
ForwardRequest 異常指示 ORB 負責將當前請求和後續 ForwardRequest 請求傳遞給異常的 forward_reference 成員所表示的對象。應用程式員所實現的接口
PortableServer 執行的大部分操作對用戶是透明的。因此程式設計師將只能使用一小部分上述接口。剩餘的接口將由 ORB 實現提供。應用程式員所需的接口如下:
AdapterActivator
適配器激活器與 POA 關聯。適配器激活器提供具有隨需創建子 POA 功能的 POA。產生這一需求可能是接受指定子 POA(或其中一個子 POA)的請求所帶來的副作用,調用 find_POA 時將 activate 參數值設定為 TRUE 也需要創建子 POA。創建所有所需 POA 的套用伺服器在剛開始執行時不需要使用或提供適配器激活器;只有在請求處理期間需要創建 POA 時才有必要這樣做。
ServantLocator
當 POA 具有 NON_RETAIN 策略時,使用 ServantLocator 這種 servant 管理器。
ServantActivator
當 POA 具有 RETAIN 策略時,使用 ServantActivator 這種 servant 管理器。
org.omg.PortableServer.ServantLocatorPackage 包
此包提供一個 CookieHolder 類,將 Cookie 類型作為 out 參數傳遞。CookieHolder 類與其他基本類型的 holder 類完全一樣。
相關文檔
有關 Java IDL 概述,請參見:Java IDL 主頁。
代碼示例
實例伺服器代碼import javax.naming.InitialContext;
import javax.naming.Context;
import javax.rmi.PortableRemoteObject ;
import com.sun.corba.se.impl.poa.POAORB;
import org.omg.PortableServer.*;
import java.util.*;
import org.omg.CORBA.*;
import javax.rmi.CORBA.Stub;
import javax.rmi.CORBA.Util;
public class HelloServer {
public HelloServer(String[] args) {
try {
Properties p = System.getProperties();
// p.put("org.omg.CORBA.ORBClass", "com.sun.corba.ee.internal.POA.POAORB");
ORB orb = ORB.init( args, p );
POA rootPOA = (POA)orb.resolve_initial_references("RootPOA");
Policy[] tpolicy = new Policy[3];
tpolicy[0] = rootPOA.create_lifespan_policy(
LifespanPolicyValue.TRANSIENT );
tpolicy[1] = rootPOA.create_request_processing_policy(
RequestProcessingPolicyValue.USE_ACTIVE_OBJECT_MAP_ONLY );
tpolicy[2] = rootPOA.create_servant_retention_policy(
ServantRetentionPolicyValue.RETAIN);
POA tpoa = rootPOA.create_POA("MyTransientPOA", null, tpolicy);
String ObjectId = "MyObjectId";
byte[] OID = ObjectId.getBytes();
org.omg.CORBA.Object obj = tpoa.create_reference_with_id(oid,
new _HelloImpl_Tie()._all_interfaces(tpoa, oid)[0]);
HelloInterface helloRef = (HelloInterface)PortableRemoteObject.narrow(
obj, HelloInterface.class );
Context initialNamingContext = new InitialContext();
initialNamingContext.rebind("HelloService", helloRef);
System.out.println("Hello Server: Ready...");
orb.run();
} catch (Exception e) {
System.out.println("Trouble:" + e);
e.printStackTrace();
}
}
public static void main(String args[]) {
new HelloServer( args );
}
}
從以下版本開始:
1.4