Tuxedo CORBA プログラミング リファレンス

     前  次    新しいウィンドウで目次を開く     
ここから内容の開始

共同クライアント/サーバ

この章では、CORBA 共同クライアント/サーバおよび C++ OracleWrapper Callbacks API のプログラミング要件を説明します。

注意 : Oracle Tuxedo CORBA Java クライアントと Oracle Tuxedo CORBA Java クライアント ORB は Tuxedo 8.1 で非推奨になり、Tuxedo 9.x ではサポートされなくなりました。Oracle Tuxedo CORBA Java クライアントと Oracle Tuxedo CORBA Java クライアント ORB のすべてのテキスト リファレンスや関連するサンプル コードは、以下の場合にのみ使用してください。
注意 : サード パーティの CORBA Java ORB のテクニカル サポートは、各ベンダによって提供されます。Oracle Tuxedo では、サード パーティの CORBA Java ORB に関する技術的なサポートやマニュアルは提供していません。

ここでは、以下の内容について説明します。

 


はじめに

プログラマは、Oracle Tuxedo の CORBA クライアントと共同クライアント/サーバ (オブジェクト呼び出しの受信と処理が可能なクライアント) のどちらかに合わせて、クライアントの main() を記述します。main() は Oracle Tuxedo CORBA 環境オブジェクトを使用して接続を確立し、セキュリティを設定し、トランザクションを開始します。

Oracle Tuxedo クライアントは、オブジェクトのオペレーションを呼び出します。DII の場合、クライアント コードによって DII Request オブジェクトが作成され、その DII Request の 2 つのオペレーションのうち一方が呼び出されます。静的呼び出しの場合は、クライアント コードによって、通常の呼び出しに似た呼び出しが実行されます。これは結果的には、生成されたクライアント スタブ内のコードを呼び出すことになります。加えて、クライアントのプログラマは OMG によって定義される ORB インタフェースと、Oracle Tuxedo ソフトウェアと共に供給される Oracle Tuxedo CORBA 環境オブジェクトを使用して、Oracle Tuxedo 固有の機能を実行します。

Oracle Tuxedo 共同クライアント/サーバ アプリケーションでは、クライアント コードはコールバック Oracle Tuxedo オブジェクト用のサーバとして動作できるように構成する必要があります。そのようなクライアントは TP フレームワークを使用しません。また、Oracle Tuxedo システムの管理下には置かれません。これはプログラミングに影響を及ぼすほか、CORBA 共同クライアント/サーバには Oracle Tuxedo CORBA サーバと同じようなスケーラビリティや信頼性がなく、また TP フレームワークで使用できるような状態管理機能やトランザクション機能もないということを意味します。これらの特性を必要とするユーザは、Oracle Tuxedo CORBA のクライアントではなくサーバに、オブジェクトを実装するようアプリケーションを構成する必要があります。

以下のセクションでは、Oracle Tuxedo クライアントにコールバックのサポートを追加するために使用するメカニズムを説明します。場合によっては、このメカニズムは TP フレームワークを使用する Oracle Tuxedo サーバのメカニズムと対比されます。

メイン プログラムおよびサーバの初期化

Oracle Tuxedo サーバでは、buildobjserver コマンドを使用して、C++ サーバ用のメイン プログラムを作成します。Oracle Tuxedo のリリース 8.0 以降では、Java サーバはサポートされていません。サーバのメイン プログラムは、サーバ機能における Oracle Tuxedo および CORBA 関連の初期化を担当します。しかし、Server オブジェクトの実装を行うので、サーバ アプリケーションの初期化と停止の方法をカスタマイズする機会があります。サーバのメイン プログラムは、Server オブジェクトに対し、適切な時点で自動的にメソッドを呼び出します。

対照的に、Oracle Tuxedo CORBA 共同クライアント/サーバでは、Oracle Tuxedo CORBA クライアントと同様に、ユーザがメイン プログラムを作成し、すべての初期化を担当します。メイン プログラムの完全な制御権があり、都合の良いように初期化および停止のコードを指定することができるため、Server オブジェクトを実装する必要はありません。

共同クライアント/サーバのみで必要な初期化については、「サーバント」で説明します。

サーバント

共同クライアント/サーバ用のサーバント (メソッド コード) は、サーバ用のサーバントに非常に似ています。すべてのビジネス ロジックが、同じように記述されます。違いは、TP フレームワークを使用しないことによって生じたものです。つまり主な相違点は、CORBA 関数を TP フレームワーク経由で間接的に使用するのではなく、直接使用するということです。

