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

     前  次    新規ウィンドウで目次を開く    PDFとして表示 - 新規ウィンドウ  Adobe Readerを入手 - 新規ウィンドウ
コンテンツはここから始まります

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; // 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クライアント・アプリケーションを作成する場合は、以下のものを使用します。

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サンプル・アプリケーションについては、『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アプレットの名前です。

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プログラミング・リファレンス』を参照してください。

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

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オブジェクトには以下のメソッドがあります。

次の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クライアント・アプリケーションの実行ファイルを構築するには、buildobjclientコマンドを使用する必要があります。

 


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

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にある「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を参照してください。


  先頭に戻る       前  次