bea ホーム | 製品 | dev2dev | support | askBEA
BEA Logo Tuxedo
 ドキュメントのダウンロード   サイトマップ   用語集 
検索
0

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

 Previous Next Contents View as PDF  

DestroyCurrent

概要

BEA Tuxedo ドメインからログアウトし、TransactionCurrent オブジェクトと SecurityCurrent オブジェクトを無効にします。

MIDL マッピング

HRESULT destroy_current();

オートメーション・マッピング

Sub destroy_current()

パラメータ

特にありません。

戻り値

特にありません。

例外

特にありません。

 


Bootstrap オブジェクトのプログラミング例

この節では、Bootstrap オブジェクトを使用する次のプログラミング例を紹介します。

Java クライアントの例: SecurityCurrent オブジェクトの取得

リスト 4-4 は、SecurityCurrent オブジェクトを取得する Java クライアントのプログラミング方法を示しています。

コード リスト 4-4 SecurityCurrent オブジェクトを取得する Java クライアントのプログラミング

import java.util.*;
import org.omg.CORBA.*;
import com.beasys.*;
class client {
public static void main(String[] args)
{
Properties prop = null;
Tobj.PrincipalAuthenticator auth = null;
String host_port = "//COLORMAGIC:10000";
// ホストとポートを設定
if (args.length == 1) host_port = args[0];
try {
// ORB を初期化
ORB orb = ORB.init(args, prop);
// Bootstrap オブジェクトを作成
Tobj_Bootstrap bs=new Tobj_Bootstrap(orb,host_port);
                    // SecurityCurrent を取得
org.omg.CORBA.Object ocur =
bs.resolve_initial_references("SecurityCurrent");
SecurityLevel2.Current cur =
SecurityLevel2.CurrentHelper.narrow(ocur);
}
catch (Tobj.InvalidName e) {
System.out.println("Invalid name: "+e);
System.exit(1);
}
catch (Tobj.InvalidDomain e) {
System.out.println("Invalid domain address: "+host_port +" "+e);
System.exit(1);
}
catch (SystemException e) {
System.out.println("Exception getting security current: "+e);
e.printStackTrace();
System.exit(1);
}
}
}

Visual Basic クライアントの例: Bootstrap オブジェクトの使用

リスト 4-5 は、Bootstrap オブジェクトを使用する Visual Basic クライアントのプログラミング方法を示しています。

コード リスト 4-5 Visual Basic クライアントのプログラミング

'Bootstrap オブジェクトを宣言
Public oBootstrap As DITobj_Bootstrap
'FactoryFinder オブジェクトを宣言
Public oBsFactoryFinder As DITobj_FactoryFinder
'Registrar オブジェクトのファクトリを宣言
Public oRegistrarFactory As DIUniversityB_RegistrarFactory
'実際の Registrar オブジェクトを宣言
Public oRegistrarFactory As DIUniversityB_RegistrarFactory
.... 
'Bootstrap オブジェクトを作成
Set oBootstrap = CreateObject(“Tobj.Bootstrap”)
'BEA Tuxedoドメインに接続
oBootstrap.Initialize “//host:port”
'BEA Tuxedo ドメインの FactoryFinder を取得
Set oBSFactoryFinder = oBootstrap.CreateObject(“Tobj.FactoryFinder”)
'Registrar オブジェクトのファクトリを取得 
‘using the FactoryFinder method find_one_factory_by_id
Set oRegistrarFactory = oBSFactoryFinder.find_one_factory_by_id(“RegistrarFactoryID”)
'Registrar オブジェクトを作成
Set oRegistrar = oRegistrarFactory.find_registrar(exc)

 


インターオペラブル・ネーミング・サービス・ブートストラップ処理メカニズム

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

はじめに

リリース 8.0 以降の BEA Tuxedo ORB では、CORBA 仕様 2.4.2 の第 4 章と第 13 章で規定されている CORBA ネーミング・サービス (このマニュアルではインターオペラブル・ネーミング・サービスと呼ぶ) ブートストラップ処理メカニズムがサポートされています。

このサポートにより、インターオペラブル・ネーミング・サービス (INS) ブートストラップ処理メカニズムをインプリメントする ORB で、BEA Tuxedo サーバ側 ORB に問い合わせて初期オブジェクト (FactoryFinder など) および BEA Tuxedo 環境に対する PrincipalAuthenticator のオブジェクト・リファレンスを取得できます。このサポートと、インターオペラブル初期オブジェクト・リファレンスのクライアント・サポートにより、クライアントでは BEA ブートストラップ処理メカニズムではなく INS ブートストラップ処理メカニズムを使用できます。