Oracle Tuxedo CORBA サーバでは、Server インタフェースを使用して、ORB がオブジェクトに対する要求を受信したときに、TP フレームワークがそのオブジェクトのためのサーバントの作成をユーザに求められるようにします。しかし、共同クライアント/サーバでは、要求が届く前にサーバントを作成する役割をユーザ プログラムが担います。したがって、Server インタフェースは不要です。通常、プログラムはサーバントを作成してから、オブジェクトへのリファレンスを渡す前に、そのオブジェクトをアクティブ化します。これには、サーバントと ObjectId を使用します。ObjectId はおそらく、システムで生成されています。そのようなオブジェクトは、コールバックの処理に使用されていると考えられます。したがって、サーバントは既に存在しており、オブジェクトは、そのオブジェクトに対する要求が届く前に、アクティブ化されます。

C++ 共同クライアント/サーバの場合、ある特定のオペレーションを実行するには、TP インタフェースを呼び出すのではなく、TP インタフェースの内部機能である ORB と POA の呼び出しをクライアント サーバントから直接行います。また、ORB および POA との対話の多くは、すべてのアプリケーションで同じなので、使いやすくするため、クライアント ライブラリにより、単一のオペレーションを使用して同じことを行う便利なラッパー オブジェクトを提供することもできます。便利なラッパー オブジェクトの使い方については、「サポートされているコールバック オブジェクト モデル」および「OracleWrapper Callbacks を使用してのコールバック オブジェクトの準備」を参照してください。

スケルトンからのサーバントの継承

コールバックをサポートするクライアントでは、サーバの場合と同様に、IDL コンパイラ (idl) によって生成されたものと同じスケルトン クラス名から継承した実装クラスを記述します。

C++ におけるスケルトンからの継承例

以下は、次の IDL を想定した C++ の例です。

interface Hospital{ … };

idl コマンドによって生成されたスケルトンには、次のように、ユーザ記述クラスの継承元である「スケルトン」クラス POA_Hospital が包含されます。

class Hospital_i : public POA_Hospital { ... };

サーバでは、スケルトン クラスは TP フレームワーク クラス Tobj_ServantBase から継承します。これがさらに、定義済みの PortableServer::ServantBase から継承しています。

共同クライアント/サーバのコールバック オブジェクトの実装における継承ツリーは、サーバにおけるものとは異なります。スケルトン クラスは TP フレームワーク クラス Tobj_ServantBase からは継承しませんが、直接 PortableServer::ServantBase から継承します。この振る舞いは、idl コマンドで -P オプションを指定することによって行われます。

サーバントの継承ツリーに Tobj_ServantBase クラスがないということは、そのサーバントに activate_object メソッドと deactivate_object メソッドがないことを意味します。サーバでは、これらのメソッドは TP フレームワークによって呼び出され、サーバントに対してあるメソッドを呼び出す前に、そのサーバントの状態を動的に初期化して保存します。コールバックをサポートするクライアントの場合は、明示的にサーバントを作成し、サーバントの状態を初期化するコードを記述する必要があります。

サポートされているコールバック オブジェクト モデル

Oracle Tuxedo CORBA は、4 種類のコールバック オブジェクトをサポートしており、その中で一般的である 3 種類に対してはラッパーを提供しています。これらのオブジェクトは、POA ポリシーにおける 3 つの組み合わせに対応しています。POA ポリシーは、使用可能なオブジェクトの型と、オブジェクト参照の型の両方を制御します。

適用できる POA ポリシーは、以下のとおりです。

これらのオブジェクトについては、ORB と POA による扱われ方の詳細ではなく、主に動作特性との関連で説明します。これらの詳細は、直接的な ORB および POA の呼び出し (CORBA サーバに関して特別な知識が少し必要) を使用するか、または ORB および POA の呼び出しを隠ぺいする OracleWrapper Callbacks インタフェース (詳細については考慮しないユーザ向け) を使用して、以下のセクションで説明します。

注意 : Transient/UserId ポリシーの組み合わせは、特に重要なものであるとは見なされません。永続的なケースのどちらかに類似した方式で、ユーザが POA を使用して自給することは可能ですが、Oracle Tuxedo ラッパーは、特にそのために有用なわけではありません。
注意 : Oracle Tuxedo CORBA のネイティブ共同クライアント/サーバでは、永続ポリシーはどちらもサポートされません。一時ポリシーのみがサポートされます。

