Oracle® Fusion Middleware WLEC から Oracle WebLogic Server への Tuxedo Connector 移行の概要 11g リリース 1 (10.3.1) B55563-01 |
|
![]() 戻る |
以下の節では、Oracle WebLogic Tuxedo Connector を使用するように WLEC アプリケーションを変換する方法について説明します。この例では、Oracle WebLogic Tuxedo Connector を使用して動作するように WebLogic Server 6.1 の examples\wlec\ejb\simpapp
サンプルを変換する手順について説明します。
先に進む前に、「前提条件」を確認してください。
以下の節では、Oracle WebLogic Tuxedo Connector で使用するために Tuxedo コンフィグレーション ファイルを変更する方法について説明します。
Tuxedo 環境を確認して WLEC simpapp
アプリケーションの実行を準備するには、Tuxedo CORBA simpapp
サンプルを実行する必要があります。
次の手順に従って、$TUXDIR/samples/corba/simpapp
にある Tuxedo サンプルを実行します。
Tuxedo CORBA simpapp
サンプルの作業用コピーを作成します。インストールされている Tuxedo から Tuxedo CORBA simpapp
サンプルをコピーし、作業用の simpapp
ディレクトリに格納します。
作業用の simpapp
ディレクトリへ移動します。
サンプルをビルドして実行します。
Tuxedo 環境を設定します。Windows の場合は、シェル環境で set %TUXDIR%
を実行します。Unix の場合は、$TUXDIR/tux.env
を実行して Tuxedo 環境を設定する必要があります。
C++ コンパイラが PATH
に含まれていることを確認します。
JAVA_HOME
環境変数を Tuxedo Java JDK の場所に設定します。
runme
スクリプトを実行して環境を設定します。CORBA オブジェクト操作のプログラミング インタフェースを提供するクライアント スタブが作成されます。作業ディレクトリの中に、Tuxedo 環境のコンフィグレーションに使用するファイルが格納された results
ディレクトリが作成されます。
クライアントを実行します。
java -DTOBJADDR=%TOBJADDR% -classpath %CLASSPATH% SimpleClient
Tuxedo サーバを停止します。
tmshutdown -y
作業用の Tuxedo simpapp
ディレクトリで、次の手順に従って UBB コンフィグレーションを変更します。
作業ディレクトリの results/ubb
ファイルの名前を results/ubbdomain
に変更します。
vi やワードパッドなどのテキスト エディタを使用して ubbdomain
ファイルを編集します。
*SERVERS
セクションに Tuxedo ゲートウェイ サーバを追加します。
例 : 次のサーバを追加します。
DMADM SRVGRP=SYS_GRP SRVID=7 GWADM SRVGRP=SYS_GRP SRVID=8 GWTDOMAIN SRVGRP=SYS_GRP SRVID=9
ubbdomain
ファイルを保存します。
コード リスト 3-1 は、変更後の ubbdomain
ファイルの例です。変更されたセクションは太字で示されています。
コード リスト 3-1 変更後の UBB ファイル
*RESOURCES IPCKEY 55432 DOMAINID simpapp MASTER SITE1 MODEL SHM LDBAL N *MACHINES "balto" LMID = SITE1 APPDIR = "/tux_apps/corba/simpapp" TUXCONFIG = "/tux_apps/corba/simpapp/results/tuxconfig" TUXDIR = "/my_machine/tux/tuxedo8.1" MAXWSCLIENTS = 10 *GROUPS SYS_GRP LMID = SITE1 GRPNO = 1 APP_GRP LMID = SITE1 GRPNO = 2 *SERVERS DEFAULT: RESTART = Y MAXGEN = 5 TMSYSEVT SRVGRP = SYS_GRP SRVID = 1 TMFFNAME SRVGRP = SYS_GRP SRVID = 2 CLOPT = "-A -- -N -M" TMFFNAME SRVGRP = SYS_GRP SRVID = 3 CLOPT = "-A -- -N" TMFFNAME SRVGRP = SYS_GRP SRVID = 4 CLOPT = "-A -- -F" simple_server SRVGRP = APP_GRP SRVID = 1 RESTART = N # ISL ハンドラは、WTC には必要とされない。 # 他の WLEC アプリケーションで必要がない場合は、 # これは削除できます。 ISL SRVGRP = SYS_GRP SRVID = 5 CLOPT = "-A -- -n //mymachine:2468 -d /dev/tcp" DMADM SRVGRP = SYS_GRP SRVID = 7 GWADM SRVGRP = SYS_GRP SRVID = 8 GWTDOMAIN SRVGRP = SYS_GRP SRVID = 9 *SERVICES
作業用の Tuxedo simpapp
ディレクトリで、次の手順に従ってドメイン コンフィグレーションを作成します。
vi やメモ帳などのテキスト エディタを使用してドメイン コンフィグレーション ファイルを作成します。最も簡単な方法は DMCONFIG
のサンプル コードを切り取り、エディタに貼り付けることです。
コード リスト 3-2 の太字山括弧 <>
で囲まれたすべての項目を使用している環境の情報に置き換えます。
コード リスト 3-2 dmconfig ファイル
*DM_RESOURCES VERSION=U22 *DM_LOCAL_DOMAINS TUXDOM GWGRP=SYS_GRP TYPE=TDOMAIN DOMAINID="TUXDOM" BLOCKTIME=20 MAXDATALEN=56 MAXRDOM=89 DMTLOGDEV="<Path to domain TLOG device>" DMTLOGNAME="DMTLOG_TUXDOM" *DM_REMOTE_DOMAINS examples TYPE=TDOMAIN DOMAINID="examples" *DM_TDOMAIN TUXDOM NWADDR="<network address of Tuxedo domain>" examples NWADDR="<network address of WTC domain>" *DM_REMOTE_SERVICES
ファイルに DMCONFIG
という名前を付けて作業用の simpapp/results
ディレクトリに保存します。
次の手順に従って Tuxedo コンフィグレーションを確認します。
新しいシェルで、作業用の simpapp/results
ディレクトリに移動します。
ご使用のプラットフォームの setenv
スクリプトを使用して環境を設定します。
ubbdomain
ファイルをロードします。
tmloadcf -y ubbdomain
DMCONFIG
ファイルをロードします。
set BDMCONFIG=<path_to_your_working_simpapp_example>/simpapp/results/bdmconfig dmloadcf -y dmconfig
Tuxedo ドメインを起動します。
tmboot -y
Tuxedo 環境を確認します。
java -DTOBJADDR=%TOBJADDR% -classpath %CLASSPATH% SimpleClient
Tuxedo サーバを停止します。
tmshutdown -y
vi やメモ帳などのテキスト エディタを使用して、接続プール記述子を削除し、trans-attribute を更新します。コード リスト 3-3 は、WLEC simpapp
サンプルの ejb-jar.xml
で、IIOP 接続プール記述子の参照を削除する方法を示したサンプル コードです。このサンプルでは、
env-entry
属性を削除します。
container-transaction
の trans-attribute
を Supports
に設定します。サンプルにはトランザクションがないため、container-transaction
を Required
にすることはできません。
コード リスト 3-3 CORBA サーバ アプリケーションのサンプル XML コンフィグレーション ファイル
. . . <ejb-jar> <enterprise-beans> <session> <ejb-name>ejb</ejb-name> <home>examples.wlec.ejb.simpapp.ConverterHome</home> <remote>examples.wlec.ejb.simpapp.Converter</remote> <ejb-class>examples.wlec.ejb.simpapp.ConverterBean</ejb-class> <session-type>Stateless</session-type> <transaction-type>Container</transaction-type> <!-- 以下の文を削除またはコメント アウトする <env-entry> <env-entry-name>IIOPPoolName</env-entry-name> <env-entry-type>java.lang.String</env-entry-type> <env-entry-value>simplepool</env-entry-value> </env-entry> --> </session> </enterprise-beans> <assembly-descriptor> <container-transaction> <method> <ejb-name>ejb</ejb-name> <method-intf>Remote</method-intf> <method-name>*</method-name> </method> <trans-attribute>Supports</trans-attribute> </container-transaction> </assembly-descriptor> </ejb-jar>
移行したアプリケーションの WebLogic 環境へのコンパイルとデプロイを容易にするために、build.xml
ファイルを以下に示します。build.xml
ファイルの内容をコード リスト 3-4 に示すコードに置き換えます。
コード リスト 3-4 更新後の build.xml ファイル
<project name="wlec-ejb-simpapp" default="all" basedir="."> <!-- このビルドのグローバル プロパティを設定する --> <property environment="env"/> <property file="../../../../examples.properties"/> <property name="build.compiler" value="${compiler}"/> <property name="source" value="."/> <property name="build" value="${source}/build"/> <property name="dist" value="${source}/dist"/> <property name="ejb_classes" value="Converter.java, ConverterHome.java, ConverterResult.java, ProcessingErrorException.java, ConverterBean.java"/> <property name="ejb_jar" value="wlec_simpapp_corba.jar"/> <property name="client_classes" value="Converter.java, ConverterHome.java, ConverterResult.java, ProcessingErrorException.java, Client.java"/> <target name="all" depends="clean, init, compile_idl, compile_ejb, jar_ejb, appc, compile_client"/> <target name="init"> <!-- タイム スタンプを作成する --> <tstamp/> <!-- コンパイルで使用される build ディレクトリ構造を作成して、デプロイメント記述子をコピーする--> <mkdir dir="${build}"/> <mkdir dir="${build}/META-INF"/> <mkdir dir="${dist}"/> <copy todir="${build}/META-INF"> <fileset dir="${source}"> <include name="*.xml"/> <exclude name="build.xml"/> </fileset> </copy> </target> <!-- IDL スタブ クラスを build ディレクトリにコンパイルする (jar の準備) --> <target name="compile_idl"> <exec executable="idlj" dir="."> <arg line="-td build -pkgPrefix Simple simple -pkgPrefix SimpleFactory simple simple.idl" /> </exec> <javac srcdir="${build}" destdir="${build}" classpath="${CLASSPATH};${build}"/> <delete> <fileset dir="${build}"> <include name="*.java"/> </fileset> </delete> </target> <!-- ejb クラスを build ディレクトリにコンパイルする (jar の準備) --> <target name="compile_ejb"> <javac srcdir="${source}" destdir="${build}" includes="${ejb_classes}" classpath="${CLASSPATH};${build}"/> </target> <!-- XML デプロイメント記述子を含む標準の ejb jar ファイルを作成する --> <target name="jar_ejb" depends="compile_ejb"> <jar jarfile="${dist}/std_${ejb_jar}" basedir="${build}"> </jar> </target> <!-- appc を実行してデプロイ可能な jar ファイルを作成する --> <target name="appc" depends="jar_ejb"> <echo message="Generating container classes in ${apps.dir}/${ejb_jar}"/> <wlappc debug="${debug}" iiop="true" source="${dist}/std_${ejb_jar}" output="${apps.dir}/${ejb_jar}" /> </target> <!-- EJB インタフェースとクライアント アプリケーションを clientclasses ディレクトリにコンパイルする --> <target name="compile_client"> <javac srcdir="${source}" destdir="${client.classes.dir}" includes="${client_classes}" /> </target> <target name="run"> <java classname="examples.wlec.ejb.simpapp.Client"> </java> </target> <target name="clean"> <delete dir="${build}"/> <delete dir="${dist}"/> </target> </project>
コード リスト 3-5 は、wlec/ejb/simpapp
サンプルの ConverterBean.java ファイルを変更し、Oracle WebLogic Tuxedo Connector を使用して Tuxedo と相互運用する方法を示したサンプル コードです。
変更箇所はすべて太字で new code
のように強調表示されています。
不要になった文は //
を使用して // old code
のようにコメント アウトされています。
コード リスト 3-5 変更後の ConverterBean.java ファイル
package examples.wlec.ejb.simpapp; import javax.ejb.*; import java.io.Serializable; import java.util.*; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import org.omg.CORBA.*; import com.beasys.Tobj.*; import com.beasys.*; /*以下は WebLogic Enterprise Simpapp サンプルのもの*/ //import SimpleFactory; //import SimpleFactoryHelper; //import Simple; import simple.SimpleFactory; import simple.SimpleFactoryHelper; import simple.Simple; /** * <font face="Courier New" size=-1>ConverterBean</font> はステートレス * SessionBean。 * この Bean は以下を表す、 * <ul> * <li> ISL/ISH プロセス、次に WebLogic Enterprise サーバにアクセスする * <li> SessionBean への呼び出しと呼び出しの間に永続性はない * <li> アプリケーション定義の例外 * </ul> */ public class ConverterBean implements SessionBean { static SimpleFactory simple_factory_ref; // ----------------------------------------------------------------- // プライベート変数 private SessionContext ctx; private Context rootCtx; private ORB orb; // ----------------------------------------------------------------- // SessionBean の実装 /** * このメソッドは EJB 仕様では必須だが、 * このサンプルでは使用されない。 * */ public void ejbActivate() {} /** * このメソッドは EJB 仕様では必須だが、 * このサンプルでは使用されない。 * */ public void ejbRemove() {} /** * このメソッドは EJB 仕様では必須だが、 * このサンプルでは使用されない。 * */ public void ejbPassivate() {} /** * セッション コンテキストを設定する。 * * @param ctx SessionContext セッションのコンテキスト */ public void setSessionContext(SessionContext ctx) { this.ctx = ctx; } // EJBObject に公開されるインタフェース /** * このメソッドはホーム インタフェース <font face="CourierNew"size=-1>ConverterHome.java</font> の * <font face="Courier New" size=-1>create</font> *メソッドに相当する。 * これらの 2 つのメソッドのパラメータ セットは同じ。クライアントが * <font face="Courier New" size=-1>ConverterHome.create</font> メソッドを呼び出すと、 * コンテナは EJBean のインスタンスを割り当て、 * <font face="Courier New" size=-1>ejbCreate</font> メソッドを呼び出す。* * @exception CreateException * IIOP プールの初期化中にエラーがある場合、 * @see examples.wlec.ejb.simpapp.Converter */ public void ejbCreate () throws CreateException { try { // try { // Properties p = new Properties(); // p.put(Context.INITIAL_CONTEXT_FACTORY, // "weblogic.jndi.WLInitialContextFactory"); // InitialContext ic = new InitialContext(p); // rootCtx = (Context)ic.lookup("java:comp/env"); // } //catch (NamingException ne) { // throw new CreateException("Could not lookup context"); // } // ORB を初期化する。 String args[] = null; Properties Prop; Prop = new Properties(); Prop.put("org.omg.CORBA.ORBClass", "weblogic.wtc.corba.ORB"); orb = (ORB)new InitialContext().lookup("java:comp/ORB"); initIIOPpool(); } catch (Exception e) { throw new CreateException("ejbCreate called: " + e); } } /** * 文字列を大文字に変換する。 * * @param mixed string 入力データ * @return ConverterResult 変換結果 * @exception examples.wlec.ejb.simpapp.ProcessingErrorException * 文字列の変換中にエラーがある場合、 */ public ConverterResult toUpper(String mixed) throws ProcessingErrorException { return convert("UPPER", mixed); } /** * 文字列を小文字に変換する。 * * @param mixed string 入力データ * @return ConverterResult 変換結果 * @exception examples.wlec.ejb.simpapp.ProcessingErrorException * 文字列の変換中にエラーがある場合、 */ public ConverterResult toLower(String mixed) throws ProcessingErrorException { return convert("LOWER", mixed); } protected ConverterResult convert (String changeCase, String mixed) throws ProcessingErrorException { String result; try { // simple オブジェクトを見つける。 Simple simple = simple_factory_ref.find_simple(); if (changeCase.equals("UPPER")) { // M3 Simple オブジェクトの to_upper 操作を呼び出す org.omg.CORBA.StringHolder buf = new org.omg.CORBA.StringHolder(mixed); simple.to_upper(buf); result = buf.value; } else { result = simple.to_lower(mixed); } } catch (org.omg.CORBA.SystemException e) { throw new ProcessingErrorException("Converter error: Corba system exception: " + e); } catch (Exception e) { throw new ProcessingErrorException("Converter error: " + e); } return new ConverterResult(result); } // プライベート メソッド /** * WebLogic Enterprise Connectivity プール名を返す。 * * @return String IIOP プール名 */ // private String getIIOPPoolName() throws ProcessingErrorException { // try { // return (String) rootCtx.lookup("IIOPPoolName"); //} // catch (NamingException ne) { // throw new ProcessingErrorException ("IIOPPoolName not found in context"); //} //} /** * IIOP 接続プールを初期化する。 */ private void initIIOPpool() throws Exception { try { // bootstrap オブジェクトを作成、 // Tobj_Bootstrap bootstrap = // BootstrapFactory.getClientContext(getIIOPPoolName()); // bootstrap オブジェクトを使用してファクトリ ファインダを見つける。 // org.omg.CORBA.Object fact_finder_oref = // bootstrap.resolve_initial_references("FactoryFinder") ; org.omg.CORBA.Object fact_finder_oref = orb.string_to_object("corbaloc:tgiop:simpapp/FactoryFinder"); // ファクトリ ファインダをナロー変換 FactoryFinder fact_finder_ref = FactoryFinderHelper.narrow(fact_finder_oref); // ファクトリ ファインダを使用して Simple ファクトリを見つける org.omg.CORBA.Object simple_fact_oref = fact_finder_ref.find_one_factory_by_id(SimpleFactoryHelper.id()); // simple ファクトリをナロー変換。 simple_factory_ref = SimpleFactoryHelper.narrow(simple_fact_oref); } catch (org.omg.CosLifeCycle.NoFactory e) { throw new Exception("Can't find the simple factory: " +e); } catch (CannotProceed e) { throw new Exception("FactoryFinder internal error: " +e); } catch (RegistrarNotAvailable e) { throw new Exception("FactoryFinder Registrar not available: " +e); } //catch (InvalidName e) { // throw new Exception("Invalid name from resolve_initial_reference(): " +e); //} // catch (org.omg.CORBA.BAD_PARAM e) { // throw new Exception("Invalid TOBJADDR=//host:port property specified: " +e); // } catch (org.omg.CORBA.UserException e) { throw new Exception("Unexpected CORBA user exception: " +e); } catch (org.omg.CORBA.SystemException e) { throw new Exception("CORBA system exception: " +e); } } }
以下の節では、WebLogic Server と変更済みの WLEC アプリケーションを接続するように WebLogic Tuxedo Connector をコンフィグレーションする方法を説明します。
WebLogic Server Administration Console を使用して、WTC サービスを作成およびコンフィグレーションするには、次の手順に従います。
Administration Console のナビゲーション ツリーで、[相互運用性] を展開して [WTC サーバ] を選択します。
[WTC サーバ] ページで、[新規作成] をクリックします。
[新しい WTC サーバの作成] ページの [名前] フィールドに、このコンフィグレーションを識別する My_WLEC_App を入力します。
[OK] をクリックします。
新しい WTC サービスが WTC サーバのリストに表示されます。
注意 : ローカル アクセス ポイントのネットワーク アドレスをコンフィグレーションする場合、使用するポート番号は、他のプロセスに割り当てられたポート番号とは異なる必要があります。たとえば、WebLogic Server のリスン ポートが//mymachine:7001 に割り当てられている場合、ネットワーク アドレスを //mymachine:7001 に設定すると無効になります。 |
ローカル Tuxedo アクセス ポイントをコンフィグレーションするには、次の手順に従います。
Administration Console で、[相互運用性] を展開して [WTC サーバ] を選択します。
[WTC サーバ] ページで、WTC サービス名をクリックして、設定ページにアクセスします。
[ローカル AP] タブをクリックします。
[WTC ローカル アクセス ポイント] ページで、以下のフィールドに次のとおり、値を入力します。
[アクセス ポイント] に My_Local_WLS_Dom を入力します。
[アクセス ポイント ID] に examples
と入力します。
[ネットワーク アドレス] に、このローカル ドメインをホストする WebLogic Server 環境のネットワーク アドレスとポートを入力します。たとえば、//my_WLS_machine:5678
。
[OK] をクリックします。
リモート Tuxedo アクセス ポイントをコンフィグレーションするには、次の手順に従います。
Administration Console で、[相互運用性] を展開して [WTC サーバ] を選択します。
[WTC サーバ] ページで、WTC サービス名をクリックします。
[リモート AP] タブをクリックします。
[WTC リモート アクセス ポイント] ページで、以下のフィールドに次のとおり、値を入力します。
[アクセス ポイント] に My_WLEC_Dom と入力します。
[アクセス ポイント ID] に TUXDOM と入力します。
[ローカル アクセス ポイント] に My_Local_WLS_Dom と入力します。
[ネットワーク アドレス] に、このリモート ドメインをホストする Tuxedo 環境のネットワーク アドレスとポートを入力します。たとえば、//my_TUX_machine:5678
。
[OK] をクリックします。
インポートされたサービスをコンフィグレーションするには、次の手順に従います。
Administration Console で、[相互運用性] を展開して [WTC サーバ] を選択します。
[WTC サーバ] ページで、WTC サービス名をクリックします。
[インポート済み] タブをクリックします。
[WTC インポート サービス] ページで、以下のフィールドに次のとおり、値を入力します。
[リソース名] に、//simpapp
と入力します。
[ローカル アクセス ポイント] に、My_Local_WLS_Dom と入力します。
[リモート アクセス ポイント リスト] に、My_WLEC_Dom と入力します。
[リモート 名] に、//
domain_id
を入力します。domain_id
は、Tuxedo UBBCONFIG
ファイルで指定された DOMAINID
です。この CORBA ドメインのユニークな識別子の最大長は、//
を含めて 15 文字です。たとえば、//simpappff
。
[OK] をクリックします。
simpapp
サンプルを実行するには、次の手順を実行します。
新しいシェルを開いて、作業用の Tuxedo CORBA simpapp
サンプルに移動します。
環境変数を設定します。
Windows NT および 2000 システムの場合、次のコマンドを実行します。
results\setenv.cmd
UNIX システムの場合、次のコマンドを実行します。
results\setenv.sh
Tuxedo ドメインを起動します。
tmboot -y
新しいシェルを開いて、WebLogic Server WLEC simpapp
サンプルに移動します。
環境変数を設定します。以下のパラメータを更新します。
注意 : Windows NT または 2000 システムでは、setExamplesEnv.cmd script を変更して実行します。UNIX システムの場合、WLEC simpapp ディレクトリィに ./config/examples/setExamplesEnv.sh script をコピーしてから、setExamplesEnv.sh スクリプトを変更して実行します。 |
simple.idl
ファイルを Tuxedo CORBA simpapp
サンプルから WebLogic Server WLEC simpapp
サンプルにコピーします。
以下のコマンドを使用して、wlec_simpapp_corba.jar
ファイルをビルドします。
ant
WLS コンソールを使用して My_WLEC_App をサーバに割り当てます。
以下のコマンドを入力して、クライアントを実行します。
ant run
Java アプリケーションは次のような出力を生成します。
Beginning simpapp.Client... Start of Conversion for: It Works Converting to lower case: It Works ...Converted: it works Converting to upper case: It Works ...Converted: IT WORKS Removing Converter End simpapp.Client...
サンプルの実行中に問題が発生する場合は、WTC のトレース機能を使用します。『Oracle Fusion Middleware Oracle WebLogic Server Tuxedo Connector 管理ガイド』の「WebLogic Tuxedo Connector のトラブルシューティング」を参照してください。