目次 前 次 PDF


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

CORBAクライアント・アプリケーションの作成
このトピックには次の項が含まれます:
注意:
サード・パーティのCORBA Java ORBのテクニカル・サポートは、各ベンダーによって提供されます。Oracle Tuxedoでは、サード・パーティのCORBA Java ORBに関する技術的なサポートやマニュアルは提供していません。
CORBA C++クライアント・アプリケーションの開発プロセスのサマリー
CORBA C++クライアント・アプリケーションの作成手順は次のとおりです。
 
このプロセスの各手順については、以降の項で詳しく説明します。
CORBA C++クライアント・アプリケーションのOracle Tuxedo開発環境には、以下のものが含まれます。
idlコマンド。OMG IDLファイルをコンパイルし、CORBAインタフェースで必要なクライアント・スタブを生成します。
buildobjclientコマンド。CORBA C++クライアント・アプリケーションの実行可能ファイルを生成します。
ステップ1: OMG IDLファイルの取得
一般に、使用可能なインタフェースと操作用のOMG IDLファイルは、アプリケーション設計者からクライアント・プログラマに提供されます。この項では、Basicサンプル・アプリケーション用のOMG IDLを示します。リスト2-1に、次のインタフェースを定義するunivb.idlファイルを示します。
 
リスト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; // 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(
);
};
};
ステップ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コマンドとオプションの詳細は、『Oracle Tuxedoコマンド・リファレンス』を参照してください。
CORBAクライアント・アプリケーションを作成する場合は、以下のものを使用します。
JDKバージョン1.2を使用する場合は、idltojavaコマンドを使用してOMG IDLファイルをコンパイルできます。idltojavaコマンドの詳細は、JDKバージョン1.2のドキュメントを参照してください。
idltojavaコマンドまたはIDLコンパイラは、次のものを生成します。
OMG IDLで定義された各例外は、例外クラスとそのヘルパー・クラスおよびホルダー・クラスを定義することに注意してください。コンパイルされた.classファイルは、CORBAクライアント・アプリケーションのCLASSPATHに存在する必要があります。
また、idltojavaコマンドまたはIDLコンパイラはCORBAオブジェクトの操作のシグネチャを含んだスケルトンを生成します。生成されたスケルトン情報は、_interfaceImplBaseファイルに格納されます。
ステップ4: CORBAクライアント・アプリケーションの記述
CORBAサーバー・アプリケーションとのセッションに参加するには、CORBAクライアント・アプリケーションはCORBAオブジェクトのオブジェクト参照を取得してそのオブジェクトの操作を呼び出すことができる必要があります。これを実現するには、CORBAクライアント・アプリケーション・コードで次のことを行う必要があります。
1.
2.
3.
4.
5.
以降の項では、Basicサンプル・アプリケーションのクライアント・アプリケーションの一部を使用して、これらのステップについて説明します。Basicサンプル・アプリケーションの詳細は、『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オブジェクトの呼出しは失敗し、次のメッセージがログ・ファイルに記録されます。
エラー: クライアントからの非公式の接続(アドレス<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アプレットの名前です
1つの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の詳細な使用方法は、『CORBAプログラミング・リファレンス』を参照してください。
FactoryFinderオブジェクトへの初期参照の解決
CORBAクライアント・アプリケーションは、CORBAアプリケーションのサービスを提供する環境オブジェクトへの初期参照を取得する必要があります。Bootstrapオブジェクトのresolve_initial_references操作を呼び出すと、FactoryFinder、InterfaceRepository、SecurityCurrent、TransactionCurrent、NotificationService、Tobj_SimpleEventsServiceおよびNameService環境オブジェクトの参照を取得できます。この操作に渡される引数は、目的のオブジェクト参照の名前を含む文字列です。CORBAクライアント・アプリケーションで使用する環境オブジェクトについてのみ初期参照を取得する必要があります。
次のC++とJavaの例では、Bootstrapオブジェクトを使用してFactoryFinderオブジェクトへの初期参照を解決する方法を示します。
C++
//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());
Java
//Resolve 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クライアント・アプリケーションの実行可能ファイルを生成します。このコマンドは、静的起動を使用するインタフェースのクライアント・スタブ、関連付けられるヘッダー・ファイル、および標準のOracle Tuxedoライブラリを組み合せてクライアント実行可能ファイルを生成します。buildobjclientコマンドの構文については、『Oracle 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社から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にある『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を参照してください。

Copyright ©1994, 2017,Oracle and/or its affiliates. All rights reserved