リモート共同クライアント/サーバ オブジェクトを呼び出すためのサーバのコンフィグレーション

Oracle Tuxedo サーバがリモート共同クライアント/サーバ オブジェクト、つまり Oracle Tuxedo ドメイン外部の共同クライアント/サーバ オブジェクトを呼び出せるようにするには、アウトバウンド IIOP が有効になるようにサーバをコンフィグレーションする必要があります。この機能は、IIOP サーバ リスナ (ISL) コマンドで -O (大文字の O) オプションを指定することによって有効化されます。-O オプションを設定すると、IIOP リスナ ハンドラ (ISH) に接続されていない共同クライアント/サーバ オブジェクトに対するアウトバウンド呼び出し (アウトバウンド IIOP) が有効になります。

ISL コマンド オプションの設定は、サーバの UBBCONFIG ファイルの SERVERS セクションで行います。アウトバウンド IIOP のサポートには、少量の予備リソースが必要なので、デフォルトではアウトバウンド IIOP は無効になっています。詳細については、『Oracle Tuxedo アプリケーションの設定』の「ISL コマンドを使用してアウトバウンド IIOP をコンフィグレーションする」および『Tuxedo コマンド リファレンス』の「ISL(1)」を参照してください。

CORBA を使用してのコールバック オブジェクトの準備 (C++ 共同クライアント/サーバのみ)

CORBA を使用して Oracle Tuxedo C++ コールバック オブジェクトを設定するには、クライアントは次の処理を行う必要があります。

  1. コールバック オブジェクト モデルに適したポリシーを備える POA との間に接続を確立します。これはデフォルトで利用可能なルート POA になることも、新規 POA の作成が必要となることもあります。
  2. サーバント (インタフェースの C++ 実装クラスのインスタンス) を作成します。
  3. サーバントでコールバック オブジェクトに対する要求を受け付ける準備ができていることを POA に通知します。技術的には、これはクライアントが POA 内のオブジェクトを activate すること、つまりサーバントと ObjectId を POA のアクティブ オブジェクト マップに入れることを意味します。
  4. ネットワークからの要求の受け付けを開始するように、POA に指示します。これはつまり、POA 自身をアクティブ化するということです。
  5. コールバック オブジェクトのオブジェクト参照を作成します。
  6. オブジェクト参照を割り当てます。これは通常、パラメータとしてコールバック オブジェクト参照を使用して別のオブジェクトに対する呼び出しを行うことによってなされます。この別のオブジェクトは後になってから、コールバック オブジェクトの呼び出し (コールバック呼び出しの実行) を行います。

クライアントが既に ORB へのリファレンスを取得済みであれば、このタスクの実行に必要な ORB および POA との対話は 4 回です。コード リスト 11-1 に示すモデルのようになります。このモデルでは、ルート POA のみが必要とされます。

コード リスト 11-1 Transient/SystemId モデル
// コールバック オブジェクトのサーバントを作成
Catcher_i* my_catcher_i = new Catcher_i();
// ルート POA リファレンスを取得して、POA をアクティブ化
1 CORBA::Object_var oref =
orb->resolve_initial_references("RootPOA");
2 PortableServer::POA_var root_poa =
PortableServer::POA::_narrow(oref);
3 root_poa -> the_POAManager() -> activate();
4 PortableServer::objectId_var temp_Oid =
root_poa ->activate_object ( my_catcher_i );
5 oref = root_poa->create_reference_with_id(
temp_Oid, _tc_Catcher->id() );
6 Catcher_var my_catcher_ref = Catcher::_narrow( oref );

Persistent/UserId モデルを使用するには、POA 作成時に、いくつかの追加手順が必要です。さらに、クライアントサイドで ObjectId を指定します。これには、さらに別の手順が必要です。コード リスト 11-2 に示すモデルのようになります。

コード リスト 11-2 Persistent/UserId モデル
    Catcher_i* my_catcher_i = new Catcher_i();
