org.omg.PortableServer

org.omg.PortableServer是一個計算機軟體。

軟體包 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_IDorg/omg/PortableServer/ID_ASSIGNMENT_POLICY_ID.java。
ID_UNIQUENESS_POLICY_IDorg/omg/PortableServer/ID_UNIQUENESS_POLICY_ID.java。
IdAssignmentPolicyIdAssignmentPolicy 指定創建的 POA 中的 Object Id 是由應用程式還是由 ORB 生成的。
IdAssignmentPolicyOperationsIdAssignmentPolicy 指定創建的 POA 中的 Object Id 是由應用程式還是由 ORB 生成的。
IdUniquenessPolicyIdUniquenessPolicy 指定已創建的 POA 中激活的 servant 是否必須具有唯一的對象身份。
IdUniquenessPolicyOperationsIdUniquenessPolicy 指定已創建的 POA 中激活的 servant 是否必須具有唯一的對象身份。
IMPLICIT_ACTIVATION_POLICY_IDorg/omg/PortableServer/IMPLICIT_ACTIVATION_POLICY_ID.java。
ImplicitActivationPolicy此策略指定已創建的 POA 中是否支持隱式激活 servant。
ImplicitActivationPolicyOperations此策略指定已創建的 POA 中是否支持隱式激活 servant。
LIFESPAN_POLICY_IDorg/omg/PortableServer/LIFESPAN_POLICY_ID.java。
LifespanPolicyLifespanPolicy 指定已創建 POA 中實現的對象的生存期。
LifespanPolicyOperationsLifespanPolicy 指定已創建 POA 中實現的對象的生存期。
POAPOA 對象管理對象集合的實現。
POAManager每個 POA 對象都有一個關聯的 POAManager 對象。
POAManagerOperations每個 POA 對象具有一個關聯的 POAManager 對象。
POAOperationsPOA 對象管理對象集合的實現。
REQUEST_PROCESSING_POLICY_IDorg/omg/PortableServer/REQUEST_PROCESSING_POLICY_ID.java。
RequestProcessingPolicy此策略指定已創建的 POA 處理請求的方式。
RequestProcessingPolicyOperations此策略指定已創建的 POA 處理請求的方式。
SERVANT_RETENTION_POLICY_IDorg/omg/PortableServer/SERVANT_RETENTION_POLICY_ID.java。
ServantActivatorPOA 具有 RETAIN 策略時使用 ServantActivator 這種 servant 管理器。
ServantActivatorOperationsPOA 具有 RETAIN 策略時使用 ServantActivator 這種 servant 管理器。
ServantLocator當 POA 具有 NON_RETAIN 策略時,使用 ServantLocator 這種 servant 管理器。
ServantLocatorOperations當 POA 具有 NON_RETAIN 策略時,使用 ServantLocator 這種 servant 管理器。
ServantManagerservant 管理器提供一個 POA,該 POA 在接受以非激活的對象為目標的請求時能夠根據需要激活對象。
ServantManagerOperationsservant 管理器提供一個 POA,該 POA 在接受以非激活的對象為目標的請求時能夠根據需要激活對象。
ServantRetentionPolicy此策略指定已創建的 POA 是否在 Active Object Map 中保留激活的 servant。
ServantRetentionPolicyOperations此策略指定已創建的 POA 是否在 Active Object Map 中保留激活的 servant。
THREAD_POLICY_IDorg/omg/PortableServer/THREAD_POLICY_ID.java。
ThreadPolicyThreadPolicy 指定已創建的 POA 所使用的執行緒模型 (threading model)。
ThreadPolicyOperationsThreadPolicy 指定與已創建的 POA 一起使用的執行緒模型 (threading model)。

類摘要

_ServantActivatorStub當 POA 具有 RETAIN 策略時,它使用 ServantActivator 這種 servant 管理器。
_ServantLocatorStubPOA 具有 NON_RETAIN 策略時將使用 ServantLocator 這種 servant 管理器。
Currenthelper從 CORBA::Current 派生的 PortableServer::Current 接口,它提供一些方法實現,這些實現能夠訪問調用方法的對象的身份。
DynamicImplementation允許動態處理對象調用。
ForwardRequestHelperorg/omg/PortableServer/ForwardRequestHelper.java。
IdAssignmentPolicyValueIdAssignmentPolicyValue 可以具有以下值。
IdUniquenessPolicyValueIdUniquenessPolicyValue 可以具有以下值。
ImplicitActivationPolicyValueImplicitActivationPolicyValue 具有以下語義。
LifespanPolicyValueLifespanPolicyValue 可以具有以下值。
POAHelperPOA 對象管理對象集合的實現。
RequestProcessingPolicyValueRequestProcessingPolicyValue 可以具有以下值。
Servant定義本機 Servant 類型。
ServantActivatorHelperPOA 具有 RETAIN 策略時使用 ServantActivator 這種 servant 管理器。
ServantActivatorPOAPOA 具有 RETAIN 策略時使用 ServantActivator 這種 servant 管理器。
ServantLocatorHelperPOA 具有 NON_RETAIN 策略時使用 ServantLocator 這種 servant 管理器。
ServantLocatorPOAPOA 具有 NON_RETAIN 策略時使用 ServantLocator 這種 servant 管理器。
ServantRetentionPolicyValueServantRetentionPolicyValue 可以具有以下值。
ThreadPolicyValueThreadPolicyValue 可以具有以下值。

異常摘要

ForwardRequestorg/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

相關詞條

相關搜尋

熱門詞條

聯絡我們