|
この章では、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) によって生成されたものと同じスケルトン クラス名から継承した実装クラスを記述します。
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 ポリシーは、使用可能なオブジェクトの型と、オブジェクト参照の型の両方を制御します。
これらのオブジェクトについては、ORB と POA による扱われ方の詳細ではなく、主に動作特性との関連で説明します。これらの詳細は、直接的な ORB および POA の呼び出し (CORBA サーバに関して特別な知識が少し必要) を使用するか、または ORB および POA の呼び出しを隠ぺいする OracleWrapper Callbacks インタフェース (詳細については考慮しないユーザ向け) を使用して、以下のセクションで説明します。
ObjectId はクライアント アプリケーションによって割り当てられるのではなく、システムによって割り当てられる、ユニークな値です。この型のオブジェクトは、クライアントが終了するまでの間のみクライアントによって受信される呼び出しに有用です。対応する POA LifeSpanPolicy 値は TRANSIENT で、IdAssignmentPolicy は SYSTEM_ID です。 ObjectId はクライアント アプリケーションによって割り当てられるのではなく、システムによって割り当てられる、ユニークな値です。この型のオブジェクトおよびオブジェクト参照は、クライアントがある一定期間内で起動したり終了する場合に有用です。稼動中のクライアントは、その特定のオブジェクト参照に対するコールバック オブジェクトを受信できます。PERSISTENT および SYSTEM_ID です。ObjectId がクライアント アプリケーションによって割り当てられなければならない点を除いては、Persistent/SystemId と同じです。該当する ObjectId としては、たとえばクライアントに対してのみ意味を持つデータベース キーなどが考えられます。対応する POA ポリシーの値は、PERSISTENT および USER_ID です。| 注意 : | 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 を使用して Oracle Tuxedo C++ コールバック オブジェクトを設定するには、クライアントは次の処理を行う必要があります。
activate すること、つまりサーバントと ObjectId を POA のアクティブ オブジェクト マップに入れることを意味します。
クライアントが既に ORB へのリファレンスを取得済みであれば、このタスクの実行に必要な ORB および POA との対話は 4 回です。コード リスト 11-1 に示すモデルのようになります。このモデルでは、ルート POA のみが必要とされます。
// コールバック オブジェクトのサーバントを作成
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 に示すモデルのようになります。
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 インタフェースおよびオペレーションです。
C++ の共同クライアント/サーバのどちらかを記述するには、OracleWrapper Callbacks API を使用します。
コールバック オブジェクトに必要なコードは、コールバックをサポートするどのクライアントについてもほぼ同一であるため、共同クライアント/サーバ用のライブラリで提供されている OracleWrapper を使用すると便利なことがあります。
コード リスト 11-3 に示すように、OracleWrapper は IDL で記述されます。
// ファイル : BEAWrapper
#ifndef _BEA_WRAPPER _IDL_
#define _BEA_WRAPPER _IDL_
#include <orb.idl>
#include <PortableServer.idll>
#pragma prefix “beasys.com”
moduleBEAWrapper{
interfaceCallbacks
{
exception ServantAlreadyActive{ };
exception ObjectAlreadyActive { };
exception NotInRequest{ };
// 一時コールバック オブジェクトを設定raises (ServantAlreadyActive);
// -- POA を準備し、オブジェクトをアクティブ化し、objref を返す
Object start_transient(
in PortableServer::Servant Servant,
in CORBA::RepositoryId rep_id)
// 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++ で記述されます。
#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 については、以下のセクションで説明します。
Callbacks インタフェースへのリファレンスを返します。
BEAWrapper::Callbacks( CORBA::ORB_ptr init_orb);init_orb
CORBA::IMP_LIMIT
BEAWrapper::Callbacks クラスは既に ORB ポインタでインスタンス化されています。プロセス内で使用できるこのクラスのインスタンスは 1 つだけです。より柔軟性が必要なユーザは、POA を直接使用する必要があります。
コンストラクタは、Callbacks インタフェースへのリファレンスを返します。複数のスレッドが使用されている場合でも、プロセスのために作成するそのようなオブジェクトは 1 つのみとします。複数のオブジェクトを使用すると、未定義の振る舞いが発生します。
オブジェクトをアクティブ化し、ORB および POA を適切な状態に設定し、アクティブ化したオブジェクトへのオブジェクト参照を返します。
Object start_transient( in PortableServer::Servant servant,
in CORBA::RepositoryId rep_id)
raises ( ServantAlreadyActive );
CORBA::Object_ptr start_transient(
PortableServer::Servant servant,
const char* rep_id);
servant
rep_id
ServantAlreadyActive
ObjectId が 1 つのコールバックのみに使用できます。複数の ObjectId があるオブジェクトに対するコールバックを受信するには、複数のサーバントを作成して、個別にアクティブ化する必要があります。同じサーバントを再利用できるのは、stop_object オペレーションがシステムに対して、サーバントを元の ObjectId について使用することを止めるように指示する場合のみです。
CORBA::BAD_PARAM
CORBA::Object_ptr
ObjectId と、ユーザが指定した rep_id で作成されたオブジェクトへのリファレンス。オブジェクト参照は、特定のオブジェクト用に定義された _narrow() オペレーションを呼び出すことによって、特定のオブジェクト型に変換する必要があります。変換が終了したときにオブジェクトを解放するのは、呼び出し側の役割です。
オブジェクトをアクティブ化し、ORB および POA を適切な状態に設定し、出力パラメータ stroid を設定し、アクティブ化したオブジェクトへのオブジェクト参照を返します。
Objectstart_persistent_systemid(
in PortableServer::Servant servant,
in CORBA::RepositoryId rep_id,
out string stroid)
raises ( ServantAlreadyActive );
CORBA::Object_ptrstart_persistent_systemid(
PortableServer::Servant servant,
const char* rep_id,
char*& stroid);
servant
rep_id
stroid
restart_persistent_systemid でオブジェクトを再アクティブ化する場合に、これを使用します。
ServantAlreadyActive
ObjectId が 1 つのコールバックのみに使用できます。複数の ObjectId があるコールバックを受信するには、複数のサーバントを作成して、個別にアクティブ化する必要があります。同じサーバントを再利用できるのは、stop オペレーションがシステムに対して、元の ObjectId についてこのサーバントを使用することを止めるように指示する場合のみです。
CORBA::BAD_PARAMETER
CORBA::IMP_LIMIT
rep_id 型のサービス オブジェクトに与えられた Servant を使用するオブジェクトをアクティブ化します。これには、システムによって生成された ObjectId を使用します。 stroid を、システムによって割り当てられた ObjectId の文字列化されたバージョンに設定します。 rep_id で、同じ ObjectId についてサーバントをアクティブ化した場合に、サーバントはその同じオブジェクト参照に対して行われた要求を受け付けます。ObjectId はシステムによって生成されているため、アプリケーションはその ObjectId を保存しておく必要があります。CORBA::Object_ptr
ObjectId と、ユーザが指定した rep_id で作成されたオブジェクト参照。オブジェクト参照は、特定のオブジェクト用に定義された _narrow() オペレーションを呼び出すことによって、特定のオブジェクト型に変換する必要があります。変換が終了したときにオブジェクトを解放するのは、呼び出し側の役割です。
オブジェクトをアクティブ化し、ORB および POA を適切な状態に設定し、アクティブ化したオブジェクトへのオブジェクト参照を返します。
Objectrestart_persistent_systemid(
in PortableServer::Servant servant,
in CORBA::RepositoryId rep_id,
in string stroid)
raises (ServantAlreadyActive, ObjectAlreadyActive);
CORBA::Object_ptrrestart_persistent_systemid(PortableServer::Servant servant,
const char* rep_id
const char* stroid);
servant
rep_id
stroid
ObjectId の文字列化されたバージョン。start_persistent_systemid に対する以前の呼び出しから返されたものである必要があります。
ServantAlreadyActive
ObjectId が 1 つのコールバックのみに使用できます。複数の ObjectId があるオブジェクトに対するコールバックを受信するには、複数のサーバントを作成して、個別にアクティブ化する必要があります。同じサーバントを再利用できるのは、stop_object オペレーションがシステムに対して、サーバントを元の ObjectId について使用することを止めるように指示する場合のみです。
ObjectAlreadyActive
ObjectId は既にコールバックに使用されています。ある特定の ObjectId には、1 つのサーバントしか関連付けられません。別のサーバントに変更する場合は、まず現在使用しているサーバントで stop_object を呼び出す必要があります。
CORBA::BAD_PARAM
CORBA::IMP_LIMIT
CORBA::Object_ptr
ObjectId stroid と、ユーザが指定した rep_id で作成されたオブジェクト参照。オブジェクト参照は、特定のオブジェクト用に定義された _narrow() オペレーションを呼び出すことによって、特定のオブジェクト型に変換する必要があります。終了したときにオブジェクトを解放するのは、呼び出し側の役割です。
オブジェクトをアクティブ化し、ORB および POA を適切な状態に設定し、アクティブ化したオブジェクトへのオブジェクト参照を返します。
Objectstart_persistent_userid(portableServer::Servant a_servant,
in CORBA::RepositoryId rep_id,
in string stroid)
raises ( ServantAlreadyActive, ObjectAlreadyActive );
CORBA::Object_ptr start_persistent_userid (
PortableServer::Servant servant,
const char * rep_id,
const char * stroid);
servant
rep_id
stroid
ServantAlreadyActive
ObjectId が 1 つのコールバックのみに使用できます。複数の ObjectId があるオブジェクトに対するコールバックを受信するには、複数のサーバントを作成して、個別にアクティブ化する必要があります。同じサーバントを再利用できるのは、stop_object オペレーションがシステムに対して、サーバントを元の ObjectId について使用することを止めるように指示する場合のみです。
ObjectAlreadyActive
ObjectId は既にコールバックに使用されています。ある特定の ObjectId には、1 つのサーバントしか関連付けられません。別のサーバントに変更する場合は、まず現在使用しているサーバントで stop_object を呼び出す必要があります。
CORBA::BAD_PARAM
CORBA::IMP_LIMIT
rep_id 型のサービス オブジェクトに与えられた Servant を使用するオブジェクトをアクティブ化します。これには、オブジェクト ID stroid を使用します。 rep_id で、同じ ObjectId についてサーバントをアクティブ化した場合に、サーバントはその同じオブジェクト参照に対して行われた要求を受け付けます。CORBA::Object_ptr
ObjectId stroid と、ユーザが指定した rep_id で作成されたオブジェクト参照。オブジェクト参照は、特定のオブジェクト用に定義された _narrow() オペレーションを呼び出すことによって、特定のオブジェクト型に変換する必要があります。変換が終了したときにオブジェクトを解放するのは、呼び出し側の役割です。
所定のサーバントを使用しているオブジェクトに対する要求の受け付けを止めるように ORB に指示します。
void stop_object( in PortableServer::Servant servant);
void stop_object(PortableServer::Servant servant);servant
このオペレーションは、所定のサーバントに対する要求の受け付けを止めるように ORB に指示します。サーバントの状態は、アクティブ化されていても、非アクティブ化されていてもかまいません。エラーが報告されることはありません。
| 注意 : | stop_object オペレーションの呼び出し後にコールバック オブジェクトを呼び出すと、呼び出し側に OBJECT_NOT_EXIST 例外が返されます。これは、stop_object オペレーションが事実上、オブジェクトを削除するためです。 |
すべてのサーバントに対する要求の受け付けを止めるように ORB に指示します。
void stop_all_objects();void stop_all_objects();
このオペレーションは、このプロセスで設定されたすべてのサーバントに対する要求の受け付けを止めるように ORB に指示します。
ORB::shutdown メソッドを呼び出したクライアントが、その後に stop_all_objects を呼び出さないようにしてください。
現在の要求の ObjectId の文字列バージョンを要求します。
string get_string_oid() raises (NotInRequest); char* get_string_oid (); NotInRequest
このオペレーションは、現在の要求の ObjectId の文字列バージョンを返します。
char*
ObjectId の文字列バージョン。これは、オブジェクト参照の作成時に指定された文字列です。この文字列がユーザにとって意味を持つのは、オブジェクト参照が start_persistent_userid 関数によって作成された場合のみです。つまり、start_transient および start_persistent_systemid によって作成された ObjectId は、ORB によって作成されており、ユーザ アプリケーションとの間に関係はありません。
BEAWrapper::~Callbacks( );
このデストラクタは、コールバック オブジェクトを破棄します。
ラッパーは破棄するが ORB は停止しない場合、クライアントは stop_all_objects メソッドを呼び出す必要があります。
|