Tuxedo CORBA クライアント アプリケーションの開発方法

     前  次    新しいウィンドウで目次を開く     
ここから内容の開始

CORBA クライアント アプリケーションの開発概念

この章では、Oracle Tuxedo 製品の CORBA 環境でサポートされるクライアント アプリケーションのタイプと、CORBA クライアント アプリケーションの開発前に理解しておく必要がある概念について説明します。

注意 : Oracle Tuxedo CORBA Java クライアントと Oracle Tuxedo CORBA Java クライアント ORB は Tuxedo 8.1 で非推奨になり、サポートされなくなりました。Oracle Tuxedo CORBA Java クライアントおよび Oracle Tuxedo CORBA Java クライアント ORB のテキスト参照、関連するコード サンプルはすべてサードパーティの Java ORB ライブラリの実装/実行の簡易化とプログラマによる参照だけに使用する必要があります。
注意 : サード パーティの CORBA Java ORB のテクニカル サポートは、各ベンダによって提供されます。Oracle Tuxedo では、サード パーティの CORBA Java ORB に関する技術的なサポートやマニュアルは提供していません。

ここでは、以下の内容について説明します。

 


クライアント アプリケーションの概要

Oracle Tuxedo ソフトウェアは、以下のタイプのクライアント アプリケーションをサポートしています。

 


OMG IDL

どのような分散アプリケーションでも、クライアント/サーバ アプリケーションは通信を行うための基本的な情報を必要とします。たとえば、CORBA クライアント アプリケーションは、要求できるオペレーションとその引数を知る必要があります。

Object Management Group (OMG) インタフェース定義言語 (IDL) を使用すると、クライアント アプリケーションへの CORBA インタフェースを定義できます。OMG IDL で記述したインタフェース定義を使用すると、完全に CORBA インタフェースを定義し、各オペレーションの引数を指定できます。OMG IDL は、純粋な宣言型言語です。つまり、実装の詳細は含まれていません。OMG IDL で指定されるオペレーションは、CORBA バインディングを提供する任意の言語で記述し、呼び出すことができます。サポートされる言語には、C++ と Java が含まれます。

一般に、アプリケーション設計者が使用可能な CORBA インタフェースとオペレーション用の OMG IDL ファイルをプログラマに提供し、プログラマがクライアント アプリケーションを開発します。

OMG IDL と C++ のマッピング

Oracle Tuxedo ソフトウェアは、「The Common Object Request Broker:Architecture and Specification, Version 2.3」に準拠しています。OMG IDL と C++ のマッピングの詳細については、「The Common Object Request Broker:Architecture and Specification, Version 2.3」を参照してください。

OMG IDL と Java のマッピング

Oracle Tuxedo ソフトウェアは、「The Common Object Request Broker:Architecture and Specification, Version 2.2」に準拠しています。OMG IDL と Java のマッピングの詳細については、「The Common Object Request Broker:Architecture and Specification, Version 2.2」を参照してください。

OMG IDL と COM のマッピング

Oracle Tuxedo ソフトウェアは、「The Common Object Request Broker:Architecture and Specification, Version 2.3」に定義されている OMG IDL と COM のマッピングに準拠しています。OMG IDL と COM のマッピングの詳細については、「The Common Object Request Broker:Architecture and Specification, Version 2.3」を参照してください。

 


静的起動と動的起動

Oracle Tuxedo 製品の CORBA ORB は、静的と動的という 2 種類のクライアント/サーバ起動をサポートしています。どちらのケースでも、CORBA クライアント アプリケーションは CORBA オブジェクトの参照へのアクセスを取得し、要求を満たすオペレーションを呼び出すことによってその要求を実行します。CORBA サーバ アプリケーションは、静的起動と動的起動の違いを区別できません。

静的起動を使用する場合、CORBA クライアント アプリケーションはクライアント スタブ上でオペレーションを直接呼び出します。静的起動は、最も簡単で、最も一般的な呼び出し方式です。スタブは、IDL コンパイラによって生成されます。静的起動は、呼び出す必要があるオペレーションの詳細をコンパイル時に認識し、その呼び出しの同期的性質内で処理できるアプリケーションに適しています。図 1-1 に、静的起動のしくみを示します。

図 1-1 静的起動

静的起動

動的起動は、より複雑です。ただし、動的起動を使用すると、CORBA クライアント アプリケーションはコンパイル時に CORBA オブジェクトのインタフェースを認識しなくても CORBA オブジェクトのオペレーションを呼び出すことができます。図 1-2 に、動的起動のしくみを示します。

