bea ホーム | 製品 | dev2dev | support | askBEA |
![]() |
![]() |
|
![]() |
e-docs > Tuxedo > Tuxedo CORBA クライアント・アプリケーションの開発方法 > CORBA クライアント・アプリケーションの作成 |
Tuxedo CORBA クライアント・アプリケーションの開発方法
|
CORBA クライアント・アプリケーションの作成
ここでは、以下の内容について説明します。
CORBA C++ クライアント・アプリケーションの開発プロセスの概要
CORBA C++ クライアント・アプリケーションの作成手順は次のとおりです。
このプロセスの各手順については、以降の節で詳しく説明します。 CORBA C++ クライアント・アプリケーションの BEA Tuxedo 開発環境には、以下のものが含まれます。
CORBA Java クライアント・アプリケーションの開発プロセスの概要
BEA Tuxedo ソフトウェアは、Sun Microsystem 社の Java Development Kit (JDK) Java クライアントとの相互運用性をサポートしています。
注記 サポートされるソフトウェアのバージョンについては、『BEA Tuxedo システムのインストール』を参照してください。
CORBA Java クライアント・アプリケーションの作成手順は次のとおりです。
このプロセスの各手順については、以降の節で詳しく説明します。 OMG IDL ファイルのコンパイル、クライアント・スタブの生成、および CORBA Java クライアント・アプリケーションの実行可能ファイルのビルドを行うには、使用する CORBA Java ORB 製品の開発ツールを使用する必要があります。また、BEA Tuxedo ドメインの CORBA オブジェクト、およびその CORBA オブジェクトによって提供されるサービスへのアクセスを提供する Java 環境オブジェクトを使用します。
ステップ 1: OMG IDL ファイルの取得
一般に、使用可能なインターフェイスとオペレーション用の OMG IDL ファイルは、アプリケーション設計者からクライアント・プログラマに提供されます。この節では、Basic サンプル・アプリケーション用の OMG IDL を示します。リスト0-1 に、univb.idl ファイルを示します。このファイルには、以下のインターフェイスが定義されています。
コード リスト 0-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 コマンドとオプションの詳細については、『BEA Tuxedo コマンド・リファレンス』を参照してください。
CORBA Java クライアント・アプリケーションを作成する場合は、以下のものを使用します。
idltojava コマンドまたは IDL コンパイラは、以下のものを生成します。
OMG IDL で定義された各例外は、例外クラスとそのヘルパ・クラスおよびホルダ・クラスを定義します。コンパイルされた .class ファイルは、CORBA クライアント・アプリケーションの CLASSPATH に存在する必要があります。
また、idltojava コマンドまたは IDL コンパイラは CORBA オブジェクトのオペレーションのシグニチャを含んだスケルトンを生成します。生成されたスケルトン情報は、_interfaceImplBase ファイルに格納されます。
ステップ 4: CORBA クライアント・アプリケーションの記述
CORBA サーバ・アプリケーションとのセッションに参加するには、CORBA クライアント・アプリケーションは CORBA オブジェクトのオブジェクト・リファレンスを取得してそのオブジェクトのオペレーションを呼び出すことができなければなりません。これを実現するには、CORBA クライアント・アプリケーションは以下のことを行う必要があります。
以降の節では、Basic サンプル・アプリケーションのクライアント・アプリケーションの一部を使用して、これらのステップについて説明します。Basic サンプル・アプリケーションについては、『BEA Tuxedo CORBA University サンプル・アプリケーション』を参照してください。Basic サンプル・アプリケーションは、BEA Tuxedo ソフトウェア・キットの次のディレクトリに格納されています。
drive:¥tuxdir¥samples¥corba¥university¥basic
ORB の初期化
すべての CORBA クライアント・アプリケーションは、最初に ORB を初期化する必要があります。
CORBA C++ クライアント・アプリケーションから ORB を初期化するには、次のコードを使用します。
CORBA::ORB_var orb=CORBA::ORB_init(argc, argv, ORBid);
一般に、ORBid は指定されず、初期化中に指定されたデフォルトの ORBid が使用されます。ただし、CORBA クライアント・アプリケーションが実行されているマシンで CORBA サーバ・アプリケーションも実行されており、CORBA クライアント・アプリケーションが別の BEA Tuxedo ドメインのサーバ・アプリケーションにアクセスする場合は、デフォルト ORBid を上書きする必要があります。そのためには、ORBid を BEA_IIOP としてハードコードするか、コマンド・ラインで ORBid を _ORBid BEA_IIOP として受け渡します。
CORBA Java クライアント・アプリケーションから ORB を初期化するには、次のコードを使用します。
org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init (args,props);
CORBA Java クライアント・アプレットから ORB を初期化するには、次のコードを使用します。
org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init (this,null);
ここで this は Java アプレットの名前です。
BEA Tuxedo ドメインとの通信の確立
CORBA クライアント・アプリケーションは、Bootstrap オブジェクトを作成します。IIOP リスナ/ハンドラのリストは、パラメータとして提供されるか、TOBJADDR Java プロパティまたはアプレット・プロパティを介して提供されます。1 つの IIOP リスナ/ハンドラは、次のように指定されます。
//host:port
IIOP リスナ/ハンドラが TOBJADDR を介して提供される場合、コンストラクタの 2 番目の引数は null にできます。
IIOP リスナ/ハンドラのホストとポートの組み合わせは、UBBCONFIG ファイルに定義されます。Bootstrap オブジェクトに対して指定されるホストとポートの組み合わせは、BEA Tuxedo ドメインの UBBCONFIG ファイルの ISL パラメータと完全に一致する必要があります。ホストとポートの組み合わせの形式のほかに、大文字、小文字も一致する必要があります。アドレスが一致しない場合、Bootstrap オブジェクトの呼び出しは失敗し、次のメッセージがログ・ファイルに記録されます。
Error: Unofficial connection from client at <tcp/ip address>/<portnumber>
たとえば、UBBCONFIG ファイルの ISL パラメータでネットワーク・アドレスが //TRIXIE::3500 として指定されている場合、Bootstrap オブジェクトで //192.12.4.6.:3500 または //trixie:3500 と指定すると接続が失敗します。
UNIX システムで大文字、小文字の区別を調べるには、ホスト・システムで uname -n コマンドを使用します。Window 2000 で大文字、小文字の区別を調べるには、コントロール・パネルの [ネットワーク] を使用します。
次の C++ と Java の例では、Bootstrap オブジェクトの使い方を示します。
Tobj_Bootstrap* bootstrap = new Tobj_Bootstrap(orb, “//host:port”);
Java クライアント・アプリケーションの有効な IIOP リスナ/ハンドラを取得するには、次のコマンドを使用します。
Properties prop = Tobj_Bootstrap.getRemoteProperties();
注記 BEA Tuxedo 8.0 は、リモート Java クライアント・アプリケーションだけをサポートします。getNativeProperties() メソッドを使用する場合、ORB を初期化するときにエラーが発生します。これは、BEA Tuxedo 8.0 にはリモート Java クライアント・アプリケーション用の JAR ファイルしか用意されていないからです。
次のコマンドで、IIOP リスナ/ハンドラを使用します。
Tobj_Bootstrap bootstrap = new Tobj_Bootstrap(orb, “//host:port”);
Java アプレット
Tobj_Bootstrap bootstrap = new Tobj_Bootstrap(orb, “//host:port”, this);
ここで this は Java アプレットの名前です。
BEA Tuxedo ドメインには、複数の IIOP リスナ/ハンドラが存在できます。複数の IIOP リスナ/ハンドラを使用して BEA Tuxedo ドメインにアクセスする場合、Host:Port の組み合わせのリストを Bootstrap オブジェクトに提供します。Bootstrap コマンドの 2 番目のパラメータが空の文字列の場合、Bootstrap オブジェクトは BEA Tuxedo ドメインに接続するまでこのリストを参照します。また、IIOP リスナ/ハンドラのリストは、TOBJADDR に指定することもできます。
複数の BEA Tuxedo ドメインにアクセスする場合、アクセスする BEA Tuxedo ドメインごとに Bootstrap オブジェクトを作成する必要があります。
注記 サードパーティ・クライアント ORB は、CORBA インターオペラブル・ネーミング・サービス (INS) メカニズムを使用して BEA Tuxedo ドメインとそのサービスにアクセスできます。CORBA INS を使用すると、サードパーティ・クライアント ORB は、自身の resolve_initial_references() 関数を使用して BEA Tuxedo ドメインによって提供される CORBA サービスにアクセスし、標準 OMG IDL から生成されたスタブを使用してドメインから返されたインスタンスを処理できます。インターオペラブル・ネーミング・サービスの使い方については、『BEA 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 オブジェクトには以下のメソッドがあります。
入力キーに完全に一致するファクトリのシーケンスを返します。
入力キーに一致する 1 つのファクトリを返します。
名前コンポーネントの ID フィールドが入力引数に一致するファクトリのシーケンスを返します。
ファクトリの CORBA 名前コンポーネントの ID フィールドが入力引数に一致する 1 つのファクトリを返します。
次の 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 クライアント・アプリケーションの実行可能ファイルを生成します。このコマンドは、静的起動を使用するインターフェイスのクライアント・スタブ、関連付けられるヘッダ・ファイル、および標準の BEA Tuxedo ライブラリを組み合わせてクライアント実行可能ファイルを生成します。buildobjclient コマンドの構文については、『BEA Tuxedo コマンド・リファレンス』.を参照してください。
CORBA Java クライアント・アプリケーションをコンパイルする場合、BEA Tuxedo 環境オブジェクトの Java クラスを含んだ Java ARchive (JAR) ファイルを CLASSPATH に追加する必要があります。JDK バージョン 1.2 を使用する場合、m3envobj.jar ファイルは次のディレクトリに格納されています。
tuxdir/udataobj/java/jdk
クライアント・アプリケーションとして動作するサーバ・アプリケーション
CORBA クライアント・アプリケーションからの要求を処理するには、CORBA サーバ・アプリケーションは別のサーバ・アプリケーションに処理を要求する必要が生じる場合があります。このような場合、CORBA サーバ・アプリケーションは CORBA クライアント・アプリケーションとして動作します。
CORBA クライアント・アプリケーションとして動作するには、CORBA サーバ・アプリケーションは現在の BEA Tuxedo ドメインの Bootstrap オブジェクトを取得する必要があります。CORBA サーバ・アプリケーションの Bootstrap オブジェクトは、TP::Bootstrap (CORBA C++ クライアント・アプリケーションの場合) または TP.Bootstrap (CORBA Java クライアント・アプリケーションの場合) を介して既に使用可能になっています。CORBA サーバ・アプリケーションは、FactoryFinder オブジェクトを使用して、CORBA クライアント・アプリケーションの要求を満たす CORBA オブジェクトのファクトリを検索します。
Java2 アプレットの使い方
BEA 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 2000 の [スタート] メニューから、[プログラム] オプションを選択します。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 を参照してください。
![]() |
![]() |
![]() |
![]() |
||
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |