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 に関する技術的なサポートやマニュアルは提供していません。

 


CORBA C++ クライアント アプリケーションの開発プロセスの概要

CORBA C++ クライアント アプリケーションの作成手順は次のとおりです。

手順
説明
1
CORBA C++ クライアント アプリケーションによって使用される CORBA インタフェースの OMG IDL ファイルを取得する。
2
呼び出し方式を選択する。
3
IDL コンパイラを使用して OMG IDL ファイルをコンパイルする。クライアント スタブは、OMG IDL のコンパイルによって生成される。
4
CORBA C++ クライアント アプリケーションを記述する。このトピックでは、基本的なクライアント アプリケーションの作成方法について説明する。
5
CORBA C++ クライアント アプリケーションをビルドする。

このプロセスの各手順については、以降の節で詳しく説明します。

CORBA C++ クライアント アプリケーションの Oracle Tuxedo 開発環境には、以下のものが含まれます。

 


ステップ 1: OMG IDL ファイルの取得

一般に、使用可能なインタフェースとオペレーション用の OMG IDL ファイルは、アプリケーション設計者からクライアント プログラマに提供されます。この節では、Basic サンプル アプリケーション用の OMG IDL を示します。コードリスト 2-1 に、univb.idl ファイルを示します。このファイルには、以下のインタフェースが定義されています。

インタフェース
説明
オペレーション
Registrar
コース データベースからコース情報を取得する。
get_courses_synopsis()
get_courses_details()
RegistrarFactory
Registrar オブジェクトへのオブジェクト参照を作成する。
find_registrar()
CourseSynopsisEnumerator
コース データベースから情報のサブセットを取得し、そのサブセットの一部を CORBA クライアント アプリケーションに繰り返し返す。
get_next_n()
destroy()

コード リスト 2-1 Basic サンプル アプリケーション用の OMG IDL ファイル
#pragma prefix "BEAsys.com"
module UniversityB
{
   typedef unsigned long CourseNumber;
typedef sequence<CourseNumber> CourseNumberList;
   struct CourseSynopsis
{
CourseNumber course_number;
string title;
};
   typedef sequence<CourseSynopsis> CourseSynopsisList;
interface CourseSynopsisEnumerator
{
CourseSynopsisList get_next_n(
in unsigned long number_to_get,
out unsigned long number_remaining
};
void destroy();
};
   typedef unsigned short Days;
const Days MONDAY = 1;
const Days TUESDAY = 2;
const Days WEDNESDAY = 4;
const Days THURSDAY = 8;
const Days FRIDAY = 16;

struct ClassSchedule
{
Days class_days; // 日のビットマスク
unsigned short start_hour; // 軍用時間による時間
unsigned short duration; // 分
};
   struct CourseDetails
{
CourseNumber course_number;
double cost;
unsigned short number_of_credits;
ClassSchedule class_schedule;
unsigned short number_of_seats;
string title;
string professor;
string description;
};
   typedef sequence<CourseDetails> CourseDetailsList;

interface Registrar
{
CourseSynopsisList
get_courses_synopsis(
in string search_criteria,
in unsigned long number_to_get, // 0 = すべて
out unsigned long number_remaining,
out CourseSynopsisEnumerator rest
);
    	CourseDetailsList get_courses_details(in CourseNumberList 
courses);
   interface RegistrarFactory
{
Registrar find_registrar(
);
  };
};

 


ステップ 2: 呼び出し方式の選択

CORBA クライアント アプリケーションでの要求で使用する呼び出し方式 (静的または動的) を選択します。CORBA クライアント アプリケーションでは、どちらの呼び出し方式も使用できます。

静的起動と動的起動の概要については、「静的起動と動的起動」を参照してください。

以後、このトピックでは、CORBA クライアント アプリケーションで静的起動を使用することを選択したものとして説明を進めます。動的起動を選択した場合は、「動的起動インタフェースの使い方」を参照してください。

 


ステップ 3: OMG IDL ファイルのコンパイル

CORBA C++ クライアント アプリケーションを作成する場合は、idl コマンドを使用して OMG IDL ファイルをコンパイルし、インタフェースで必要なファイルを生成します。次に、idl コマンドの構文を示します。

idl idlfilename(s)

IDL コンパイラは、クライアント スタブ (idlfilename_c.cpp) と、C++ プログラミング言語からクライアント スタブを使用するために必要なすべてを記述したヘッダ ファイル (idlfilename_c.h) を生成します。これらのファイルは、CORBA クライアント アプリケーションにリンクする必要があります。

さらに、IDL コンパイラは CORBA オブジェクトのオペレーションのシグニチャを含んだスケルトンを生成します。生成されるスケルトン情報は、idlfilename_s.cpp ファイルと idlfilename_s.h ファイルに格納されます。CORBA クライアント アプリケーションの開発中、この情報はサーバ ヘッダ ファイルとスケルトン ファイルを参照するのに役立ちます。

注意 : 生成されるクライアント スタブとスケルトンは変更しないでください。

idl コマンドとオプションの詳細については、『Tuxedo コマンド リファレンス』を参照してください。

CORBA クライアント アプリケーションを作成する場合は、以下のものを使用します。

idltojava コマンドまたは IDL コンパイラは、以下のものを生成します。

OMG IDL で定義された各例外は、例外クラスとそのヘルパー クラスおよびホルダ クラスを定義します。コンパイルされた .class ファイルは、CORBA クライアント アプリケーションの CLASSPATH に存在する必要があります。

また、idltojava コマンドまたは IDL コンパイラは CORBA オブジェクトのオペレーションのシグニチャを含んだスケルトンを生成します。生成されたスケルトン情報は、_interfaceImplBase ファイルに格納されます。

 


ステップ 4: CORBA クライアント アプリケーションの記述

CORBA サーバ アプリケーションとのセッションに参加するには、CORBA クライアント アプリケーションは CORBA オブジェクトのオブジェクト参照を取得してそのオブジェクトのオペレーションを呼び出すことができなければなりません。これを実現するには、CORBA クライアント アプリケーションは以下のことを行う必要があります。

