|
注意 : | 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++ クライアント アプリケーションの Oracle Tuxedo 開発環境には、以下のものが含まれます。
一般に、使用可能なインタフェースとオペレーション用の OMG IDL ファイルは、アプリケーション設計者からクライアント プログラマに提供されます。この節では、Basic サンプル アプリケーション用の OMG IDL を示します。コードリスト 2-1 に、univb.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(
);
};
};
CORBA クライアント アプリケーションでの要求で使用する呼び出し方式 (静的または動的) を選択します。CORBA クライアント アプリケーションでは、どちらの呼び出し方式も使用できます。
静的起動と動的起動の概要については、「静的起動と動的起動」を参照してください。
以後、このトピックでは、CORBA クライアント アプリケーションで静的起動を使用することを選択したものとして説明を進めます。動的起動を選択した場合は、「動的起動インタフェースの使い方」を参照してください。
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
ファイルに格納されます。
CORBA サーバ アプリケーションとのセッションに参加するには、CORBA クライアント アプリケーションは CORBA オブジェクトのオブジェクト参照を取得してそのオブジェクトのオペレーションを呼び出すことができなければなりません。これを実現するには、CORBA クライアント アプリケーションは以下のことを行う必要があります。
以降の節では、Basic サンプル アプリケーションのクライアント アプリケーションの一部を使用して、これらのステップについて説明します。Basic サンプル アプリケーションについては、『Tuxedo CORBA University サンプル アプリケーション』を参照してください。Basic サンプル アプリケーションは、Oracle Tuxedo ソフトウェア キットの次のディレクトリに格納されています。
drive:\tuxdir\samples\corba\university\basic
すべての CORBA クライアント アプリケーションは、最初に ORB を初期化する必要があります。
CORBA C++ クライアント アプリケーションから ORB を初期化するには、次のコードを使用します。
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
として受け渡します。
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 オブジェクトの使い方を示します。
Tobj_Bootstrap* bootstrap = new Tobj_Bootstrap
(orb, “//host:port”);
Tobj_Bootstrap bootstrap = new Tobj_Bootstrap(orb,
“//host:port”,this
);
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 プログラミング リファレンス』を参照してください。 |
CORBA クライアント アプリケーションは、自身にサービスを提供する環境オブジェクトへの初期参照を取得する必要があります。Bootstrap オブジェクトの resolve_initial_references
オペレーションを呼び出すと、FactoryFinder、InterfaceRepository、SecurityCurrent、TransactionCurrent、NotificationService、Tobj_SimpleEventsService、および NameService 環境オブジェクトの参照を取得できます。このオペレーションに受け渡す引数は、目的のオブジェクト参照の名前を含む文字列です。CORBA クライアント アプリケーションで使用する環境オブジェクトの初期参照だけを取得する必要があります。
次の C++ と Java の例では、Bootstrap オブジェクトを使用して FactoryFinder オブジェクトへの初期参照を解決する方法を示します。
// 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());
// Factory Finder の解決
org.omg.CORBA.Object off = bootstrap.resolve_initial_references
(“FactoryFinder”);
FactoryFinder ff=FactoryFinderHelper.narrow(off);
CORBA クライアント アプリケーションは、CORBA オブジェクトの参照をファクトリから取得します。ファクトリは、別の CORBA オブジェクトの参照を返し、自身をファクトリとして登録する任意の CORBA オブジェクトです。CORBA クライアント アプリケーションは、ファクトリのオペレーションを呼び出して特定のタイプの CORBA オブジェクトへのオブジェクト参照を取得します。ファクトリを使用するには、CORBA クライアント アプリケーションは必要なファクトリを検索できなければなりません。FactoryFinder オブジェクトは、そのために役立ちます。FactoryFinder オブジェクトの機能の登録については、「CORBA クライアント アプリケーションの開発概念」を参照してください。
FactoryFinder オブジェクトには以下のメソッドがあります。
次の C++ と Java の例では、FactoryFinder find_one_factory_by_id
メソッドを使用して、Basic サンプル アプリケーションの CORBA クライアント アプリケーションで使用される Registrar オブジェクトのファクトリを取得する方法を示します。
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()
);
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 オブジェクトのオペレーションを呼び出します。
次の C++ と Java の例では、Registrar オブジェクトのファクトリを取得して、そのオブジェクトの get_courses_details()
メソッドを呼び出す方法を示します。
UniversityB::Registrar_var var_Registrar = var_RegistrarFactory->
find_Registrar();
UniversityB::CourseDetailsList_var course_details_list = Registrar_oref->
get_course_details(CourseNumberList);
UniversityB.Registrar gRegistrarObjRef = F.find_registrar();
gRegistrarObjRef.get_course_details(selected_course_numbers);
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 オブジェクトのファクトリを検索します。
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 では、ブラウザ ウィンドウの [ヘルプ] メニューから [Plug-ins について] オプションを選択します。Java Plug-In がインストールされている場合は、次の文字列が表示されます。
application/x-java-applet;version 1.2
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
を参照してください。