const char* oid_str = "783";
1 PortableServer::objectId_var oid =
PortableServer::string_to_objectId(oid_str);
// ルート POA を見つける
2 CORBA::Object_var oref =
orb->resolve_initial_references("RootPOA");
3 PortableServer::POA_var root_poa =
PortableServer::POA::_narrow(oref);
// Persistent/UserId POA を作成してアクティブ化
4 CORBA::PolicyList policies(2);
5 policies.length(2);
6 policies[0] = root_poa->create_lifespan_policy(
PortableServer::PERSISTENT);
7 policies[1] = root_poa->create_id_assignment_policy(
PortableServer::USER_ID );
8 PortableServer::POA_var my_poa_ref =
root_poa->create_POA(
"my_poa_ref", root_poa->the_POAManager(), policies);
9 root_poa->the_POAmanager()->activate();
// コールバック オブジェクトのオブジェクト参照を作成
10 oref = my_poa_ref -> create_reference_with_id(
oid, _tc_Catcher->id());
11 Catcher_var my_catcher_ref = Catcher::_narrow( oref );
// オブジェクトをアクティブ化
12 my_poa_ref -> activate_object_with_id( oid, my_catcher_i );
// callback ref を渡す呼び出しを行う
foo -> register_callback ( my_catcher_ref );

ここに記載したインタフェースとオペレーションはすべて、標準的な CORBA インタフェースおよびオペレーションです。

OracleWrapper Callbacks を使用してのコールバック オブジェクトの準備

C++ の共同クライアント/サーバのどちらかを記述するには、OracleWrapper Callbacks API を使用します。

C++ での OracleWrapper Callbacks の使用

コールバック オブジェクトに必要なコードは、コールバックをサポートするどのクライアントについてもほぼ同一であるため、共同クライアント/サーバ用のライブラリで提供されている OracleWrapper を使用すると便利なことがあります。

コード リスト 11-3 に示すように、OracleWrapper は IDL で記述されます。

コード リスト 11-3 OracleWrapper IDL
// ファイル : BEAWrapper
#ifndef _BEA_WRAPPER _IDL_
#define _BEA_WRAPPER _IDL_
#include <orb.idl>
#include <PortableServer.idll>
#pragma prefix “beasys.com”
module BEAWrapper {
interface Callbacks
{
exception ServantAlreadyActive{ };
exception ObjectAlreadyActive { };
exception NotInRequest{ };

// 一時コールバック オブジェクトを設定
// -- POA を準備し、オブジェクトをアクティブ化し、objref を返す
Object start_transient(
in PortableServer::Servant Servant,
in CORBA::RepositoryId rep_id)
raises (ServantAlreadyActive);
       // persistent/systemid コールバック オブジェクトを設定
Object start_persistent_systemid(
in PortableServer::Servant servant,
in CORBA::Repository rep_id,
out string stroid)
raises (ServantAlreadyActive);
       // persistent/systemid コールバック オブジェクト
// の設定に戻す
Object restart_persistent_systemid(
in PortableServer::Servant servant,
in CORBA::RepositoryId rep_id,
in string stroid)
raises (ServantAlreadyActive, ObjectAlreadyActive);
       // persistent/userid コールバック オブジェクトを設定
Object start_persistent_userid(
in PortableServer::Servant servant,
in CORBA::RepositoryId rep_id,
in string stroid)
raises (ServantAlreadyActive, ObjectAlreadyActive);
       // 所定のサーバントによる、特定のコールバック オブジェクトの
// 処理を停止
void stop_object( in PortableServer::Servant servant);
       //すべてのコールバック オブジェクト処理を停止
void stop_all_objects();
      // 現在の要求に対する oid 文字列を取得
string get_string_oid() raises (NotInRequest)
;
};
}
#endif /* _BEA_WRAPPER _IDL_ */

コード リスト 11-4 に示すように、OracleWrapper は C++ で記述されます。

コード リスト 11-4 C++ 宣言 (beawrapper.h 内)
#ifndef _BEAWRAPPER_H_
#define _BEAWRAPPER_H_
#include <PortableServer.h>
class BEAWrapper{
class Callbacks{
public:
Callbacks (CORBA::ORB_ptr init_orb);
            CORBA::Object_ptr start_transient ( 
PortableServer::Servant servant,
const char * rep_id);
            CORBA::Object_ptr start_persistent_systemid (
PortableServer::Servant servant,
const char * rep_id,
char * & stroid);
            CORBA::Object_ptr restart_persistent_systemid (
PortableServer::Servant servant,
const char * rep_id,
const char * stroid);
            CORBA::Object_ptr start_persistent_userid (
PortableServer::Servant servant,
const char * rep_id,
const char * stroid);
              void stop_object(PortableServer::Servant servant);
              char* get_string_oid ();
              void stop_all_objects();
             ~Callbacks();
private:
              static CORBA::ORB_var orb_ptr;
              static PortableServer::POA_var root_poa;
static PortableServer::POA_var trasys_poa;
static PortableServer::POA_var persys_poa;
static PortableServer::POA_var peruser_poa;
};
};
#endif // _BEAWRAPPER_H_

 