  1. Oracle Tuxedo ORB の初期化
  2. Oracle Tuxedo ドメインとの通信の確立
  3. FactoryFinder オブジェクトへの初期参照の解決
  4. ファクトリの使用による目的の CORBA オブジェクトのオブジェクト参照の取得
  5. CORBA オブジェクトのオペレーションの呼び出し

以降の節では、Basic サンプル アプリケーションのクライアント アプリケーションの一部を使用して、これらのステップについて説明します。Basic サンプル アプリケーションについては、『Tuxedo CORBA University サンプル アプリケーション』を参照してください。Basic サンプル アプリケーションは、Oracle Tuxedo ソフトウェア キットの次のディレクトリに格納されています。

drive:\tuxdir\samples\corba\university\basic

ORB の初期化

すべての CORBA クライアント アプリケーションは、最初に ORB を初期化する必要があります。

CORBA C++ クライアント アプリケーションから ORB を初期化するには、次のコードを使用します。

C++

CORBA::ORB_var orb=CORBA::ORB_init(argc, argv, ORBid);

一般に、ORBid は指定されず、初期化中に指定されたデフォルトの ORBid が使用されます。ただし、CORBA クライアント アプリケーションが実行されているマシンで CORBA サーバ アプリケーションも実行されており、CORBA クライアント アプリケーションが別の Oracle Tuxedo ドメインのサーバ アプリケーションにアクセスする場合は、デフォルト ORBid をオーバーライドする必要があります。そのためには、ORBid を BEA_IIOP としてハードコードするか、コマンドラインで ORBid を _ORBid BEA_IIOP として受け渡します。

Oracle Tuxedo ドメインとの通信の確立

CORBA クライアント アプリケーションは、Bootstrap オブジェクトを作成します。IIOP リスナ/ハンドラのリストは、パラメータとして提供されるか、TOBJADDR Java プロパティまたはアプレット プロパティを介して提供されます。1 つの IIOP リスナ/ハンドラは、次のように指定されます。

//host:port

IIOP リスナ/ハンドラが TOBJADDR を介して提供される場合、コンストラクタの 2 番目の引数は null にできます。

IIOP リスナ/ハンドラのホストとポートの組み合わせは、UBBCONFIG ファイルに定義されます。Bootstrap オブジェクトに対して指定されるホストとポートの組み合わせは、Oracle Tuxedo ドメインの UBBCONFIG ファイルの ISL パラメータと完全に一致する必要があります。ホストとポートの組み合わせの形式のほかに、大文字、小文字も一致する必要があります。アドレスが一致しない場合、Bootstrap オブジェクトの呼び出しは失敗し、次のメッセージがログ ファイルに記録されます。

Error: クライアントからの非公式の接続 (アドレス <tcp/ip address>/<portnumber>) です。

たとえば、UBBCONFIG ファイルの ISL パラメータでネットワーク アドレスが //TRIXIE::3500 として指定されている場合、Bootstrap オブジェクトで //192.12.4.6.:3500 または //trixie:3500 と指定すると接続が失敗します。

UNIX システムで大文字、小文字の区別を調べるには、ホスト システムで uname -n コマンドを使用します。Window 2000 で大文字、小文字の区別を調べるには、コントロール パネルの [ネットワーク] を使用します。

次の C++ と Java の例では、Bootstrap オブジェクトの使い方を示します。

C++

