CORBAクライアント・アプリケーションの作成

     前  次    新規ウィンドウで目次を開く  新規ウィンドウで索引を開く  PDFとして表示 - 新規ウィンドウ  Adobe Readerを入手 - 新規ウィンドウ
コンテンツはここから始まります

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開発コマンドを使用します。

インタフェース・リポジトリの開発コマンドについては、『Oracle 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の使い方については、『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クライアント・アプリケーションがファクトリをより簡単に検索できるよう設計されています。

拡張の目的は、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オブジェクトへのファクトリの登録については、『CORBAサーバー・アプリケーションの作成』を参照してください。

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

インタフェース・リポジトリ・オブジェクト

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オブジェクトについては、『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オブジェクトの使い方については、『CORBAアプリケーションにおけるセキュリティの使用』を参照してください。SecurityLevel1::Current インタフェースとSecurityLevel2::Currentインタフェースについては、『CORBAプログラミング・リファレンス』を参照してください。

TransactionCurrentオブジェクト

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

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

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

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

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

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

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

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

NotificationServerオブジェクトとTobj_SimpleEventsServiceオブジェクトの使い方については、『CORBA通知サービスの使用』を参照してください。

NameServiceオブジェクト

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

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

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


  先頭に戻る       前  次