注記 BEA Tuxedo ソフトウェアに付属の CORBA C++ クライアントおよび Java クライアントでは INS ブートストラップ処理メカニズムを使用できますが、性能上の理由により推奨はできません。

INS オブジェクト・リファレンス

表 4-7 は、各 ID で返されるオブジェクト・リファレンスを示しています。

表 4-7 返されるオブジェクト・リファレンス

ID

返されるオブジェクト・リファレンス

FactoryFinder

FactoryFinder オブジェクト (CORBA::FactoryFinder)

InterfaceRepository

InterfaceRepository オブジェクト (CORBA::Repository)

NameService

CORBA ネーミング・サービス・オブジェクト (CORBA::NameService)

NotificationService

EventChannelFactory オブジェクト

(CosNotifyChannelAdmin::EventChannelFactory)

POACurrent

POACurrent オブジェクト (CORBA::POACurrent)

PrincipalAuthenticator

PrincipalAuthenticator オブジェクト (SecurityLevel2::PrincipalAuthenticator)

RootPOA

RootPOA オブジェクト (CORBA::RootPOA)

Tobj_SimpleEventsService

BEA シンプル・イベント ChannelFactory オブジェクト (Tobj_SimpleEvents::ChannelFactory)


 

INS コマンド行オプション

リリース 8.0 以降の BEA Tuxedo CORBA では、-ORBInitRef および -ORBDefaultInitRef コマンド行オプションがサポートされています。これらのオプションの詳細については、第 14 章の 85 ページ「ORB 初期化メンバ関数」を参照してください。

次の例は、BEA Tuxedo CORBA IIOP クライアントが BEA Tuxedo CORBA IIOP サーバ環境と通信しているものと想定しています。

client_app -ORBid BEA_IIOP -ORBInitRef
FactoryFinder=corbaloc::myhost:2468/FactoryFinder

この例で、FactoryFinderORB::resolve_initial_references を呼び出すと、インターオペラブル初期リファレンスの要求がポート 2468 を使用して myhost の ISL/ISH に送信されます。myhost は、tuxconfig ファイルで ISL/ISH に指定されたホストと大文字と小文字の区別まで正確に同じでなければなりません。

INS 初期化オペレーション

INS ブートストラップ処理メカニズムを使用するには、アプリケーション・プログラマは以下の要件を満たす必要があります。

INS オブジェクトの URL スキーマ

リリース 8.0 以降の BEA Tuxedo CORBA では、BEA Tuxedo CORBA サーバ環境にアクセスし、初期オブジェクトのリファレンスを取得するための位置を指定するために使用する追加の Uniform Resource Locator (URL) 形式がサポートされています。その新しい URL 形式は、INS 仕様の一部として OMG で採用されたオブジェクト URL の定義に従うとともに、それを拡張します。INS 仕様で規定されている URL 形式は、BEA WebLogic Enterprise バージョン 5.1 で導入されたランダマイズ機能だけでなく、セキュア HTTP の URL に基づいてモデル化される安全な形式をサポートするようにも拡張されています。

CORBA 2.4.2 仕様は、仕様に準拠する ORB が 3 つのオブジェクト URL スキーマをサポートすることを要求します。それらのスキーマは、IOR、corbaloc、および corbaname として定義されています。

注記 新しい URL 文字列形式は、ORB::string_to_object 関数にも渡すことができます。

IOR URL スキーマ

IOR スキーマは、IOR:hex_octets という形式の文字列です。スキーマ名は IOR で、「:」の後のテキストは CORBA 仕様で定義されます。IOR URL スキーマは堅牢であり、オブジェクトのリファレンスに使用されるカプセル化された転送情報とオブジェクト・キーからクライアントを切り離します。

corbaloc URL スキーマ

その長さとバイナリ情報のテキスト符号化が原因で、IOR を非電子的な手段で人間同士が交換するのは困難です。corbaloc および corbalocs URL スキーマでは、一般に普及している FTP や HTTP の URL スキーマに似た形式の文字列化されたオブジェクト・リファレンスが提供されます。corbaloc および corbalocs で定義された URL スキーマは、TCP/IP 中心の環境と DNS 中心の環境の両方で簡単に操作されます。corbaloc および corbalocs URL の構成要素は次のとおりです。

デフォルトでは、corbaloc URL は IIOP 経由でアクセスできるオブジェクトを示し、corbalocs URL は IIOP over SSL を使用してアクセスできるオブジェクトを示します。

表 4-8 は、各 URL 要素の BNF 構文を示しています。