       Tobj_Bootstrap* bootstrap = new Tobj_Bootstrap(orb, “//host:port”);

Java アプレット

       Tobj_Bootstrap bootstrap = new Tobj_Bootstrap(orb, “//host:port”, this); 

ここで this は Java アプレットの名前です。

Oracle Tuxedo ドメインには、複数の IIOP リスナ/ハンドラが存在できます。複数の IIOP リスナ/ハンドラを使用して Oracle Tuxedo ドメインにアクセスする場合、Host:Port の組み合わせのリストを Bootstrap オブジェクトに提供します。Bootstrap コマンドの 2 番目のパラメータが空の文字列の場合、Bootstrap オブジェクトは Oracle Tuxedo ドメインに接続するまでこのリストを参照します。また、IIOP リスナ/ハンドラのリストは、TOBJADDR に指定することもできます。

複数の Oracle Tuxedo ドメインにアクセスする場合、アクセスする Oracle Tuxedo ドメインごとに Bootstrap オブジェクトを作成する必要があります。

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

FactoryFinder オブジェクトへの初期参照の解決

CORBA クライアント アプリケーションは、自身にサービスを提供する環境オブジェクトへの初期参照を取得する必要があります。Bootstrap オブジェクトの resolve_initial_references オペレーションを呼び出すと、FactoryFinder、InterfaceRepository、SecurityCurrent、TransactionCurrent、NotificationService、Tobj_SimpleEventsService、および NameService 環境オブジェクトの参照を取得できます。このオペレーションに受け渡す引数は、目的のオブジェクト参照の名前を含む文字列です。CORBA クライアント アプリケーションで使用する環境オブジェクトの初期参照だけを取得する必要があります。

次の C++ と Java の例では、Bootstrap オブジェクトを使用して FactoryFinder オブジェクトへの初期参照を解決する方法を示します。

C++

// Factory Finder の解決
CORBA::Object_var var_factory_finder_oref = bootstrap.resolve_initial_references
(“FactoryFinder”);
Tobj::FactoryFinder_var var_factory_finder_ref = Tobj::FactoryFinder::_narrow
(factory_finder_oref.in());

Java

// Factory Finder の解決
org.omg.CORBA.Object off = bootstrap.resolve_initial_references
(“FactoryFinder”);
FactoryFinder ff=FactoryFinderHelper.narrow(off);

FactoryFinder オブジェクトを使用したファクトリの取得

CORBA クライアント アプリケーションは、CORBA オブジェクトの参照をファクトリから取得します。ファクトリは、別の CORBA オブジェクトの参照を返し、自身をファクトリとして登録する任意の CORBA オブジェクトです。CORBA クライアント アプリケーションは、ファクトリのオペレーションを呼び出して特定のタイプの CORBA オブジェクトへのオブジェクト参照を取得します。ファクトリを使用するには、CORBA クライアント アプリケーションは必要なファクトリを検索できなければなりません。FactoryFinder オブジェクトは、そのために役立ちます。FactoryFinder オブジェクトの機能の登録については、「CORBA クライアント アプリケーションの開発概念」を参照してください。

FactoryFinder オブジェクトには以下のメソッドがあります。

次の C++ と Java の例では、FactoryFinder find_one_factory_by_id メソッドを使用して、Basic サンプル アプリケーションの CORBA クライアント アプリケーションで使用される Registrar オブジェクトのファクトリを取得する方法を示します。

C++

CORBA::Object_var var_registrar_factory_oref = var_factory_finder_ref->
find_one_factory_by_id(UniversityB::_tc_RegistrarFactory->id()
);
UniversityB::RegistrarFactory_var var_RegistrarFactory_ref =
UniversityB::RegistrarFactory::_narrow(
var_RegistrarFactory_oref.in()
);

Java

org.omg.CORBA.Object of = FactoryFinder.find_one_factory_by_id
(UniversityB.RegistrarFactoryHelper.id());
UniversityB.RegistrarFactory F = UniversityB.RegistrarFactoryHelper.narrow(of);

ファクトリを使用した CORBA オブジェクトの取得

CORBA クライアント アプリケーションは、ファクトリを呼び出して CORBA オブジェクトへのオブジェクト参照を取得します。次に、CORBA クライアント アプリケーションは、ファクトリへのポインタとオペレーションで必要な引数を受け渡すことによって、CORBA オブジェクトのオペレーションを呼び出します。

次の C++ と Java の例では、Registrar オブジェクトのファクトリを取得して、そのオブジェクトの get_courses_details() メソッドを呼び出す方法を示します。

C++

UniversityB::Registrar_var var_Registrar = var_RegistrarFactory->
find_Registrar();
UniversityB::CourseDetailsList_var course_details_list = Registrar_oref->
get_course_details(CourseNumberList);

Java

UniversityB.Registrar gRegistrarObjRef = F.find_registrar();
gRegistrarObjRef.get_course_details(selected_course_numbers);

 


ステップ 5: CORBA クライアント アプリケーションのビルド

CORBA クライアント アプリケーションの開発の最終ステップは、クライアント アプリケーションの実行可能ファイルを生成することです。そのためには、コードをコンパイルしてクライアント スタブに対してリンクする必要があります。

CORBA C++ クライアント アプリケーションを作成する場合、buildobjclient コマンドを使用して CORBA クライアント アプリケーションの実行可能ファイルを生成します。このコマンドは、静的起動を使用するインタフェースのクライアント スタブ、関連付けられるヘッダ ファイル、および標準の Oracle Tuxedo ライブラリを組み合わせてクライアント実行可能ファイルを生成します。buildobjclient コマンドの構文については、『Tuxedo コマンド リファレンス』を参照してください。

 


クライアント アプリケーションとして動作するサーバ アプリケーション

CORBA クライアント アプリケーションからの要求を処理するには、CORBA サーバ アプリケーションは別のサーバ アプリケーションに処理を要求する必要が生じる場合があります。このような場合、CORBA サーバ アプリケーションは CORBA クライアント アプリケーションとして動作します。

CORBA クライアント アプリケーションとして動作するには、CORBA サーバ アプリケーションは現在の Oracle Tuxedo ドメインの Bootstrap オブジェクトを取得する必要があります。CORBA サーバ アプリケーションの Bootstrap オブジェクトは、TP::Bootstrap (CORBA C++ クライアント アプリケーションの場合) を介して既に使用可能になっています。CORBA サーバ アプリケーションは、FactoryFinder オブジェクトを使用して、CORBA クライアント アプリケーションの要求を満たす CORBA オブジェクトのファクトリを検索します。

 


Java2 アプレットの使い方

Oracle Tuxedo の CORBA 環境では、Java2 アプレットをクライアントとして使用できます。Java2 アプレットを実行するには、Sun Microsystems, Inc. から Java Plug-In 製品をインストールする必要があります。Java Plug-In は、Sun の Java 仮想マシン (JVM) を使用して HTML ページ内で Java アプレットを実行します。

Sun の Web サイトから Java Plug-in キットをダウンロードする前に、Java Plug-In が既にマシンにインストールされているかどうかを確認してください。

Netscape Navigator

Netscape Navigator では、ブラウザ ウィンドウの [ヘルプ] メニューから [Plug-ins について] オプションを選択します。Java Plug-In がインストールされている場合は、次の文字列が表示されます。

application/x-java-applet;version 1.2

Internet Explorer

Windows の [スタート] メニューから、[プログラム] オプションを選択します。Java Plug-In がインストールされている場合は、[Java Plug-In コントロール パネル] オプションが表示されます。

Java Plug-In がインストールされていない場合は、JDK1.2 Plug-in (jre12-win32.exe) と HTML Converter ツール (htmlconv12.zip) をダウンロードおよびインストールする必要があります。どちらの製品も、java.sun.com/products/plugin から入手できます。

また、java.sun.com/products/plugin/1.2/docs/tags.html の「Java Plug-In HTML Specification」を通読する必要があります。この仕様には、Web ページ作成者がブラウザのデフォルト Java 実行時環境ではなく Java Plug-in を使用して既存の JDK 1.2 アプレットを実行するために必要な、既存の HTML コードの変更内容が説明されています。

Java アプレットを記述します。Java アプレットから ORB を初期化するには、次のコードを使用します。

org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init (this,null);

Internet Explorer ブラウザまたは Netscape Navigator ブラウザがアプレットの HTML ページをブラウズしているときに Java Plug-in が自動的に起動するようにするには、HTML 仕様の OBJECT タグと EMBED タグを使用します。HTML Converter ツールを使用してアプレットを HTML に変換した場合、これらのタグは自動的に挿入されます。OBJECT タグと EMBED タグの使い方については、java.sun.com/products/plugin/1.2/docs/tags.html を参照してください。


  ページの先頭       前  次