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

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

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

この章では、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モデル
// Create a servant for the callback Object 
Catcher_i* my_catcher_i = new Catcher_i();
// Get root POA reference and activate the 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);
// Find root POA
2 CORBA::Object_var oref =
orb->resolve_initial_references("RootPOA");
3 PortableServer::POA_var root_poa =
PortableServer::POA::_narrow(oref);
// Create and activate a 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();
// Create object reference for callback Object
10 oref = my_poa_ref -> create_reference_with_id(
oid, _tc_Catcher->id());
11 Catcher_var my_catcher_ref = Catcher::_narrow( oref );
// activate object
12 my_poa_ref -> activate_object_with_id( oid, my_catcher_i );
// Make the call passing the 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
// File: 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{ };

// set up transient callback Object
// -- prepare POA, activate object, return objref
Object start_transient(
in PortableServer::Servant Servant,
in CORBA::RepositoryId rep_id)
raises (ServantAlreadyActive);
       // set up persistent/systemid callback Object 
Object start_persistent_systemid(
in PortableServer::Servant servant,
in CORBA::Repository rep_id,
out string stroid)
raises (ServantAlreadyActive);
       // reinstate set up for persistent/systemid 
// callback object
Object restart_persistent_systemid(
in PortableServer::Servant servant,
in CORBA::RepositoryId rep_id,
in string stroid)
raises (ServantAlreadyActive, ObjectAlreadyActive);
       // set up persistent/userid callback Object
Object start_persistent_userid(
in PortableServer::Servant servant,
in CORBA::RepositoryId rep_id,
in string stroid)
raises (ServantAlreadyActive, ObjectAlreadyActive);
       // stop servicing a particular callback Object
// with the given servant
void stop_object( in PortableServer::Servant servant);
       //Stop all callback Object processing
void stop_all_objects();
      // get oid string for the current request
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メソッドを呼び出す必要があります。

戻り値

なし。


  先頭に戻る       前  次