Oracle® Fusion Middleware Oracle WebLogic Server WLECのためのWebLogic Tuxedo Connector移行ガイド 11g リリース1 (10.3.6) B61643-05 |
|
前 |
以下の項では、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 # The ISL handler is not needed for WTC. # If you do not need it for other WLEC applications, # it can be removed. 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> <!-- Remove or comment out the following statements <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="."> <!-- set global properties for this build --> <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"> <!-- Create the time stamp --> <tstamp/> <!-- Create the build directory structure used by compile and copy the deployment descriptors into it--> <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> <!-- Compile IDL stub classes into the build directory (jar preparation) --> <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> <!-- Compile ejb classes into the build directory (jar preparation) --> <target name="compile_ejb"> <javac srcdir="${source}" destdir="${build}" includes="${ejb_classes}" classpath="${CLASSPATH};${build}"/> </target> <!-- Make a standard ejb jar file, including XML deployment descriptors --> <target name="jar_ejb" depends="compile_ejb"> <jar jarfile="${dist}/std_${ejb_jar}" basedir="${build}"> </jar> </target> <!-- Run appc to create the deployable jar file --> <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> <!-- Compile EJB interfaces & client app into the clientclasses directory --> <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.*; /*These come from WebLogic Enterprise Simpapp sample */ //import SimpleFactory; //import SimpleFactoryHelper; //import Simple; import simple.SimpleFactory; import simple.SimpleFactoryHelper; import simple.Simple; /** * <font face="Courier New" size=-1>ConverterBean</font> is a stateless * SessionBean. * This bean illustrates: * <ul> * <li> Accessing ISL/ISH process and then a WebLogic Enterprise server * <li> No persistence of state between calls to the SessionBean * <li> Application-defined exceptions * </ul> */ public class ConverterBean implements SessionBean { static SimpleFactory simple_factory_ref; // ----------------------------------------------------------------- // private variables private SessionContext ctx; private Context rootCtx; private ORB orb; // ----------------------------------------------------------------- // SessionBean implementation /** * This method is required by the EJB Specification, * but is not used by this example. * */ public void ejbActivate() {} /** * This method is required by the EJB Specification, * but is not used by this example. * */ public void ejbRemove() {} /** * This method is required by the EJB Specification, * but is not used by this example. * */ public void ejbPassivate() {} /** * Sets the session context. * * @param ctx SessionContext context for session */ public void setSessionContext(SessionContext ctx) { this.ctx = ctx; } // Interface exposed to EJBObject /** * This method corresponds to the <font face="Courier New" size=-1>create</font> * method in the home interface <font *face="CourierNew"size=-1>ConverterHome.java</font>. * The parameter sets of these two methods are identical. When the client calls the * <font face="Courier New" size=-1>ConverterHome.create</font> method, the * container allocates an instance of the EJBean and calls the * <font face="Courier New" size=-1>ejbCreate</font> method. * * @exception CreateException * if there is an error while initializing the IIOP pool * @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"); // } // Initialize the 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); } } /** * Converts the string to uppercase. * * @param mixed string input data * @return ConverterResult conversion result * @exception examples.wlec.ejb.simpapp.ProcessingErrorException * if there is an error while converting the string */ public ConverterResult toUpper(String mixed) throws ProcessingErrorException { return convert("UPPER", mixed); } /** * Converts the string to lowercase. * * @param mixed string input data * @return ConverterResult conversion result * @exception examples.wlec.ejb.simpapp.ProcessingErrorException * if there is an error while converting the string */ public ConverterResult toLower(String mixed) throws ProcessingErrorException { return convert("LOWER", mixed); } protected ConverterResult convert (String changeCase, String mixed) throws ProcessingErrorException { String result; try { // Find the simple object. Simple simple = simple_factory_ref.find_simple(); if (changeCase.equals("UPPER")) { // Invoke the to_upper opeation on M3 Simple object 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); } // Private methods /** * Returns the WebLogic Enterprise Connectivity pool name. * * @return String IIOP pool name */ // private String getIIOPPoolName() throws ProcessingErrorException { // try { // return (String) rootCtx.lookup("IIOPPoolName"); //} // catch (NamingException ne) { // throw new ProcessingErrorException ("IIOPPoolName not found in context"); //} //} /** * Initializes an IIOP connection pool. */ private void initIIOPpool() throws Exception { try { // Create the bootstrap object, // Tobj_Bootstrap bootstrap = // BootstrapFactory.getClientContext(getIIOPPoolName()); // Use the bootstrap object to find the factory finder. // 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"); // Narrow the factory finder. FactoryFinder fact_finder_ref = FactoryFinderHelper.narrow(fact_finder_oref); // Use the factory finder to find the simple factory. org.omg.CORBA.Object simple_fact_oref = fact_finder_ref.find_one_factory_by_id(SimpleFactoryHelper.id()); // Narrow the simple factory. 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管理コンソールを使用して、WTCサービスを作成および構成するには:
管理コンソールのナビゲーション・ツリーで、「相互運用性」を展開して「WTCサーバー」を選択します。
「WTCサーバー」ページで、「新規作成」をクリックします。
「新しいWTCサーバーの作成」ページの「名前」フィールドに、この構成を識別するMy_WLEC_Appを入力します。
「OK」をクリックします。
新しいWTCサービスがWTCサーバーのリストに表示されます。
注意: ローカル・アクセス・ポイントのネットワーク・アドレスを構成する場合、使用するポート番号は、他のプロセスに割り当てられたポート番号とは異なる必要があります。たとえば、WebLogic Serverのリスニング・ポートが |
ローカルTuxedoアクセス・ポイントを構成するには:
管理コンソールで、「相互運用性」を展開して「WTCサーバー」を選択します。
「WTCサーバー」ページで、WTCサービス名をクリックして、設定ページにアクセスします。
「ローカルAP」タブをクリックします。
「WTCローカル・アクセス・ポイント」ページで、以下のフィールドに次のとおり、値を入力します。
「アクセス・ポイント」にMy_Local_WLS_Domを入力します。
「アクセス・ポイントID」にexamples
と入力します。
「ネットワーク・アドレス」に、このローカル・ドメインをホストするWebLogic Server環境のネットワーク・アドレスとポートを入力します。たとえば、//my_WLS_machine:5678
。
「OK」をクリックします。
リモートTuxedoアクセス・ポイントを構成するには:
管理コンソールで、「相互運用性」を展開して「WTCサーバー」を選択します。
「WTCサーバー」ページで、WTCサービス名をクリックします。
「リモートAP」タブをクリックします。
「WTCリモート・アクセス・ポイント」ページで、次のフィールドに次の値を入力します:
「アクセス・ポイント」にMy_WLEC_Domと入力します。
「アクセス・ポイントID」にTUXDOMと入力します。
「ローカル・アクセス・ポイント」に、My_Local_WLS_Domと入力します。
「ネットワーク・アドレス」に、このリモート・ドメインをホストするTuxedo環境のネットワーク・アドレスとポートを入力します。たとえば、//my_TUX_machine:5678
。
「OK」をクリックします。
インポートされたサービスを構成するには:
管理コンソールで、「相互運用性」を展開して「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システムでは、 |
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 WebLogic Server Tuxedo Connector管理ガイド』のWebLogic Tuxedo Connectorのトラブルシューティングに関する項を参照してください。