ナビゲーションをスキップ

WebLogic Tuxedo Connector 移行ガイド

  前 次 前/次ボタンと目次ボタンとの区切り線 目次  

Tuxedo CORBA simpapp サンプルの変更方法

以下の節では、WebLogic Tuxedo Connector を使用するように WLEC アプリケーションを変換する方法を示します。この例では、WebLogic Tuxedo Connector を使用して動作するように WebLogic Server 6.1 の examples\wlec\ejb\simpapp サンプルを変換する手順について説明します。完全な移行済みの FactoryFinder サンプルは「BEA dev2dev コードライブラリ」から入手できます。先に進む前に「前提条件」を確認してください。

 


Tuxedo 環境の変更方法

この節では、WebLogic Tuxedo Connector で使用するために Tuxedo コンフィグレーション ファイルを変更する方法について説明します。

Tuxedo CORBA simpapp サンプルの実行

Tuxedo 環境を確認して WLEC simpapp アプリケーションの実行を準備するには、Tuxedo CORBA simpapp サンプルを実行する必要があります。

次の手順に従って、$TUXDIR/samples/corba/simpapp にある Tuxedo サンプルを実行します。

  1. Tuxedo CORBA simpapp サンプルの作業用コピーを作成します。インストールされている Tuxedo から Tuxedo CORBA simpapp サンプルをコピーし、作業用の simpapp ディレクトリに格納します。
  2. 作業用の simpapp ディレクトリへ移動します。
  3. サンプルをビルドして実行します。
    1. Tuxedo 環境を設定します。Windows の場合は、シェル環境で set %TUXDIR% を実行します。Unix の場合は、$TUXDIR/tux.env を実行して Tuxedo 環境を設定する必要があります。
    2. C++ コンパイラが PATH に含まれていることを確認します。
    3. JAVA_HOME 環境変数を Tuxedo Java JDK の場所に設定します。
    4. runme スクリプトを実行して環境を設定します。CORBA オブジェクト操作のプログラミング インタフェースを提供するクライアント スタブが作成されます。作業ディレクトリの中に、Tuxedo 環境のコンフィグレーションに使用するファイルが格納された results ディレクトリが作成されます。
    5. クライアントを実行します。
    6. java -DTOBJADDR=%TOBJADDR% -classpath %CLASSPATH% SimpleClient
    7. Tuxedo サーバを停止します。
    8. tmshutdown -y

UBB コンフィグレーション ファイルの変更

作業用の Tuxedo simpapp ディレクトリで、次の手順に従って UBB コンフィグレーションを変更します。

  1. 作業ディレクトリの results/ubb ファイルの名前を results/ubbdomain に変更します。
  2. vi やワードパッドなどのテキスト エディタを使用して ubbdomain ファイルを編集します。
  3. *SERVERS セクションに Tuxedo ゲートウェイ サーバを追加します。
  4. 例 : 次のサーバを追加します。

     DMADM SRVGRP=SYS_GRP SRVID=7
     GWADM SRVGRP=SYS_GRP SRVID=8
     GWTDOMAIN SRVGRP=SYS_GRP SRVID=9
  1. ubbdomain ファイルを保存します。

次のコードは、変更後の 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 ディレクトリで、次の手順に従ってドメイン コンフィグレーションを作成します。

  1. vi やメモ帳などのテキスト エディタを使用してドメイン コンフィグレーション ファイルを作成します。最も簡単な方法は dmconfig のコード例を切り取り、エディタに貼り付けることです。
  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="<ドメインの TLOG デバイスのパス>"
                DMTLOGNAME="DMTLOG_TUXDOM"
     *DM_REMOTE_DOMAINS
          examples TYPE=TDOMAIN DOMAINID="examples"
     *DM_TDOMAIN
          TUXDOM NWADDR="<Tuxedo ドメインのネットワーク アドレス>"
          examples NWADDR="<WTC ドメインのネットワーク アドレス>"
     *DM_REMOTE_SERVICES
  1. ファイルに dmconfig という名前を付けて作業用の simpapp/results ディレクトリに保存します。

Tuxedo 環境のテスト

次の手順に従って Tuxedo コンフィグレーションを確認します。

  1. 新しいシェルで、作業用の simpapp/results ディレクトリに移動します。
  2. ご使用のプラットフォームの setenv スクリプトを使用して環境を設定します。
  3. ubbdomain ファイルをロードします。
  4. tmloadcf -y ubbdomain
  5. dmconfig ファイルをロードします。
  6. set BDMCONFIG=<path_to_your_working_simpapp_example>/simpapp/results/bdmconfig
    dmloadcf -y dmconfig
  7. 以下のコマンドで、Tuxedo ドメインを起動します。
  8. tmboot -y
  9. Tuxedo 環境を確認します。
  10. java -DTOBJADDR=%TOBJADDR% -classpath %CLASSPATH% SimpleClient
  11. Tuxedo サーバを停止します。
  12. tmshutdown -y

 


ejb-jar.xml ファイルの変更

vi やメモ帳などのテキスト エディタを使用して、接続プール記述子を削除し、trans-attribute を更新します。以下のリストは、WLEC simpapp サンプルの ejb-jar.xml で、IIOP 接続プール記述子の参照を削除する方法を示したコード例です。

コード リスト 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>

 


build.xml ファイルの更新