図 1-2 動的起動

動的起動

動的起動を使用すると、CORBA クライアント アプリケーションは、インタフェース リポジトリに格納されている CORBA オブジェクト インタフェース用のオペレーション要求を動的に構築できます。CORBA サーバ アプリケーションは、特別な設計を必要とせずに動的起動要求を受け付けて処理できます。通常、動的起動は CORBA クライアント アプリケーションで遅延同期通信が必要なときに使用されるか、または対話の性質が未定義の場合に動的クライアント アプリケーションによって使用されます。動的起動の詳細については、「動的起動インタフェースの使い方」を参照してください。

 


クライアント スタブ

クライアント スタブは、CORBA オブジェクトが実行できるオペレーションへのプログラミング インタフェースを提供します。クライアント スタブは、CORBA オブジェクトのローカル プロキシです。クライアント スタブは、CORBA オブジェクトのオブジェクト参照の同期呼び出しを実行するためのメカニズムを提供します。CORBA クライアント アプリケーションは、特別なコードを必要とせずに CORBA オブジェクトまたはその引数を処理できます。CORBA クライアント アプリケーションは、スタブをローカル オブジェクトとして取り扱います。

CORBA クライアント アプリケーションは、使用するインタフェースごとにスタブを持つ必要があります。idl コマンド (または Java ORB 製品の同等コマンド) を使用すると、CORBA インタフェースの OMG IDL 定義からクライアント スタブを生成できます。このコマンドにより、C++ や Java などのプログラミング言語からクライアント スタブを使用する場合に必要なすべてのものが定義されたスタブ ファイルとヘッダ ファイルが生成されます。このため、CORBA クライアント アプリケーション内からメソッドを呼び出すだけで、CORBA オブジェクトのオペレーションを要求できます。

 


インタフェース リポジトリ

インタフェース リポジトリには、CORBA オブジェクトのインタフェースとオペレーションの定義が含まれています。インタフェース リポジトリに格納される情報は OMG IDL ファイルに定義される情報と同じですが、この情報には実行時にプログラマティックにアクセス可能です。CORBA クライアント アプリケーションがインタフェース リポジトリを使用する理由は以下のとおりです。

静的起動を使用する CORBA クライアント アプリケーションは、実行時にインタフェース リポジトリにアクセスしません。CORBA オブジェクトのインタフェースに関する情報は、クライアント スタブに含まれています。

インタフェース リポジトリを管理するには、以下の Oracle Tuxedo 開発コマンドを使用します。

インタフェース リポジトリの開発コマンドについては、『Tuxedo コマンド リファレンス』を参照してください。

 


ドメイン

ドメインとは、オブジェクトとサービスを管理エンティティとして 1 つのグループにまとめる手段のことです。Oracle Tuxedo ドメインは、少なくとも 1 つの IIOP リスナ/ハンドラを持ち、名前で識別されます。異なる Bootstrap オブジェクトを使用することで、1 つの CORBA クライアント アプリケーションが複数の Oracle Tuxedo ドメインに接続できます。Oracle Tuxedo ドメインごとに、CORBA クライアント アプリケーションはその Oracle Tuxedo ドメイン内で提供されるサービス (トランザクション、セキュリティ、ネーミング、イベントなど) に対応するオブジェクトを取得できます。Bootstrap オブジェクトと Oracle Tuxedo ドメインで使用可能な CORBA サービスについては、「環境オブジェクト」を参照してください。

注意 : サービスごとに 1 つの環境オブジェクトだけが同時に存在でき、環境オブジェクトは同じ Bootstrap オブジェクトに関連付けられる必要があります。

図 1-3 に、Oracle Tuxedo ドメインの機能を示します。

図 1-3 Oracle Tuxedo ドメインの機能

Oracle Tuxedo ドメインの機能

 


環境オブジェクト

Oracle Tuxedo ソフトウェアには、CORBA クライアント アプリケーションと Oracle Tuxedo ドメイン内の CORBA サーバ アプリケーション間の通信を設定し、そのドメインで提供される CORBA サービスへのアクセスを提供する環境オブジェクト セットが用意されています。Oracle Tuxedo ソフトウェアには、以下の環境オブジェクトが用意されています。

Oracle Tuxedo ソフトウェアには、以下のプログラミング環境用の環境オブジェクトが用意されています。

Bootstrap オブジェクト