C++ OracleWrapper Callbacks インタフェース API

この C++ OracleWrapper Callbacks インタフェース API については、以下のセクションで説明します。

 


Callbacks

概要

Callbacks インタフェースへのリファレンスを返します。

C++ バインディング

BEAWrapper::Callbacks( CORBA::ORB_ptr init_orb);

引数

init_orb

これ以降のすべてのオペレーションに使用する ORB。

例外

CORBA::IMP_LIMIT

BEAWrapper::Callbacks クラスは既に ORB ポインタでインスタンス化されています。プロセス内で使用できるこのクラスのインスタンスは 1 つだけです。より柔軟性が必要なユーザは、POA を直接使用する必要があります。

説明

コンストラクタは、Callbacks インタフェースへのリファレンスを返します。複数のスレッドが使用されている場合でも、プロセスのために作成するそのようなオブジェクトは 1 つのみとします。複数のオブジェクトを使用すると、未定義の振る舞いが発生します。

戻り値

Callbacks オブジェクトへのリファレンス。

 


start_transient

概要

オブジェクトをアクティブ化し、ORB および POA を適切な状態に設定し、アクティブ化したオブジェクトへのオブジェクト参照を返します。

IDL

Object start_transient( in PortableServer::Servant   servant, 
in CORBA::RepositoryId rep_id)
raises ( ServantAlreadyActive );

C++ バインディング

CORBA::Object_ptr start_transient( 
PortableServer::Servant servant,
const char* rep_id);

引数

servant

インタフェースの C++ 実装クラスのインスタンス。

rep_id

インタフェースのリポジトリ id

例外

ServantAlreadyActive

サーバントは既にコールバックに使用されています。サーバントは、ObjectId が 1 つのコールバックのみに使用できます。複数の ObjectId があるオブジェクトに対するコールバックを受信するには、複数のサーバントを作成して、個別にアクティブ化する必要があります。同じサーバントを再利用できるのは、stop_object オペレーションがシステムに対して、サーバントを元の ObjectId について使用することを止めるように指示する場合のみです。

CORBA::BAD_PARAM

リポジトリ ID が NULL 文字列であったか、サーバントが NULL ポインタでした。

説明

このオペレーションは、次の作業を実行します。

戻り値

CORBA::Object_ptr

システムが生成した ObjectId と、ユーザが指定した rep_id で作成されたオブジェクトへのリファレンス。オブジェクト参照は、特定のオブジェクト用に定義された _narrow() オペレーションを呼び出すことによって、特定のオブジェクト型に変換する必要があります。変換が終了したときにオブジェクトを解放するのは、呼び出し側の役割です。

 


start_persistent_systemid

概要

オブジェクトをアクティブ化し、ORB および POA を適切な状態に設定し、出力パラメータ stroid を設定し、アクティブ化したオブジェクトへのオブジェクト参照を返します。

IDL

Object start_persistent_systemid( 
in PortableServer::Servant servant,
in CORBA::RepositoryId rep_id,
out string stroid)
raises ( ServantAlreadyActive );

C++ バインディング

CORBA::Object_ptr start_persistent_systemid(
PortableServer::Servant servant,
const char* rep_id,
char*& stroid);

引数

servant

インタフェースの C++ 実装クラスのインスタンス。

rep_id

インタフェースのリポジトリ ID。

stroid

この引数はシステムによって設定され、ユーザにとっては非透過的です。クライアントは、後になって、おそらくはクライアント プロセスが終了して再起動してから、この引数が restart_persistent_systemid でオブジェクトを再アクティブ化する場合に、これを使用します。

例外

ServantAlreadyActive

サーバントは既にコールバックに使用されています。サーバントは、ObjectId が 1 つのコールバックのみに使用できます。複数の ObjectId があるコールバックを受信するには、複数のサーバントを作成して、個別にアクティブ化する必要があります。同じサーバントを再利用できるのは、stop オペレーションがシステムに対して、元の ObjectId についてこのサーバントを使用することを止めるように指示する場合のみです。