表 4-8 URL 要素の BNF 形式

URL 要素

BNF 形式

<corbaloc>

= “corbaloc::”<obj_addr_list>[“/”<key_string>]
[,<corbaloc>|<corbalocs>]

<corbalocs>

= “corbalocs::”<obj_addr_list>[“/”<key_string>]
[,<corbaloc>|<corbalocs>]

<obj_addr_list>

= [<obj_addr> “,”]* <obj_addr>

<obj_addr>

= <iiop_prot_addr> | <future_prot_addr>

<iiop_prot_addr

= <iiop_id><iiop_addr>

<iiop_id>

= “//” | <iiop_prot_token>”:”

<iiop_prot_token>

= “iiop”

<iiop_addr>

= [<version> <host> [“:” <port>]]

<host>

= DNS-style Host Name | ip_address

<version>

= <major> “.” <minor> “@” | empty_string

<port>

= number

<major>

= number

<minor>

= number

<key_string>

= <string> | empty_string


 

表 4-9 は、各 URL 要素を説明しています。

表 4-9 URL 要素の説明

URL 要素

説明

obj_addr_list

プロトコル ID、バージョン、およびアドレス情報のカンマ区切りのリスト。このリストは、インプリメンテーション定義の方法でオブジェクトのアドレスを指定するために使用します。オブジェクトは、アドレスおよびプロトコルのいずれでもアクセスできます。その要素を使用して障害が発生した場合は、カンマ区切りリストの次の要素が使用されます。

obj_addr

プロトコル ID、バージョン・タグ、およびプロトコル固有のアドレス。右中かっこ「{」、左中かっこ「}」、垂直バー「|」、スラッシュ「/」、およびカンマ「,」は URL のこの構成要素では使用できません。

iiop_prot_addr

IIOP プロトコル ID、バージョン・タグ、および DNS 形式のホスト名と IP アドレスで構成されたアドレス。

iiop_id

IIOP プロトコル corbaloc を示すために認識されるトークン。

iiop_prot_token

IIOP プロトコル・トークン「iiop」。

iiop_addr

単一のアドレス要素。

host

DNS 形式のホスト名または IP アドレス。指定しない場合は、ローカル・ホストと見なされます。

version

「.」で区切られ、「@」が後に続くメジャーおよびマイナーのバージョン番号。バージョンがない場合は、1.0 と見なされます。

ip_address

数値の IP アドレス (ドット区切りの 10 進表記)。

port

IIOP リスナ/ハンドラまたは初期化エージェントがリッスンするポート番号。デフォルト値は 9999 です。

key_string

ヌルで終了しない文字列化されたオブジェクト・キー。key_string では、RFC 2396 で規定されているエスケープ規則を使用して URL の一部として直接使用できないオクテット値からマッピングします。US-ASCII 英数字はエスケープされません。この範囲外の文字は、次の文字を除いてエスケープされます。

“;” | “/” | “:” | “?” | “@” | “&” | “=” | “+” | “$” |
”,” | “-“ | “_” | “.” | “!” | “~” | “*” | “” | “(“ | “)”

key_string は、CORBA 仕様で定義されている GIOP 要求または LocateRequest ヘッダの object_key メンバのオクテット・シーケンスに対応します。

string_name

IETF (Internet Engineering Task Force) RFC 2396 で定義されている URL エスケープが含まれる文字列化された名前。エスケープ規則は、変更の必要なく URL をさまざまな方法で転送できるようにします。US-ASCII 英数字はエスケープされません。この範囲外の文字は、次の文字を除いてエスケープされます。

“;” | “/” | “:” | “?” | “@” | “&” | “=” | “+” | “$” |
”,” | “-“ | “_” | “.” | “!” | “~” | “*” | “” | “(“ | “)”


 

次に、新しい URL 形式の使用例を示します。

corbaloc::555xyz.com:1024,555backup.com:1022,555last.com:1999
corbalocs::555xyz.com:1024,{555backup.com:1022|555last.com:1999}
corbaloc::1.2@555xyz.com:1111
corbalocs::1.1@24.128.122.32:1011,1.0@24.128.122.34

BEA Tuxedo 8.0 では、スキーマの異なる複数の URL のリストをサポートするように、INS の提案で規定されている URL 構文が拡張されています。次に、拡張例を示します。

corbalocs::555xyz.com:1024,corbaloc::1.2@555xyz.com:1111
corbalocs::ctxobj:3434,mthd:3434,corbaloc::force:1111

