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

WebLogic Tuxedo Connector プログラマーズ ガイド

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

WebLogic Tuxedo Connector での FML の使用

以下の節では、フィールド操作言語 (FML) および WebLogic Tuxedo Connector が FML を使用する方法について説明します。

 


FML の概要

注意 : FML の使い方の詳細については、「Programming a BEA Tuxedo Application Using FML」を参照してください。

FML は、フィールド バッファと呼ばれる記憶構造を定義および操作する Java 言語機能のセットです。各フィールド バッファには、フィールドに属性および値の組み合わせが含まれています。各フィールドは次のように構成されます。

FML には、2 つのタイプがあります。

 


WebLogic Tuxedo Connector FML API

注意 : WebLogic Tuxedo Connector は、FML 機能のサブセットを実装しています。FML32 の詳細については、「FML32 の考慮事項」を参照してください。

FML アプリケーション プログラム インタフェース (API) は、WebLogic クラスの Javadoc に含まれている weblogic.wtc.jatmi パッケージにドキュメント化されています。

 


FML フィールド テーブルの管理

フィールド テーブルは、Tuxedo フィールド テーブルに似た方法で生成されます。フィールド テーブルは、2 つのシステム間で共通のフィールド名定義、フィールド タイプ、および識別番号を提供するテキスト ファイルです。FML を使用して Tuxedo システムと相互運用するには、次の手順を実行する必要があります。

  1. Tuxedo システムから WebLogic Tuxedo Connector 環境に、フィールド テーブルをコピーします。
  2. 次に例を示します。Tuxedo 配布キットには、bankapp という銀行アプリケーション サンプルが含まれています。このアプリケーションには、次の構造を持つ bankflds というファイルがあります。

#Copyright (c) 1990 Unix System Laboratories, Inc.
#All rights reserved
#ident "@(#) apps/bankapp/bankflds $Revision: 1.3 $"
# Fields for database bankdb
# name                         number  type    flags   comments
ACCOUNT_ID 110 long - -
ACCT_TYPE 112 char - -
ADDRESS 109 string - -
.
.
.
  1. フィールド テーブル定義を Java ソース ファイルに変換します。weblogic.wtc.jatmi パッケージの mkfldclass ユーティリティを使用します。このクラスは、FML32 フィールド テーブルを読み取るユーティリティ機能で、FldTbl インタフェースを実装する Java ファイルを生成します。このユーティリティには、次のような 2 つのインスタンスがあります。
  2. コマンドの正しいインスタンスを使用して、bankflds フィールド テーブルを FML32 Java ソースに変換します。次は、mkfldclass を使用した例です。

    java weblogic.wtc.jatmi.mkfldclass bankflds

    作成されたファイルは bankflds.java となり、次のような構造を持ちます。


import java.io.*;
import java.lang.*;
import java.util.*;
import weblogic.wtc.jatmi.*;

