![]() |
![]() |
|
|
| |
RMI/IIOP および CORBA を相互に運用する WebLogic Tuxedo Connector の使用
注意: CORBA を相互運用する WebLogic Tuxedo Connector をコンフィグレーションするには、いくつかの管理タスクを実行する必要があります。CORBA を相互運用する WebLogic Tuxedo Connector を管理する方法については、『WebLogic Tuxedo Connector 管理ガイド』を参照してください。
WebLogic Tuxedo Connector は、WebLogic Server および Tuxedo CORBA オブジェクト間に双方向の相互運用性を提供します。WebLogic Tuxedo Connector は次のことを可能にします。
次の節では、WebLogic Server および Tuxedo CORBA オブジェクト間の相互運用性をサポートする WebLogic Tuxedo Connector を使用するために、アプリケーションを変更する方法について説明します。
Tuxedo CORBA オブジェクト用の WebLogic Tuxedo Connector クライアント Bean を開発する方法
注意: 発信 Tuxedo CORBA オブジェクトのクライアント Bean の開発方法の例については、WebLogic Server 配布キットの examples
\wtc
\corba
\simpappcns
パッケージを参照してください。
Tuxedo にデプロイされた CORBA オブジェクトを呼び出す EJB を開発するときは、以下の手順を行います。
WTC ORB の使用
WebLogic Tuxedo Connector で CORBA を使用するには、WTC ORB を使用する必要があります。Bean で WTC ORB をインスタンス化するには、次の文を使用します。
Prop.put("org.omg.CORBA.ORBClass",
"weblogic.wtc.corba.ORB");
オブジェクト参照の取得
注意: オブジェクト参照の詳細については、 FederationURL 形式の使い方を参照してください。
WebLogic Tuxedo Connector は、リモート Tuxedo CORBA ドメインにあるオブジェクトへの参照を取得するために、CosNaming サービスを使用します。これは、オブジェクト参照 corbaloc:tgiop
または corbaname::tgiop
を使用して行います。次の文は、CosNaming サービスを使用して Tuxedo CORBA オブジェクトへの参照を取得します。
// シンプル ファクトリを取得する
org.omg.CORBA.Object simple_fact_oref =
orb.string_to_object("corbaname:tgiop:simpapp#simple_factory
");
各値の説明は次のとおりです。
simpapp
は、Tuxedo UBB に指定された Tuxedo ドメインのドメイン ID。
simple_factory
は、Tuxedo CORBA の CosNaming サーバでオブジェクト参照がバインドされた名前。
オブジェクトの呼び出し
タスクは、CORBA Java API を使用して Tuxedo にデプロイされた CORBA オブジェクトを呼び出すことによって実行します。
ToupperCorbaBean.java コードの例
次の ToupperCorbaBean.java
コードは、WTC ORB を呼び出し、COSNaming サービスを使用してオブジェクト参照を取得する方法の例です。
コード リスト 4-1 サービス アプリケーションの例
.
.
.
public String Toupper(String toConvert)
throws RemoteException
{
log("toupper called, converting " + toConvert);
try {
// ORB を初期化する
String args[] = null;
Properties Prop;
Prop = new Properties();
Prop.put("org.omg.CORBA.ORBClass",
"weblogic.wtc.corba.ORB");
ORB orb = ORB.init(args, Prop);
// シンプル ファクトリを取得するorg.omg.CORBA.Object simple_fact_oref =
orb.string_to_object("corbaname:tgiop:simpapp#simple_factory");
// シンプル ファクトリをナロー変換する
SimpleFactory simple_factory_ref =
SimpleFactoryHelper.narrow(simple_fact_oref);
// シンプル ファクトリを見つける
Simple simple = simple_factory_ref.find_simple();
// 文字列を大文字に変換するorg.omg.CORBA.StringHolder buf =
}
new org.omg.CORBA.StringHolder(toConvert);
simple.to_upper(buf);
return buf.value;
catch (Exception e) {
throw new RemoteException("Can't call TUXEDO CORBA server: " +e);
}
}
.
.
.
WebLogic Tuxedo Connector を使用するために着信 RMI/IIOP アプリケーションを変更する方法
注意: 着信 RMI/IIOP C++ クライアントの開発方法の例については、WebLogic Server 配布キットの examples
\iiop
\ejb
\stateless
\server
\tux
パッケージを参照してください。
WebLogic Tuxedo Connector プログラミングの唯一の要件は、クライアントが COSNaming サービスに、WebLogic Server のネーム サービスがバインドされている正しい名前を渡すことです。
コード リスト 4-2 に、examples
\iiop
\ejb
\stateless
\server
\tux
サンプルからネーミング コンテキストを取得するサンプル コードが提供されています。「WLS」が、『WebLogic Tuxedo Connector 管理ガイド』で説明されている cnsbind
コマンドで指定されたバインド名です。
コード リスト 4-2 ネーミング コンテキストを取得するコードの例
.
.
.
// ネーミング コンテキストを取得
TP::userlog("Narrowing to a naming context");
CosNaming::NamingContext_var context =
CosNaming::NamingContext::_narrow(o);
CosNaming::Name name;
name.length(1);name[0].id = CORBA::string_dup("WLS");
name[0].kind = CORBA::string_dup("");
.
.
.
WebLogic Tuxedo Connector を使うための発信 RMI/IIOP アプリケーションの変更方法
注意: 発信 RMI/IIOP クライアントを開発する方法のサンプルについては、WebLogic Server 配布キットの examples/iiop/ejb/stateless/server/wls
パッケージを参照してください。
WebLogic Tuxedo Connector に関する唯一のプログラミング要件は、EJB が WebLogic Tuxedo Connector 固有の FederationURL を使って、リモート Tuxedo CORBA オブジェクトにアクセスするために使用する初期コンテキストを取得することです。以下の節で説明する手順に従って、WebLogic Tuxedo Connector を使用するよう発信 RMI/IIOP アプリケーションを変更します。
EJB に FederationURL を渡すための ejb-jar.xml ファイルの変更方法
次に示す iiop.ejb.stateless.server.wls.ejb-jar.xml
ファイルのコードは、実行時に EJB に FederationURL 形式を渡すよう ejb-jar.xml
ファイルをコンフィグレーションする方法の例です。
コード リスト 4-3 EJB に FederationURL を渡す ejb-jar.xml ファイルの例
<?xml version="1.0"?>
<!DOCTYPE ejb-jar PUBLIC '-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 1.1//EN' 'http://java.sun.com/j2ee/dtds/ejb-jar_1_1.dtd'>
<ejb-jar>
<small-icon>images/green-cube.gif</small-icon>
<enterprise-beans>
<session>
<small-icon>images/orange-cube.gif</small-icon>
<ejb-name>IIOPStatelessSession</ejb-name>
<home>examples.iiop.ejb.stateless.TraderHome</home>
<remote>examples.iiop.ejb.stateless.Trader</remote>
<ejb-class>examples.iiop.ejb.stateless.TraderBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
<env-entry>
<env-entry>
<env-entry-name>foreignOrb</env-entry-name>
<env-entry-type>java.lang.String </env-entry-type>
<env-entry-value>corbaloc:tgiop:simpapp</env-entry-value>
</env-entry>
<env-entry-name>WEBL</env-entry-name>
<env-entry-type>java.lang.Double </env-entry-type>
<env-entry-value>10.0</env-entry-value>
</env-entry>
<env-entry>
<env-entry-name>INTL</env-entry-name>
<env-entry-type>java.lang.Double </env-entry-type>
<env-entry-value>15.0</env-entry-value>
</env-entry>
<env-entry>
<env-entry-name>tradeLimit</env-entry-name>
<env-entry-type>java.lang.Integer </env-entry-type>
<env-entry-value>500</env-entry-value>
</env-entry>
</session>
</enterprise-beans>
<assembly-descriptor>
<container-transaction>
<method>
<ejb-name>IIOPStatelessSession</ejb-name>
<method-intf>Remote</method-intf>
<method-name>*</method-name>
</method>
<trans-attribute>NotSupported</trans-attribute>
</container-transaction>
</assembly-descriptor>
</ejb-jar>
実行時に EJB に FederationURL を渡すには、アプリケーションの ejb-jar.xml ファイルに、EJB に対する env-entry
を追加します。次の env-entry
下位要素を割り当てる必要があります。
env-entry-name の割り当て
EJB に env-entry-value
要素の値を渡すために使用する変数の名前を指定するには、env-entry-name
要素を使用します。
図 4-3 のサンプル コードでは、env-entry-name
に foreignOrb
を指定しています。
env-entry-type の割り当て
EJB に渡される env-entry-value
要素のデータ型(String、Integer、Double など)を指定するには、env-entry-type
要素を使用します。
図 4-3 のサンプル コードでは、foreignOrb
変数が String
データを EJB に渡すように指定しています。
env-entry-value の割り当て
EJB に渡すデータを指定するには、env-entry-value
要素を使用します。
図 4-3 のサンプル コードでは、foreignOrb
変数が次の FederationURL 形式を EJB に渡すよう指定しています。
corbaloc:tgiop:simpapp
FederationURL を使ってオブジェクトにアクセスするための EJB の変更方法
ここでは、リモート Tuxedo CORBA オブジェクトにアクセスするために使用する InitialContext を FederationURL を使って取得する方法について説明します。
次に示す iiop.ejb.stateless.server.wls.TraderBean.java
ファイルのコードは、FederationURL を使って InitialContext を取得する方法の例です。
コード リスト 4-4 InitialContext を取得するための TraderBean.java のサンプル コード
.
.
.
public void createRemote() throws CreateException {
log("createRemote() called");
try {
InitialContext ic = new InitialContext();
// リモート CORBA ドメインで EJB 類似の CORBA サーバをルックアップする
Hashtable env = new Hashtable();
env.put(Context.PROVIDER_URL, (String)
}
ic.lookup("java:/comp/env/foreignOrb") + "/NameService");
InitialContext cos = new InitialContext(env);
TraderHome thome = (TraderHome)PortableRemoteObject.narrow(
cos.lookup("TraderHome_iiop"),TraderHome.class);
remoteTrader = thome.create();
catch (NamingException ne) {
throw new CreateException("Failed to find environment value "+ne);
}
catch (RemoteException re) {
throw new CreateException("Error creating remote ejb "+re);
}
}
.
.
.
FederationURL を使って、リモート Tuxedo CORBA オブジェクトに対する InitialContext を取得するには、以下の手順を使用します。
ejb-jar.xml
ファイルで定義されている FederationURL 形式を取得します。
例:
"ic.lookup("java:/comp/env/foreignOrb")
図 4-3 のサンプル コードでは、foreignOrb
変数が次の FederationURL 形式を EJB に渡すよう指定しています。
corbaloc:tgiop:simpapp
例:
"ic.lookup("java:/comp/env/foreignOrb") + "/NameService"
次のような FederationURL が生成されます。
corbaloc:tgiop:simpapp/NameService
例:
env.put(Context.PROVIDER_URL, (String) ic.lookup("java:/comp/env/foreignOrb") + "/NameService");
InitialContext cos = new InitialContext(env);
結果として、Tuxedo CORBA オブジェクトの InitialContext が取得されます。
FederationURL 形式の使い方
この節では、以下の FederationURL 形式の構文に関する情報を提供します。
CORBA URL
構文は CORBA 仕様で記述されます。詳細については、http://www.omg.org/ にあるOMG の Web サイトを参照してください。
corbaloc:tgiop
フォームは、BEA tgiop プロトコル専用です。
corbaloc URL フォーマットの使用
この節では、corbaloc URL フォーマットの構文を示します。
<corbaloc> = "corbaloc:tgiop":[<version>] <domain>["/"<key_string>]
<version> = <major> "." <minor> "@" | empty_string
<domain> = TUXEDO CORBA domain name
<major> = number
<minor> = number
<key_string> = <string> | empty_string
corbaloc:tgiop の例
この節では、corbaloc:tgiop
の使用例を示します。
orb.string_to_object("corbaloc:tgiop:simpapp/NameService");
orb.string_to_object("corbaloc:tgiop:simpapp/FactoryFinder");
orb.string_to_object("corbaloc:tgiop:simpapp/InterfaceRepository");
orb.string_to_object("corbaloc:tgiop:simpapp/Tobj_SimpleEventsService");
orb.string_to_object("corbaloc:tgiop:simpapp/NotificationService");
orb.string_to_object("corbaloc:tgiop:1.1@simpapp/NotificationService);
-ORBInitRef の使用例
orb.init
および resolve_initial_reference
に -ORBInitRef
オプションを使用することもできます。
次の -ORBInitRef
定義を指定します。
-ORBInitRef FactoryFinder=corbaloc:tgiop:simp/FactoryFinder
-ORBInitRef InterfaceRepository=corbaloc:tgiop:simp/InterfaceRepository
-ORBInitRef Tobj_SimpleEventService=corbaloc:tgiop:simp/Tobj_SimpleEventsService
-ORBInitRef NotificationService=corbaloc:tgiop:simp/NotificationService
次に、
orb.resolve_initial_references("NameService");
orb.resolve_initial_references("FactoryFinder");
orb.resolve_initial_references("InterfaceRepository");
orb.resolve_initial_references("Tobj_SimpleEventService");
orb.resolve_initial_references("NotificationService");
-ORBDefaultInitRef の使用例
-ORBDefaultInitRef
および resolve_initial_reference
を使用できます。
次の -ORBDefaultInitRef
定義を指定します。
-ORBDefaultInitRef corbaloc:tgiop:simpapp
次に、
orb.resolve_initial_references("NameService");
corbaname URL フォーマットの使用
corbaloc
フォーマットの代わりに corbaname
フォーマットを使用することもできます。
-ORBInitRef の使用例
次の -ORBInitRef
定義を指定します。
-ORBInitRef NameService=corbaloc:tgiop:simpapp/NameService
次に、
orb.string_to_object("corbaname:rir:#simple_factory");
orb.string_to_object("corbaname:tgiop:simpapp#simple_factory");
orb.string_to_object("corbaname:tgiop:1.1@simpapp#simple_factory");
orb.string_to_object("corbaname:tgiop:simpapp#simple/simple_factory");
Tuxedo CORBA アプリケーションに対するトランザクションを管理する方法
注意: Tuxedo CORBA アプリケーションでトランザクションを管理する方法の詳細については、「BEA Tuxedo CORBA アプリケーションのトランザクションの概要」を参照してください。
WebLogic Tuxedo Connector は、Java Transaction API (JTA) を使って、Tuxedo CORBA アプリケーションでのトランザクションを管理します。詳細については、以下を参照してください。
![]() |
![]() |
![]() |