BEA ホーム | 製品 | dev2dev | support | askBEA |
![]() |
![]() |
|
![]() |
e-docs > WebLogic Server > WebLogic Tuxedo Connector プログラマーズ ガイド > RMI/IIOP および CORBA を相互に運用する WebLogic Tuxedo Connector の使用 |
WebLogic Tuxedo Connector プログラマーズ ガイド
|
RMI/IIOP および CORBA を相互に運用する WebLogic Tuxedo Connector の使用
注意: CORBA を相互運用する WebLogic Tuxedo Connector をコンフィグレーションするには、いくつかの管理タスクを実行する必要があります。CORBA を相互運用する WebLogic Tuxedo Connector を管理する方法については、「CORBA アプリケーションの管理」を参照してください。
Tuxedo CORBA アプリケーションを開発する方法については、「CORBA プログラミング」ページを参照してください。
次の節では、WebLogic Server および Tuxedo CORBA オブジェクト間の相互運用性をサポートする WebLogic Tuxedo Connector を使用するために、アプリケーションを変更する方法について説明します。
CORBA Java API を用いて WebLogic Tuxedo Connector クライアント Bean を開発する方法
WebLogic Tuxedo Connector を使うと、オブジェクト(たとえば EJB や RMI オブジェクト)は、CORBA Java API(発信)を用いて、Tuxedo にデプロイされた CORBA オブジェクトを呼び出すことができます。
オブジェクトが Tuxedo にデプロイされた CORBA オブジェクトを呼び出せるようにするには、以下の手順を行います。
CORBA Java API を使用するには、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");
タスクは、CORBA Java API を使用して Tuxedo にデプロイされた CORBA オブジェクトを呼び出すことによって実行します。
注意: 発信 Tuxedo CORBA オブジェクト用のクライアント Bean を開発する方法の例については、WebLogic Server サンプル配布キットの examples/wtc/corba/simpappcns パッケージを参照してください。
次の ToupperCorbaBean.java コードは、WTC ORB を呼び出し、COSNaming サービスを使用してオブジェクト参照を取得する方法の例です。
.
.
.
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 アプリケーションを開発する方法に関する詳細については、『WebLogic RMI over IIOP プログラマーズ ガイド』を参照してください。
WebLogic Tuxedo Connector 用の RMI/IIOP アプリケーションを開発する方法の例については、WebLogic Server 配布キットの examples/iiop/ejb/stateless/server/tux パッケージを参照してください。
RMI over IIOP(Internet Inter-ORB Protocol)は、Java プログラムが CORBA(Common Object Request Broker Architecture)クライアントと対話して CORBA オブジェクトを実行できるように、RMI を拡張しています。WebLogic Tuxedo Connector は次のことを可能にします。
次の節では、Tuxedo CORBA アプリケーションと対話する WebLogic Tuxedo Connector を使用するために、RMI/IIOP アプリケーションを修正する方法に関する情報を提供します。
WebLogic Tuxedo Connector を使用するために着信 RMI/IIOP アプリケーションを変更する方法
クライアントは、COSNaming Service にバインドされている WebLogic Server のネーム サービスの正しいバインド名を COSNaming Service に渡す必要があります。
次のコードは、ネーミング コンテキストを取得する例です。「WLS」は、「CORBA アプリケーションの管理」で説明されている、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 アプリケーションを開発する方法
EJB は、リモート Tuxedo CORBA オブジェクトにアクセスする目的で使用される初期コンテキストを取得するために FederationURL を使用する必要があります。WebLogic Tuxedo Connector を使用するために発信 RMI/IIOP アプリケーションを修正する方法を次の節で説明します。
FederationURL を EJB に渡すために ejb-jar.xml ファイルを修正する方法
次のコードは、FederationURL 形式を EJB に実行時に渡すために ejb-jar.xml ファイルをコンフィグレーションする方法の例です。
コード リスト 4-3 FederationURL を EJBに渡す 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-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>
<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>
実行時に FederationURLを EJB に渡すには、アプリケーションの ejb-jar.xml ファイルにその EJB 用の env-entry を追加します。次の env-entry 下位要素を割り当てる必要があります。
env-entry-name 要素は、env-entry-value 要素内の値を EJB に渡すために使われる変数の名前を指定するために使用されます。リスト4-3 で示したコード例では、env-entry-name を foreignOrb と指定しています。
env-entry-type 要素は、EJB に渡される env-entry-value 要素のデータ型(たとえば String、Integer、Double)を指定するために使用されます。リスト4-3 で示したコード例では、foreignOrb 変数が String データを EJB に渡しています。
env-entry-value 要素は、EJB に渡されるデータを指定するために使用されます。リスト4-3 で示したコード例では、foreignOrb 変数が次の FederationURL 形式で EJB に渡すということを指定しています。
ここで、simpapp とは、Tuxedo UBB で指定されている Tuxedo リモート サービスの DOMAINID です。
オブジェクトにアクセスするための FederationURL を使用するために EJB を変更する方法
この節では、リモート Tuxedo CORBA オブジェクトにアクセスするために使用される InitialContext を取得するための FederationURL を使用する方法に関する情報を提供します。
次のコードは InitialContext を取得するための FederationURL の使い方の例です。
コード リスト 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 value "+ne);
}
catch (RemoteException re) {
throw new CreateException("Error creating remote ejb "+re);
}
}
.
.
.
リモート Tuxedo CORBA オブジェクトの InitinalContext を取得する FederationURL を使用するための手順を以下に示します。
"ic.lookup("java:/comp/env/foreignOrb")
リスト4-3 で示したコード例では、foreignOrb 変数が次の FederationURL 形式で EJB に渡すということを指定しています。
env.put(Context.PROVIDER_URL, (String) ic.lookup("java:/comp/env/foreignOrb") + "/NameService");
InitialContext cos = new InitialContext(env);
この節では、以下の FederationURL 形式の構文に関する情報を提供します。
この節では、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 の使用例を示します。
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);
orb.init および resolve_initial_reference に -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 および resolve_initial_reference を使用できます。
次の -ORBDefaultInitRef 定義を指定します。
-ORBDefaultInitRef corbaloc:tgiop:simpapp
orb.resolve_initial_references("NameService");
corbaloc フォーマットの代わりに corbaname フォーマットを使用することもできます。
-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 アプリケーションでのトランザクションを管理します。詳細については、以下を参照してください。
![]() |
![]() |
![]() |
![]() |
||
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |