![]() ![]() ![]() ![]() ![]() ![]() |
注意: | 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; // bitmask of days
unsigned short start_hour; // whole hours in military time
unsigned short duration; // minutes
};
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 = all
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
コマンドとオプションの詳細は、『Oracle Tuxedoコマンド・リファレンス』を参照してください。
CORBAクライアント・アプリケーションを作成する場合は、以下のものを使用します。
idltojava
コマンドまたはIDLコンパイラは、以下のものを生成します。
OMG IDLで定義された各例外は、例外クラスとそのヘルパー・クラスおよびホルダー・クラスを定義します。コンパイルされた.class
ファイルは、CORBAクライアント・アプリケーションのCLASSPATH
に存在する必要があります。
また、idltojava
コマンドまたはIDLコンパイラはCORBAオブジェクトのオペレーションのシグネチャを含んだスケルトンを生成します。生成されたスケルトン情報は、_
interfaceImplBase
ファイルに格納されます。
CORBAサーバー・アプリケーションとのセッションに参加するには、CORBAクライアント・アプリケーションはCORBAオブジェクトのオブジェクト参照を取得してそのオブジェクトのオペレーションを呼び出すことができなければなりません。これを実現するには、CORBAクライアント・アプリケーションは以下のことを行う必要があります。
以降の項では、Basicサンプル・アプリケーションのクライアント・アプリケーションの一部を使用して、これらのステップについて説明します。Basicサンプル・アプリケーションについては、『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オブジェクトの呼出しは失敗し、次のメッセージがログ・ファイルに記録されます。
エラー: クライアントからの非公式の接続(アドレス<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は、Oracle Tuxedoドメインによって提供されるCORBAサービスに自身のresolve_initial_references() 関数を使用してアクセスし、標準OMG IDLから生成されたスタブを使用して、ドメインから戻されたインスタンスを処理できます。Interoperable Naming Serviceの詳細な使用方法は、CORBAプログラミング・リファレンスを参照してください。 |
CORBAクライアント・アプリケーションは、自身にサービスを提供する環境オブジェクトへの初期参照を取得する必要があります。Bootstrapオブジェクトのresolve_initial_references
オペレーションを呼び出すと、FactoryFinder、InterfaceRepository、SecurityCurrent、TransactionCurrent、NotificationService、Tobj_SimpleEventsServiceおよびNameService環境オブジェクトの参照を取得できます。このオペレーションに渡される引数は、目的のオブジェクト参照の名前を含む文字列です。CORBAクライアント・アプリケーションで使用する環境オブジェクトについてのみ初期参照を取得する必要があります。
次のC++とJavaの例では、Bootstrapオブジェクトを使用してFactoryFinderオブジェクトへの初期参照を解決する方法を示します。
//Resolve 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());
//Resolve 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
コマンドの構文については、『Oracle 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
にある「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
を参照してください。
![]() ![]() ![]() |