モジュール java.corba

パッケージ org.omg.PortableServer

クラスとインタフェースを提供し、アプリケーションのサーバー側を複数ベンダー間ORBで移植できるようにします。

Javaでは、POA (Portable Object Adaptor)ベースのDSI (Dynamic Skeleton Interface)サーバントは、標準のDynamicImplementationクラスから継承します。これは、Servantクラスから継承しています。 ネイティブなServant型は、POAのPortableServerモジュールによって定義されます。 Javaでは、Servant型はJavaのorg.omg.PortableServer.Servantクラスにマップされます。 このクラスは、すべてのPOAサーバント実装の基底クラスとして機能し、アプリケーション・プログラマが呼び出すことのできるいくつかのメソッドのほかに、POAそのものによって呼び出され、サーバントの動作を制御するためにユーザーがオーバーライドできるメソッドも提供します。

パッケージの仕様

Java(TM) Platform, Standard Edition 6が準拠する公式のOMG仕様のサポート・セクションの正確なリストは、「Java(TM) SE 6での正式なCORBAサポート仕様」を参照してください。

POA関連のインタフェース

PortableServerモジュールは、次のPOA関連のインタフェースを定義します。

  • POA
  • POAManager
  • ServantManager
  • ServantActivator
  • ServantLocator
  • AdapterActivator
  • ThreadPolicy
  • LifespanPolicy
  • IdUniquenessPolicy
  • IdAssignmentPolicy
  • ImplicitActivationPolicy
  • ServantRetentionPolicy
  • RequestProcessingPolicy
  • Current

また、POAはServantネイティブ型も定義します。

オペレーション・クラス

上記の各インタフェースには、Operationsインタフェースが関連付けられています。 Operationsインタフェースは、idljコンパイラによって生成され、それに関連付けられたインタフェースに定義されているメソッドのメソッド・シグニチャを格納します。 Operationsインタフェースはクライアントとサーバーの両方からアクセスできますが、それに関連付けられたインタフェースはクライアントからしか呼び出せません。

値クラス

接尾辞PolicyValueで終わるクラスは、POAのポリシーを設定するcreate_POA呼出しに使用される値を提供します。 デモンストレーションについては、次のコード例を参照してください。 PolicyValueファイルには、次のものがあります。
  • IdAssignmentPolicyValue
  • IdUniquenessPolicyValue
  • ImplicitActivationPolicyValue
  • LifespanPolicyValue
  • RequestProcessingPolicyValue
  • ServantRetentionPolicyValue
  • ThreadPolicyValue

ヘルパー・クラス

OMG IDLインタフェースのすべてのユーザー定義型で生成されるヘルパー・クラスは、ユーザー定義型の操作に必要なstaticメソッドを提供します。 ヘルパー・クラスには、アプリケーション・プログラマが使用するメソッドが1つだけあります(narrowメソッド)。 IDLインタフェースからマップされるJavaインタフェースのみが、narrowメソッドを含むヘルパー・クラスを備えています。したがって、PortableServerパッケージでは、次のクラスにのみnarrowメソッドがあります。

  • ForwardRequestHelper
  • ServantActivatorHelper
  • ServantLocatorHelper

POAクラス

POAクラスは、ServantActivatorまたはServantLocatorの実装に使用します。

例外

ForwardRequest例外は、現在のリクエストと後続のForwardRequestリクエストをその例外のforward_referenceメンバーに示されたオブジェクトに配信する責任があることをORBに通知します。

アプリケーション・プログラマによって実装されるインタフェース

PortableServerによって行われる処理のほとんどは、ユーザーには見えません。 このため、上記のインタフェースのうちでプログラマが使用するものはほんのわずかです。 残りのインタフェースは、ORB実装によって提供されます。 アプリケーション・プログラマが使用するインタフェースは、次のとおりです。

  • AdapterActivator

    アダプタ・アクティベータはPOAと関連付けられます。 アダプタ・アクティベータは、子POA (POAの子供のどれか)の名前を指定する要求を受信したときの副作用として、またはactivateパラメータ値をTRUEに設定してfind_POAを呼び出したときに、POAが必要に応じて子POAを作成できるようにします。 実行の初めで必要なPOAをすべて作成するアプリケーション・サーバーでは、アダプタ・アクティベータを使用する必要も用意する必要もありません。つまり、要求の処理時にPOAを作成する必要がある場合にのみアダプタ・アクティベータが必要になります。

  • ServantLocator

    NON_RETAINポリシーを持つPOAは、ServantLocatorであるサーバント・マネージャを使用します。

  • ServantActivator

    RETAINポリシーを持つPOAは、ServantActivatorであるサーバント・マネージャを使用します。

パッケージorg.omg.PortableServer.ServantLocatorPackage

このパッケージは、Cookie型をoutパラメータとして渡すためのCookieHolderクラスを提供します。 CookieHolderクラスは、基底型のほかのホルダー・クラスと同じパターンに従います。

関連項目

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