public final class bankflds
implements weblogic.wtc.jatmi.FldTbl
{
/** number: 110 type: long */
public final static int ACCOUNT_ID = 33554542;
/** number: 112 type: char */
public final static int ACCT_TYPE = 67108976;
/** number: 109 type: string */
public final static int ADDRESS = 167772269;
/** number: 117 type: float */
.
.
.
  1. 次のコマンドを使用して、作成した bankflds.java ファイルをコンパイルします。
  2. javac bankflds.java

    コンパイルすると、bankflds.class ファイルとなります。ロード時、WebLogic Tuxedo Connector はクラス ファイルを使用して FML32 フィールドからフィールド エントリを追加、検索、および削除します。

  3. フィールド テーブルのクラス ファイルをアプリケーション CLASSPATH に追加します。
  4. WTCServer MBean を更新します。
  5. 次に例を示します。

    <wtc-resources>
         <name>BankappResources</name>
         <fld-tbl16-class>my.bankflds</fld-tbl16-class>
         <fld-tbl16-class>your.bankflds</fld-tbl16-class>
         <fld-tbl16-class>more.bankflds</fld-tbl16-class>
    </wtc-resources>
  6. フィールド テーブルのクラス定義をロードするために、WebLogic Server を再起動します。

mkfldclass32 クラスに対する DynRdHdr プロパティの使用

WebLogic Tuxedo Connector には、FML テーブルを別の方法でコンパイルするためのプロパティが提供されています。以下の場合には、DynRdHdr ユーティリティを使用する必要があります。

FML テーブルをコンパイルする場合には、次の手順で DynRdHdr プロパティを使用します。

  1. フィールド テーブル定義を Java ソース ファイルに変換します。
  2. java -DDynRdHdr=Path_to_Your_FML_Table weblogic.wtc.jatmi.mkfldclass32 userTable

このコマンドの引数の定義は次のとおりです。

属性

説明

-DDynRdHdr

FML テーブルをコンパイルするための WebLogic Tuxedo Connector プロパティ。

Path_to_Your_FML_Table

FML テーブルのパス名。サーバの CLASSPATH でリソース ファイルとして検索可能な絶対パスまたは相対パスを指定する。

weblogic.wtc.jatmi.mkfldclass32

このクラスは、FML32 フィールド テーブルを読み取るユーティリティ機能で、FldTbl インタフェースを実装する Java ファイルを生成する。

userTable

mkfldclass32 クラスによって作成される .java メソッドの名前。

  1. 次のコマンドを使用して、userTable ファイルをコンパイルします。
  2. javac userTable.java 
  3. userTable.class ファイルをアプリケーション CLASSPATH に追加します。
  4. userTable.class ファイルの完全に修飾された場所を反映するため、WTCResources MBean を更新します。
  5. WTCServer を対象とします。WTCServer サービスが開始されるときに、userTable.class がロードされます。

userTable.class ファイルの作成後は、userTable.class を手動で更新しなくても FML テーブルを変更してその変更をデプロイすることができます。WTC サービスの開始時に、WebLogic Tuxedo Connector は、WTC サービス コンフィグレーションの [リソース] タブで指定された場所を使用して更新済みの FML テーブルをロードします。Path_to_Your_FML_Table 属性を変更した場合、前の手順に従って userTable.java および userTable.class ファイルを更新する必要があります。

 


tBridge XML/FML32 変換

注意 : 指定するデータ型は、FLAT または NO にする必要があります。他のデータ型を指定すると、リダイレクションは失敗します。

WTCtBridgeRedirect MBean の TranslateFML 要素は、FML32 変換がメッセージ ペイロードで実行されることを示すために使用します。FML32 変換には、FLAT および NO の 2 つのタイプがあります。

FLAT

メッセージ ペイロードは、WebLogic Tuxedo Connector の内部 FML32/XML トランスレータを使用して変換されます。フィールドは、メッセージ構造 (階層構造) を意識せず、グループ化を反復せずに、フィールドごとの値に変換されます。

FML32 バッファを XML に変換するため、tBridge は FML32 バッファにある各フィールドの各インスタンスを抽出して文字列に変換し、それをフィールド名で構成されるタグ内に配置します。これらすべてのフィールドは、サービス名で構成されるタグ内に配置されます。たとえば、次のフィールドで構成される FML32 バッファがあるとします。

NAME          JOE
ADDRESS CENTRAL CITY
PRODUCTNAME BOLT
PRICE 1.95
PRODUCTNAME SCREW
PRICE 2.50

変換された XML バッファは次のようになります。

<FML32>
<NAME>JOE</NAME>
<ADDRESS>CENTRAL CITY</ADDRESS>
<PRODUCTNAME>BOLT</PRODUCTNAME>
<PRODUCTNAME>SCREW</PRODUCTNAME>
<PRICE>1.95</PRICE>
<PRICE>2.50</PRICE>
</FML32>

NO

変換は使用されません。tBridge は、リダイレクションの方向に応じて、JMS TextMessage を Tuxedo TypedBuffer (TypedString) に (またはその逆に) マップします。JMS BytesMessage は、Tuxedo TypedBuffer (TypedCarray) に (またはその逆に) マップされます。

FML32 の考慮事項

FML32 を使用する場合は、以下の情報について考慮する必要があります。

 


XmlFmlCnv クラスを使用した手動での XML と FML/FML32 間の変換

tBridge を使用して XML バッファと FML/FML32 の間の変換を自動的に行う代わりに、XmlFmlCnv クラスを使用できます。次のコードは、XML バッファ フォーマットとの間での変換に XmlFmlCnv クラスを使用する例です。


import weblogic.wtc.jatmi.TypedFML32;
import weblogic.wtc.jatmi.FldTbl;
import weblogic.wtc.gwt.XmlFmlCnv;

public class xml2fml
{
public static void main(String[] args) {
String xmlDoc = "<XML><MyString>hello</MyString></XML>";
TypedFML32 fmlBuffer = new TypedFML32(new MyFieldTable());
XmlFmlCnv c = new XmlFmlCnv();
fmlBuffer = c.XMLtoFML32(xmlDoc, fmlBuffer.getFieldTables());
String result = c.FML32toXML(fmlBuffer);
System.out.println(result);
}
}

 


MBSTRING の使い方

TypedMBString オブジェクトは、WTC アプリケーション コードで TypedString オブジェクトとほとんど同じように使用できます。ただ、TypedMBString には文字列データに関連付けられたコードセット エンコーディング名がある点だけが異なります。

この節の内容は以下のとおりです。

MBSTRING データの Tuxedo ドメインへの送信

MBSTRING データを含む Tuxedo メッセージが別の Tuxedo ドメインに送信されるときに、TypedMBStringjava.lang.String クラスの変換関数を使用して Unicode と外部エンコーディングの間の変換を行います。TypedMBString には文字列データに関連付けられたコードセット エンコーディング名があります。

WTC アプリケーション コードでの TypedMBString オブジェクトの作成時には、エンコーディング名は null に設定されます。エンコーディング名が null 値の場合、MBSTRING データをリモート ドメインに送信するときに、Unicode 文字列のバイト配列への変換にはデフォルトのエンコーディング名が使用されます。デフォルトでは、バイト配列文字列に対する Java のデフォルト エンコーディング名がデフォルト エンコーディング名として使用されます。エンコーディングを指定することも、デフォルト エンコーディングをそのまま使用することもできます。次の順序は、TypedMBString に対する優先順位を示しています。

  1. setMBEncoding() メソッドでエンコーディング名を指定する。
  2. weblogic.wtc.jatmi.MBEncoding クラスの setDefaultMBEncoding() メソッドを使用してエンコーディング名を指定する。
  3. WTCResourcesMBeanRemoteMBEncoding 属性を使用してエンコーディング名を指定する。
  4. MBENCODINGPROPERTY システム プロパティ値。
  5. Java のデフォルト エンコーディング名をそのまま使用する。

MBSTRING データの Tuxedo ドメインからの受信

リモート ドメインから MBSTRING データを含む Tuxedo メッセージが受信されると、以下のアクションが発生します。

  1. WTC は、受信したメッセージのコードセット tcm から MBSTRING データのエンコーディングを判別する。
  2. WTC は、TypedMBString オブジェクトを作成する。
  3. TypedMBString オブジェクトは、WTC アプリケーション コードで TypedString オブジェクトとほとんど同じように使用できます。ただし、TypedMBString には文字列データに関連付けられたコードセット エンコーディング名があります。

  4. WTC は、TypedMBString オブジェクトを WTC アプリケーション コードに渡す。アプリケーション コードは、インスタンス メソッド getMBEncoding() を使用して、受信した MBSTRING データのエンコーディングを認識します。

WebLogic Tuxedo Connector での FML の使用

TypedFML32 に FLD_MBSTRING フィールド型が追加されています。この場合、FLD_MBSTRING の関連付けられたオブジェクト型として TypedMBString オブジェクトが TypedFML32 メソッドに渡されます。FLD_MBSTRING フィールドの MBSTRING 変換に使用するエンコーディング名を指定できます。

次の順序は、TypedFML32 に対する優先順位を示しています。

  1. フィールドの TypedMBString オブジェクトの setMBEncoding() メソッドでエンコーディング名を指定する。
  2. TypedFML32 オブジェクトの setMBEncoding() メソッドでエンコーディング名を指定する。
  3. weblogic.wtc.jatmi.MBEncoding クラスの setDefaultMBEncoding() メソッドを使用してエンコーディング名を指定する。
  4. WTCResourcesMBeanRemoteMBEncoding 属性を使用してエンコーディング名を指定する。
  5. MBENCODINGPROPERTY システム プロパティ値。
  6. Java のデフォルト エンコーディング名をそのまま使用する。

注意 : 以下のメソッド Fldtype()Fchg()Fadd()Fget()、および Fdel() は、FLD_MBSTRING の使用時に更新する必要があります。

Tuxedo で必要な Fmbpack32() および Fmbunpack32() などのオンデマンド エンコーディング メソッドや自動変換メソッドは、WebLogic Tuxedo Connector では不要です。

 

フッタのナビゲーションのスキップ  ページの先頭 前 次