CORBA::BAD_PARAMETER

リポジトリ ID が NULL 文字列であったか、サーバントが NULL ポインタでした。

CORBA::IMP_LIMIT

この例外のほかのシステム上の理由に加えて、この状況に特有の理由は、共同クライアント/サーバがポート番号付きでは初期化されておらず、したがって永続オブジェクト参照が作成できないことです。

説明

このオペレーションは、次の作業を実行します。

戻り値

CORBA::Object_ptr

システムが生成した ObjectId と、ユーザが指定した rep_id で作成されたオブジェクト参照。オブジェクト参照は、特定のオブジェクト用に定義された _narrow() オペレーションを呼び出すことによって、特定のオブジェクト型に変換する必要があります。変換が終了したときにオブジェクトを解放するのは、呼び出し側の役割です。

 


restart_persistent_systemid

概要

オブジェクトをアクティブ化し、ORB および POA を適切な状態に設定し、アクティブ化したオブジェクトへのオブジェクト参照を返します。

IDL

Object restart_persistent_systemid( 
in PortableServer::Servant servant,
in CORBA::RepositoryId rep_id,
in string stroid)
raises (ServantAlreadyActive, ObjectAlreadyActive);

C++ バインディング

CORBA::Object_ptr restart_persistent_systemid(
PortableServer::Servant servant,
const char* rep_id
const char* stroid);

引数

servant

インタフェースの C++ 実装クラスのインスタンス。

rep_id

インタフェースのリポジトリ ID。

stroid

作成されているオブジェクト参照内で設定される、ユーザ指定の ObjectId の文字列化されたバージョン。start_persistent_systemid に対する以前の呼び出しから返されたものである必要があります。

例外

ServantAlreadyActive

サーバントは既にコールバックに使用されています。サーバントは、ObjectId が 1 つのコールバックのみに使用できます。複数の ObjectId があるオブジェクトに対するコールバックを受信するには、複数のサーバントを作成して、個別にアクティブ化する必要があります。同じサーバントを再利用できるのは、stop_object オペレーションがシステムに対して、サーバントを元の ObjectId について使用することを止めるように指示する場合のみです。

ObjectAlreadyActive

文字列化された ObjectId は既にコールバックに使用されています。ある特定の ObjectId には、1 つのサーバントしか関連付けられません。別のサーバントに変更する場合は、まず現在使用しているサーバントで stop_object を呼び出す必要があります。

CORBA::BAD_PARAM

リポジトリ ID が NULL 文字列であったか、またはサーバントが NULL ポインタであったか、または指定された ObjectId が事前にシステムによって割り当てられていませんでした。

CORBA::IMP_LIMIT

この例外のほかのシステム上の理由に加えて、この状況に特有の理由は、共同クライアント/サーバがポート番号付きでは初期化されておらず、したがって永続オブジェクト参照が作成できないことです。

説明

このオペレーションは、次の作業を実行します。

戻り値

CORBA::Object_ptr

文字列化された ObjectId stroid と、ユーザが指定した rep_id で作成されたオブジェクト参照。オブジェクト参照は、特定のオブジェクト用に定義された _narrow() オペレーションを呼び出すことによって、特定のオブジェクト型に変換する必要があります。終了したときにオブジェクトを解放するのは、呼び出し側の役割です。

 


start_persistent_userid

概要

オブジェクトをアクティブ化し、ORB および POA を適切な状態に設定し、アクティブ化したオブジェクトへのオブジェクト参照を返します。

IDL

Object start_persistent_userid(
portableServer::Servant a_servant,
in CORBA::RepositoryId rep_id,
in string stroid)
raises ( ServantAlreadyActive, ObjectAlreadyActive );

C++ バインディング

            CORBA::Object_ptr start_persistent_userid (
PortableServer::Servant servant,
const char * rep_id,
const char * stroid);

引数

servant

インタフェースの C++ 実装クラスのインスタンス。

rep_id

インタフェースのリポジトリ ID。

stroid

作成されているオブジェクト参照内で設定される、ユーザ指定の ObjectId の文字列化されたバージョン。stroid は、アプリケーション固有のデータを保持しており、ORB 側からは非透過的です。

例外

ServantAlreadyActive