移行したアプリケーションの WebLogic 8.1 環境へのコンパイルとデプロイを容易にするために、build.xml ファイルを以下に示します。以下のサンプル コードを使用して、build.xml ファイルの内容を置き換えてください。

コード リスト 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>

 


WLEC ConverterBean の変更

以下のリストは、wlec/ejb/simpapp サンプルの ConverterBean.java ファイルを変更し、WebLogic Tuxedo Connector を使用して Tuxedo と相互運用する方法を示したコード例です。

コード リスト 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> はステートレス
* セッション Bean。
* この Bean は以下を表す
* <ul>
* <li> ISL/ISH プロセス、次に WebLogic Enterprise サーバにアクセスする
* <li> セッション Bean への呼び出しと呼び出しの間に永続性はない
* <li> アプリケーション定義の例外
* </ul>
*
* @author Copyright (c) 1999-2001 by BEA Systems, Inc. All Rights Reserved.
*/
public class ConverterBean implements SessionBean {

static SimpleFactory simple_factory_ref;

// -----------------------------------------------------------------
// プライベート変数
private SessionContext ctx;
private Context rootCtx;
private ORB orb;

// -----------------------------------------------------------------
// セッション Bean の実装

/**
* このメソッドは 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 Tuxedo Connector のコンフィグレーション

以下の手順に従って、WebLogic Server と変更済みの WLEC アプリケーションに接続するように WebLogic Tuxedo Connector をコンフィグレーションします。

WTC サービスを作成する

  1. 左ペインで [WebLogic Tuxedo Connector] ノードを選択します。
  2. [新しい WTC Service のコンフィグレーション] をクリックします。
  3. [名前] フィールドに、このコンフィグレーションを識別する My_WLEC_App を入力します。
  4. [作成] をクリックします。

ローカル Tuxedo アクセス ポイントを作成する

  1. [WebLogic Tuxedo Connector] ノードをクリックします。
  2. WTC サーバ インスタンスを選択し、クリックしてノードを展開します。
  3. [ローカル Tuxedo アクセス ポイント] ノードをクリックします。
  4. [新しい Local Tuxedo Access Point のコンフィグレーション] をクリックします。
  5. [アクセス ポイント] に My_Local_WLS_Dom と入力します。
  6. [アクセス ポイント ID] に examples と入力します。
  7. [ネットワーク アドレス] に、このローカル ドメインをホストする WebLogic Server 環境のネットワーク アドレスとポートを入力します。
  8. 例 : //my_WLS_machine:5678

  9. [作成] をクリックします。

リモート Tuxedo アクセス ポイントを作成する

  1. [WebLogic Tuxedo Connector] ノードをクリックします。
  2. WTC サーバ インスタンスを選択し、クリックしてノードを展開します。
  3. [リモート Tuxedo アクセス ポイント] ノードをクリックします。
  4. [新しい Remote Tuxedo Access Point のコンフィグレーション] をクリックします。
  5. [アクセス ポイント] に My_WLEC_Dom と入力します。
  6. [アクセス ポイント ID] に TUXDOM と入力します。
  7. [ローカル アクセス ポイント] に My_Local_WLS_Dom と入力します。
  8. [ネットワーク アドレス] に、このリモート ドメインをホストする Tuxedo 環境のネットワーク アドレスとポートを入力します。
  9. 例 : //my_TUX_machine:5678

  10. [作成] をクリックします。

インポートされたサービスを作成する

  1. [WebLogic Tuxedo Connector] ノードをクリックします。
  2. WTC サーバ インスタンスを選択し、クリックしてノードを展開します。
  3. [インポートされたサービス] ノードをクリックします。
  4. [新しい Imported Service のコンフィグレーション] をクリックします。
  5. [リソース名] に //simpapp と入力します。
  6. [ローカル アクセス ポイント] に My_Local_WLS_Dom と入力します。
  7. [リモート アクセス ポイント リスト] に My_WLEC_Dom と入力します。
  8. [作成] をクリックします。

 


simpapp サンプルの実行

  1. 新しいシェルを開いて、作業用の Tuxedo CORBA simpapp サンプルに移動します。
  2. 環境変数を設定します。
  3. NT または 2000 の場合は次のコマンドを実行します。results\setenv.cmd

    Unix の場合は次のコマンドを実行します。results\setenv.sh

  4. 以下のコマンドで、Tuxedo ドメインを起動します。
  5. tmboot -y
  6. 新しいシェルを開いて、WebLogic Server WLEC simpapp サンプルに移動します。
  7. 環境変数を設定します。以下のパラメータを更新します。

注意 : NT または 2000 を使用している場合は、setExamplesEnv.cmd を変更して実行します。Unix を使用している場合は、./config/examples/setExamplesEnv.sh スクリプトを WLEC simpapp ディレクトリにコピーしてから、setExamplesEnv.sh スクリプトを変更して実行します。

  1. simple.idl ファイルを Tuxedo CORBA simpapp サンプルから WebLogic Server WLEC simpapp サンプルにコピーします。
  2. ant を使用して wlec_simpapp_corba.jar ファイルをビルドします。
  3. ant」というコマンドを入力します。

  4. WLS コンソールを使用して My_WLEC_App をサーバに割り当てます。
  5. クライアントを実行します。
  6. 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 のトレース機能を使用します。「WebLogic Tuxedo Connector のモニタ」を参照してください。

 

ページの先頭 前 次