WebLogic Tuxedo Connector 移行ガイド
![]() |
![]() |
![]() |
![]() |
以下の節では、WebLogic Tuxedo Connector を使用するように WLEC アプリケーションを変換する方法を示します。この例では、WebLogic Tuxedo Connector を使用して動作するように WebLogic Server 6.1 の examples\wlec\ejb\simpapp
サンプルを変換する手順について説明します。完全な移行済みの FactoryFinder サンプルは BEA dev2dev コードライブラリから入手できます。先に進む前に「前提条件」を確認してください。
この節では、WebLogic Tuxedo Connector で使用するために Tuxedo コンフィグレーション ファイルを変更する方法について説明します。
Tuxedo 環境を確認して WLEC simpapp アプリケーションの実行を準備するには、Tuxedo CORBA simpapp
サンプルを実行する必要があります。
次の手順に従って、$TUXDIR/samples/corba/simpapp
にある Tuxedo サンプルを実行します。
simpapp
サンプルの作業用コピーを作成します。インストールされている Tuxedo から Tuxedo CORBA simpapp
サンプルをコピーし、作業用の simpapp
ディレクトリに格納します。 set
%TUXDIR%
を実行します。Unix の場合は、$TUXDIR/tux.env
を実行して Tuxedo 環境を設定する必要があります。 runme
スクリプトを実行して環境を設定します。CORBA オブジェクト操作のプログラミング インタフェースを提供するクライアント スタブが作成されます。作業ディレクトリの中に、Tuxedo 環境のコンフィグレーションに使用するファイルが格納された results
ディレクトリが作成されます。
java -DTOBJADDR=%TOBJADDR% -classpath %CLASSPATH% SimpleClient
tmshutdown -y
作業用の Tuxedo simpapp
ディレクトリで、次の手順に従って UBB
コンフィグレーションを変更します。
DMADM SRVGRP=SYS_GRP SRVID=7
GWADM SRVGRP=SYS_GRP SRVID=8
GWTDOMAIN SRVGRP=SYS_GRP SRVID=9
次のコードは、変更後の ubbdomain
ファイルの例です。変更されたセクションは太字で示されています。
*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
ディレクトリで、次の手順に従ってドメイン コンフィグレーションを作成します。
*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
次の手順に従って Tuxedo コンフィグレーションを確認します。
tmloadcf -y ubbdomain
set BDMCONFIG=<path_to_your_working_simpapp_example
>/simpapp/results/bdmconfigdmloadcf -y dmconfig
tmboot -y
java -DTOBJADDR=%TOBJADDR% -classpath %CLASSPATH% SimpleClient
tmshutdown -y
vi やメモ帳などのテキスト エディタを使用して、接続プール記述子を削除し、trans-attribute を更新します。以下のコード リストは、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 更新後の 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/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 =
org.omg.CORBA.Object fact_finder_oref =
// bootstrap.resolve_initial_references("FactoryFinder") ;
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) {
catch (org.omg.CORBA.UserException 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);
// }
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 サービスを作成しコンフィグレーションします。
注意 : ローカル アクセス ポイントのネットワーク アドレスをコンフィグレーションする場合、使用するポート番号は、他のプロセスに割り当てられたポート番号とは異なる必要があります。たとえば、WebLogic Server のリスン ポートが //mymachine:7001
に割り当てられている場合、ネットワーク アドレスを //mymachine:7001
に設定すると無効になります。
次の手順に従って、ローカル Tuxedo アクセス ポイントをコンフィグレーションします。
次の手順に従って、リモート Tuxedo アクセス ポイントをコンフィグレーションします。
次の手順に従って、インポートされたサービスをコンフィグレーションします。
注意 : NT または 2000 を使用している場合は、setExamplesEnv.cmd を変更して実行します。Unix を使用している場合は、./config/examples/setExamplesEnv.sh スクリプトを WLEC simpapp ディレクトリにコピーしてから、setExamplesEnv.sh スクリプトを変更して実行します。
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 のモニタ」を参照してください。
![]() |
![]() |
![]() |