CORBA クライアント アプリケーションは、IIOP リスナ/ハンドラのアドレスを定義する Bootstrap オブジェクトを作成します。IIOP リスナ/ハンドラは、Oracle Tuxedo ドメインおよびそのドメインによって提供される CORBA サービスへのアクセス ポイントです。IIOP リスナ/ハンドラのリストは、パラメータとして提供されるか、TOBJADDR 環境変数または Java プロパティを介して提供されます。1 つの IIOP リスナ/ハンドラは、次のように指定されます。

//host:port

例 : //myserver:4000

Bootstrap オブジェクトがインスタンス化されると、resolve_initial_references メソッドが呼び出され、文字列 ID が受け渡されて使用可能なオブジェクトの参照が取得されます。文字列 ID の有効値は、FactoryFinder、Interface Repository、SecurityCurrent、TransactionCurrent、NotificationService、TObj_SimpleEventsService、および NameService です。

図 1-4 に、Oracle Tuxedo ドメインでの Bootstrap オブジェクトの機能を示します。

図 1-4 Bootstrap オブジェクトの機能

Bootstrap オブジェクトの機能

サード パーティ クライアント ORB は、CORBA Interoperable Naming Service (INS) メカニズムを使用して Oracle Tuxedo ドメインとそのサービスにアクセスできます。Interoperable Naming Service を使用すると、サード パーティ クライアント ORB は、自身の resolve_initial_references() 関数を使用して Oracle Tuxedo ドメインによって提供される CORBA サービスにアクセスし、標準 OMG IDL から生成されたスタブを使用してドメインから返されたインスタンスを処理できます。Interoperable Naming Service の使い方については、『Tuxedo CORBA プログラミング リファレンス』を参照してください。

ファクトリと FactoryFinder オブジェクト

CORBA クライアント アプリケーションは、CORBA オブジェクトの参照をファクトリから取得します。ファクトリは、別の CORBA オブジェクトの参照を返し、自身を FactoryFinder オブジェクトに登録する任意の CORBA オブジェクトです。

CORBA クライアント アプリケーションが CORBA オブジェクトを使用するには、その CORBA オブジェクトへのオブジェクト参照を作成するファクトリを検索する必要があります。Oracle Tuxedo ソフトウェアには、そのために FactoryFinder オブジェクトが用意されています。CORBA クライアント アプリケーションで使用可能なファクトリは、起動時に CORBA サーバ アプリケーションによって FactoryFinder オブジェクトに登録されたファクトリです。

CORBA クライアント アプリケーションは、次の一連のステップを使用して CORBA オブジェクトの参照を取得します。

  1. Bootstrap オブジェクトが作成されると、resolve_initial_references メソッドが呼び出され、FactoryFinder オブジェクトの参照が取得されます。
  2. CORBA クライアント アプリケーションは、FactoryFinder オブジェクトに目的のファクトリへのオブジェクト参照を問い合わせます。
  3. 次に、CORBA クライアント アプリケーションはそのファクトリを呼び出して CORBA オブジェクトへのオブジェクト参照を取得します。

図 1-5 に、CORBA クライアント アプリケーションと FactoryFinder オブジェクトの対話を示します。

図 1-5 クライアント アプリケーションによる FactoryFinder オブジェクトの使用

クライアント アプリケーションによる FactoryFinder オブジェクトの使用

FactoryFinder オブジェクトの命名規約と Oracle Tuxedo 拡張

CORBA クライアント アプリケーションで使用可能なファクトリは、起動時に CORBA サーバ アプリケーションによって FactoryFinder オブジェクトに登録されたファクトリです。ファクトリは、以下のフィールドで構成されるキーを使用して登録されます。

Oracle Tuxedo ソフトウェアによって使用される FactoryFinder オブジェクトは、CORBA サービス ライフサイクル サービスで定義されます。Oracle Tuxedo ソフトウェアは、COS::LifeCycle::FactoryFinder の拡張を実装します。この拡張により、クライアント アプリケーションは FactoryFinder オブジェクトを使用してより簡単にファクトリを検索できるようになります。

CORBA サービス ライフサイクル サービスは、CORBA サービス ネーミング サービスに定義された名前を使用して、COS::LifeCycle::FactoryFinder インタフェースを介してファクトリを検索するよう指定しています。これらの名前は一連の NameComponent 構造で構成され、この構造は ID フィールドと kind フィールドで構成されています。