上の例で、パーサが URL corbaloc::force.com:1111 に達した場合は、安全な接続が試行されなかったかのようにパーサの内部状態がリセットされ、保護なしの接続の試行が開始されます。

corbaname URL スキーマ

corbaname URL スキーマは、URL でネーミング・サービスのエントリを示せるように corbaloc スキーマの機能を拡張します。corbaname URL は、ORB コアにネーミング・サービスのインプリメンテーションがなくても解決できます。corbaname URL の例を次に示します。

corbaname:555objs.com#a/string/path/to/obj

この URL は、ホスト 555objs.com で NamingContext 型のオブジェクト (オブジェクト・キーが NamingService) を見つけることができるか、その位置で動作しているエージェントが NamingContext のリファレンスを返すことを示します。文字列化された名前 a/string/path/to/obj は、その NamingContext の resolve オペレーションの引数として使用されます。

corbaname URL は corbaloc URL と似ていますが、corbaname URL にはネーミング・コンテキストのバインディングを識別する文字列化された名前が含まれます。# 文字は、文字列化された名前の開始を示します。

URL の BNF 構文は、表 4-10 で示してあります。

表 4-10 URL の BNF 構文

URL 要素

書式

説明

<corbaname>

= “corbaname:”<corbaloc_obj>[
“#”<string_name>]

corbaloc_obj は、corbaname URL のネーミング・コンテキストを識別する部分です。構文は、corbaloc URL の場合と同じです。

<corbaloc_obj>

<obj_addr_list>[“/”<key_string>]

obj_addr_list の説明については、表 4-9 を参照してください。

<obj_addr_list>

corbaloc URL の定義と同じ

obj_addr_list の説明については、表 4-9 を参照してください。

<key_string>

corbaloc URL の定義と同じ

key_string の説明については、表 4-9 を参照してください。

<string_name>

Stringified Name | empty string

string_name の説明については、表 4-9 を参照してください。


 

corbaname URL の解決は、corbaloc URL 処理の単純な拡張としてインプリメントされます。そのインプリメンテーションを説明するために、次の corbaname URL を使用します。

corbaname:<corbaloc_obj>[“#”<string_name>]

解決は以下のように行われます。

  1. corbaname URL から corbaloc::<corbaloc_obj> 形式の corbaloc URL を作成します。

  2. CORBA::ORB::string_to_object を呼び出して CosNaming::NamingContext オブジェクトを取得し、corbaloc URL をネーミング・コンテキストのオブジェクト・リファレンスに変換します。

  3. <string_name>CosNaming::Name に変換します。

  4. 作成した CosNaming::Name を渡して、CosNaming::NamingContext の resolve オペレーションを呼び出します。

  5. CosNaming::NamingContext::resolve から返されるオブジェクト・リファレンスは、呼び出し側に返されなければなりません。

この解決プロセスに従うことで、ネーミング・サービスに存在しないネーミング・コンテキストのオブジェクト・リファレンスを返すことがなくなります。この手法の 1 つの副作用は、ネーミング・サービスのスタブが ORB コアの一部であるか、resolve オペレーションの要求を送信する内部メカニズムがなければならないことです。複雑な手間を避けるため、ネーミング・サービスのスタブを ORB コアに埋め込むことをお勧めします。

INS を使用した FactoryFinder オブジェクト・リファレンスの取得

リスト 4-6 は、クライアント・アプリケーションが INS を使用して FactoryFinder オブジェクトのオブジェクト・リファレンスを取得するしくみを示しています。完全なコード例については、University Sample のクライアント・アプリケーションを参照してください。

コード リスト 4-6 FactoryFinder オブジェクト取得のコード例

// レジストラを取得するユーティリティ
static UniversityW::Registrar_ptr get_registrar(
CORBA::ORB_ptr orb
)
{
    // ORB からファクトリ・ファインダを取得
CORBA::Object_var v_fact_finder_oref =
orb->resolve_initial_references("FactoryFinder");
    // ファクトリ・ファインダをナロー変換
Tobj::FactoryFinder_var v_fact_finder_ref =
Tobj::FactoryFinder::_narrow(v_fact_finder_oref.in());
    // ファクトリ・ファインダを使用して University の
// レジストラ・ファクトリを検索する
CORBA::Object_var v_reg_fact_oref =
v_fact_finder_ref->find_one_factory_by_id(
UniversityW::_tc_RegistrarFactory->id()
);
    // レジストラ・ファクトリをナロー変換
UniversityW::RegistrarFactory_var v_reg_fact_ref =
UniversityW::RegistrarFactory::_narrow(
v_reg_fact_oref.in()
);
    // University のレジストラを返す
return v_reg_fact_ref->find_registrar();
}

INS を使用した PrincipalAuthenticator オブジェクト・リファレンスの取得

リスト 4-7 は、クライアント・アプリケーションが INS を使用して PrincipalAuthenticator オブジェクトのオブジェクト・リファレンスを取得するしくみを示しています。完全なコード例については、University Sample のクライアント・アプリケーションを参照してください。

コード リスト 4-7 PrincipalAuthenticator オブジェクト取得のコード例

// セキュリティ・システムにログオンするユーティリティ
static SecurityLevel2::PrincipalAuthenticator_ptr logon(
CORBA::ORB_ptr orb,
const char* program_name,
UniversityW::StudentId stu_id
)
{
    // ORB から直接 Principal Authenticator を取得
CORBA::Object_var v_pa_obj =
orb->resolve_initial_references("PrincipalAuthenticator");
    // Principal Authenticator をナロー変換
SecurityLevel2::PrincipalAuthenticator_var v_pa =
SecurityLevel2::PrincipalAuthenticator::_narrow(
v_pa_obj.in());

INS を使用した TransactionFactory オブジェクト・リファレンスの取得

リリース 8.0 以降の BEA Tuxedo CORBA では、CORBA トランザクション・サービス・インターフェイスを使用してトランザクションを開始できます。クライアントは、ORB::resolve_initial_references("FactoryFinder") 関数を使用して FactoryFinder のオブジェクト・リファレンスを取得します。次にクライアントは、FactoryFinder を使用して (トランザクションの開始に使用する) TransactionFactory のリファレンスを取得します。

リスト 4-8 は、クライアント・アプリケーションが INS を使用して TransactionFactory オブジェクトのオブジェクト・リファレンスを取得するしくみを示しています。完全なコード例については、University Sample のクライアント・アプリケーションを参照してください。

コード リスト 4-8 INS を使用したクライアント・アプリケーションのコード例

// ORB からファクトリ・ファインダを取得
CORBA::Object_var v_fact_finder_oref =
orb->resolve_initial_references("FactoryFinder");
// ファクトリ・ファインダをナロー変換
Tobj::FactoryFinder_var v_fact_finder_ref =
Tobj::FactoryFinder::_narrow(v_fact_finder_oref.in());
// FactoryFinder から TransactionFactory を取得
CORBA::Object_var v_txn_fac_oref =
v_fact_finder_ref->find_one_factory_by_id(
"IDL:omg.org/CosTransactions/TransactionFactory:1.0");
// TransactionFactory オブジェクト・リファレンスをナロー変換
CosTransactions::TransactionFactory_var v_txn_fac_ref =
CosTransactions::TransactionFactory::_narrow(
v_txn_fac_oref.in());

INS ブートストラップ処理メカニズムを使用したイベントのシーケンスは次のとおりです。

  1. ORB::resolve_initial_references を使用して FactoryFinder を取得します。

  2. FactoryFinder を使用して TransactionFactory を取得します。

  3. TransactionFactory の create オペレーションを使用してトランザクションを開始します。

  4. create オペレーションで返される Control オブジェクトから、get_terminator メソッドを使用してトランザクションの Terminator インターフェイスを取得します。

  5. Terminator の commit または rollback オペレーションを使用してトランザクションを終了またはアボートします。

TransactionFactory は、BEA の委譲型インターフェイスではなく、標準の CORBA のトランザクション・サービス・インターフェイスに準拠したオブジェクトを返します。これは、サード・パーティの ORB が、それぞれの ORB の resolve_initial_references 関数を使用して BEA Tuxedo CORBA サーバから TransactionFactory のリファレンスを取得し、標準 OMG IDL で生成されたスタブを使用して、返されたインスタンス上で機能できることを意味します。

制限

BEA Tuxedo 8.0 リリースでは、TransactionFactory とクライアントの Current のアクションが調整されません。つまり、クライアントでは 2 つのメカニズムのいずれかを使用してトランザクションのステータスを管理および取得する必要があります。また、インターフェイスとオペレーションは表 4-11 で示されているものしかサポートされていません。OMG IDL で規定されているほかのオペレーションでは、CORBA::NO_IMPLEMENT 例外が返されます。

表 4-11 サポートされている INS インターフェイスとオペレーション

インターフェイス

サポートされているオペレーション

TransactionFactory

create

Control

get_terminator
get_coordinator

Terminator

commit
rollback

Coordinator

get_status
rollback_only
get_transaction_name


 

 

Back to Top Previous Next
Contact e-docsContact BEAwebmasterprivacy