サーバントは既にコールバックに使用されています。サーバントは、ObjectId が 1 つのコールバックのみに使用できます。複数の ObjectId があるオブジェクトに対するコールバックを受信するには、複数のサーバントを作成して、個別にアクティブ化する必要があります。同じサーバントを再利用できるのは、stop_object オペレーションがシステムに対して、サーバントを元の ObjectId について使用することを止めるように指示する場合のみです。

ObjectAlreadyActive

文字列化された ObjectId は既にコールバックに使用されています。ある特定の ObjectId には、1 つのサーバントしか関連付けられません。別のサーバントに変更する場合は、まず現在使用しているサーバントで stop_object を呼び出す必要があります。

CORBA::BAD_PARAM

リポジトリ ID が NULL 文字列であったか、サーバントが NULL ポインタでした。

CORBA::IMP_LIMIT

この例外のほかのシステム上の理由に加えて、この状況に特有の理由は、共同クライアント/サーバがポート番号付きでは初期化されておらず、したがって永続オブジェクト参照が作成できないことです。

説明

このオペレーションは、次の作業を実行します。

戻り値

CORBA::Object_ptr

文字列化された ObjectId stroid と、ユーザが指定した rep_id で作成されたオブジェクト参照。オブジェクト参照は、特定のオブジェクト用に定義された _narrow() オペレーションを呼び出すことによって、特定のオブジェクト型に変換する必要があります。変換が終了したときにオブジェクトを解放するのは、呼び出し側の役割です。

 


stop_object

概要

所定のサーバントを使用しているオブジェクトに対する要求の受け付けを止めるように ORB に指示します。

IDL

void stop_object( in PortableServer::Servant servant);

C++ バインディング

void stop_object(PortableServer::Servant servant);

引数

servant

インタフェースの C++ 実装クラスのインスタンス。このサーバントと、ObjectId の間の関連付けは、アクティブ オブジェクト マップから削除されます。

例外

特にありません。

説明

このオペレーションは、所定のサーバントに対する要求の受け付けを止めるように ORB に指示します。サーバントの状態は、アクティブ化されていても、非アクティブ化されていてもかまいません。エラーが報告されることはありません。

注意 : stop_object オペレーションの呼び出し後にコールバック オブジェクトを呼び出すと、呼び出し側に OBJECT_NOT_EXIST 例外が返されます。これは、stop_object オペレーションが事実上、オブジェクトを削除するためです。

戻り値

特にありません。

 


stop_all_objects

概要

すべてのサーバントに対する要求の受け付けを止めるように ORB に指示します。

IDL

void stop_all_objects();

C++ バインディング

void stop_all_objects();

例外

特にありません。

説明

このオペレーションは、このプロセスで設定されたすべてのサーバントに対する要求の受け付けを止めるように ORB に指示します。

使用上の注意

ORB::shutdown メソッドを呼び出したクライアントが、その後に stop_all_objects を呼び出さないようにしてください。

戻り値

特にありません。

 


get_string_oid

概要

現在の要求の ObjectId の文字列バージョンを要求します。

IDL

string get_string_oid() raises (NotInRequest); 

C++ バインディング

char* get_string_oid (); 

例外

NotInRequest

ORB が要求のコンテキスト内に入っていなかったとき、つまり ORB がメソッド コード内の要求を処理していないときに、関数が呼び出されました。この関数をクライアント コードから呼び出さないでください。これは、コールバック オブジェクト (つまりサーバント) のメソッド実行中のみ有効です。

説明

このオペレーションは、現在の要求の ObjectId の文字列バージョンを返します。

戻り値

char*

現在の要求の ObjectId の文字列バージョン。これは、オブジェクト参照の作成時に指定された文字列です。この文字列がユーザにとって意味を持つのは、オブジェクト参照が start_persistent_userid 関数によって作成された場合のみです。つまり、start_transient および start_persistent_systemid によって作成された ObjectId は、ORB によって作成されており、ユーザ アプリケーションとの間に関係はありません。

 


~Callbacks

概要

コールバック オブジェクトを破棄します。

C++ バインディング

BEAWrapper::~Callbacks( );

引数

特にありません。

例外

特にありません。

説明

このデストラクタは、コールバック オブジェクトを破棄します。

使用上の注意

ラッパーは破棄するが ORB は停止しない場合、クライアントは stop_all_objects メソッドを呼び出す必要があります。

戻り値

特にありません。


  ページの先頭       前  次