CORBA 名を使用したファクトリの検索は、クライアント アプリケーションにとっては面倒です。数多くの呼び出しを行って適切な名前構造を構築し、CORBA ネーム サービス名を構築して COS::LifeCycle::FactoryFinder インタフェースの find_factories メソッドに渡す必要があるからです。また、メソッドは複数のファクトリを返す場合があるため、クライアント アプリケーションは適切なファクトリの選択と不要なオブジェクト参照の破棄を行う必要があります。

FactoryFinder オブジェクトは、単純なメソッド呼び出しによってインタフェースを拡張することで、CORBA クライアント アプリケーションがファクトリをより簡単に検索できるよう設計されています。

FactoryFinder 拡張の目的は、CORBA クライアント アプリケーションに対して以下の簡素化を提供することです。

最も単純なアプリケーション設計は、CORBA クライアント アプリケーションで Tobj::FactoryFinder::find_one_factory_by_id メソッドを使用することで達成できます。このメソッドは、入力としてファクトリ ID 用の単純な文字列を受け付け、1 つのファクトリを CORBA クライアント アプリケーションに返します。CORBA クライアント アプリケーションは、名前コンポーネントを操作し、多くのファクトリから選択する必要がなくなります。

Tobj::FactoryFinder::find_one_factory_by_id メソッドを使用するには、アプリケーション設計者は CORBA クライアント アプリケーションが特定の CORBA オブジェクト インタフェース用のファクトリを簡単に検索するために使用できるファクトリの命名規約を定義する必要があります。この命名規約では、特定のタイプの CORBA オブジェクト インタフェースのオブジェクト参照を提供するファクトリの複数のニーモニック型が定義されるのが理想的です。ファクトリは、これらの規則を使用して登録されます。たとえば、Student オブジェクトのオブジェクト参照を返すファクトリであれば、StudentFactory と呼ばれます。FactoryFinder オブジェクトへのファクトリの登録については、『Tuxedo CORBA サーバ アプリケーションの開発方法』を参照してください。

OMG IDL ファイルでファクトリの実際のインタフェース ID を使用するか、OMG IDL ファイルでファクトリ ID を定数として指定することをお勧めします。このテクニックを使用することにより、CORBA クライアント アプリケーションと CORBA サーバ アプリケーション間の命名の一貫性が保証されます。

InterfaceRepository オブジェクト

InterfaceRepository オブジェクトは、Oracle Tuxedo ドメインのインタフェース リポジトリに関する情報を返します。InterfaceRepository オブジェクトは、インタフェース リポジトリの CORBA 定義に基づいています。このオブジェクトは、「Common Request Broker Architecture and Specification Version 2.2」で定義されている適切な CORBA インタフェース セットを提供します。

動的起動インタフェース (DII) を使用する CORBA クライアント アプリケーションは、インタフェース リポジトリにプログラマティックにアクセスする必要があります。インタフェース リポジトリにアクセスするための正確な手順は、CORBA クライアント アプリケーションが特定の CORBA インタフェースに関する情報を検索するのか、またはあるインタフェースを見つけるためにリポジトリを参照するのかによって異なります。どちらの場合でも、CORBA クライアント アプリケーションはインタフェース リポジトリへの読み込みだけを行うことができ、書き込みは行うことができません。

DII を使用する CORBA クライアント アプリケーションが Oracle Tuxedo ドメインのインタフェース リポジトリを参照するには、CORBA クライアント アプリケーションがあらかじめそのドメインの InterfaceRepository オブジェクトのオブジェクト参照を取得しておく必要があります。DII を使用する CORBA クライアント アプリケーションは、Bootstrap オブジェクトを使用してオブジェクト参照を取得します。

DII を使用する CORBA クライアント アプリケーションで InterfaceRepository オブジェクトを使用する方法については、「動的起動インタフェースの使い方」を参照してください。InterfaceRepository オブジェクトについては、『Tuxedo CORBA プログラミング リファレンス』を参照してください。

SecurityCurrent オブジェクト

CORBA C++ クライアント アプリケーションは、セキュリティを使用して Oracle Tuxedo ドメインの認証を受けます。認証とは、クライアント アプリケーションの ID を検証するプロセスです。正確なログオン情報を入力することによって、クライアント アプリケーションは Oracle Tuxedo ドメインの認証を受けます。Oracle Tuxedo ソフトウェアは、CORBA サービス セキュリティ サービスで定義された認証を使用し、使い勝手を良くするための拡張を提供します。

CORBA クライアント アプリケーションは、SecurityCurrent オブジェクトを使用して Oracle Tuxedo ドメインにログオンし、セキュリティ資格をドメインに渡します。SecurityCurrent オブジェクトは、CORBA サービス セキュリティ サービスの Oracle Tuxedo の実装です。Oracle Tuxedo 製品の CORBA セキュリティ モデルは、認証をベースとしています。

SecurityCurrent オブジェクトを使用することによって、ドメインの適切なセキュリティ レベルを指定します。利用できる認証レベルは以下のとおりです。

注意 : CORBA クライアント アプリケーションが認証を受けず、セキュリティ レベルが TOBJ_NOAUTH の場合、Oracle Tuxedo ドメインの IIOP リスナ/ハンドラはその IIOP リスナ/ハンドラに送信されるユーザ名とクライアント アプリケーション名に CORBA クライアント アプリケーションを登録します。

Oracle Tuxedo ソフトウェアでは、SecurityCurrent オブジェクトのプロパティとして PrincipalAuthenticator と Credentials だけがサポートされます。

クライアント アプリケーションでの SecurityCurrent オブジェクトの使い方については、『Tuxedo CORBA アプリケーションのセキュリティ機能』を参照してください。SecurityLevel1::Current インタフェースと SecurityLevel2::Current インタフェースについては、『Tuxedo CORBA プログラミング リファレンス』を参照してください。

TransactionCurrent オブジェクト

TransactionCurrent オブジェクトは、CORBA のオブジェクト トランザクション サービスの Oracle Tuxedo の実装です。TransactionCurrent オブジェクトは、CORBA クライアント アプリケーションと CORBA サーバ アプリケーション間の現行セッションのトランザクション コンテキストを維持します。TransactionCurrent オブジェクトを使用すると、CORBA クライアント アプリケーションは、トランザクションの開始と終了や、トランザクションのステータスの取得などのトランザクション オペレーションを実行できます。

トランザクションは、インタフェース単位で使用されます。アプリケーション設計者は、設計時に CORBA アプリケーション内のどのインタフェースでトランザクションを処理するかを決定します。次に、各インタフェースのトランザクション ポリシーを実装コンフィグレーション ファイル (ICF) に定義します。トランザクション ポリシーは以下のとおりです。

CORBA クライアント アプリケーションでの TransactionCurrent オブジェクトの使い方については、『Tuxedo CORBA トランザクション』を参照してください。TransactionCurrent オブジェクトについては、『Tuxedo CORBA プログラミング リファレンス』を参照してください。

NotificationService オブジェクトと Tobj_SimpleEventsService オブジェクト

NotificationService オブジェクトと Tobj_SimpleEventsService オブジェクトは、CORBA イベント サービスへのアクセスを提供します。Oracle Tuxedo 製品の CORBA 環境のイベント サービスは、ATMI 環境の EventBroker のイベント サービスとほぼ同じ機能を提供します。ただし、CORBA イベント サービスは、プログラミング モデルと、CORBA プログラマにとって自然なインタフェースを提供します。

CORBA イベント サービスは、イベント ポスト メッセージを受信し、それらをフィルタして、サブスクライバに配布します。ポスト元は、関心のあるイベントがいつ発生したかを検出し、それをイベント サービスに報告 (ポスト) する CORBA アプリケーションです。サブスクライバは、関心のあるイベントがポストされたときに実行される通知アクションを要求する CORBA アプリケーションです。

CORBA イベント サービスは、以下の 2 種類のインタフェース セットを提供します。

どちらのインタフェース セットも、CORBA ノーティフィケーション サービス仕様で定義される標準の構造化されたイベントを渡します。この 2 つのインタフェース セットは、相互に互換性があります。このため、NotificationService インタフェースを使用してポストされたイベントを Tobj_SimpleEventsService インタフェースでサブスクライブでき、その逆も可能です。

NotificationServer オブジェクトと Tobj_SimpleEventsService オブジェクトの使い方については、『Tuxedo CORBA ノーティフィケーション サービス』を参照してください。

NameService オブジェクト

NameService オブジェクトは、CORBA ネーム サービスへのアクセスを提供します。CORBA ネーム サービスを使用すると、CORBA サーバ アプリケーションは論理名を使用してオブジェクト参照を宣言できます。CORBA クライアント アプリケーションは、CORBA ネーム サービスに名前のルックアップを依頼することによってオブジェクトをロケートできます。

CORBA ネーム サービスは、以下の機能を提供します。

CORBA クライアント アプリケーションでの NameService オブジェクトの使い方については、『Tuxedo CORBA ネーム サービス』を参照してください。


  ページの先頭       前  次