WebLogic Tuxedo Connector プログラマーズ ガイド
![]() |
![]() |
![]() |
![]() |
以下の節では、フィールド操作言語 (FML) の概要と WebLogic Tuxedo Connector が FML を使用する方法について説明します。
注意 : FML の使い方の詳細については、「FML プログラミング入門」を参照してください。
FML は、フィールド バッファと呼ばれる記憶構造を定義および操作する Java 言語機能のセットです。各フィールド バッファには、フィールドに属性および値の組み合わせが含まれています。各フィールドは次のように構成されます。
注意 : WebLogic Tuxedo Connector は、FML 機能のサブセットを実装しています。FML32 の詳細については、「FML32 の考慮事項」を参照してください。
FML アプリケーション プログラム インタフェース (API) は、WebLogic クラスの Javadoc に含まれている weblogic.wtc.jatmi
パッケージにドキュメント化されています。
フィールド テーブルは、Tuxedo フィールド テーブルに似た方法で生成されます。フィールド テーブルは、2 つのシステム間で共通のフィールド名定義、フィールド タイプ、および識別番号を提供するテキスト ファイルです。FML を使用して Tuxedo システムと相互運用するには、次の手順を実行する必要があります。
#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 - -
.
.
.
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 */
.
.
.
javac bankflds.java
コンパイルすると、bankflds.class
ファイルとなります。ロード時、WebLogic Tuxedo Connector はクラス ファイルを使用して FML32 フィールドからフィールド エントリを追加、検索、および削除します。
WebLogic Tuxedo Connector には、FML テーブルを別の方法でコンパイルするためのプロパティが提供されています。以下の場合には、DynRdHdr
ユーティリティを使用する必要があります。
.java
メソッドが、単一のクラスまたはインタフェースの全体的な複雑度に関する内部 Java 仮想マシンの制限を越える。 .java
メソッドをコンパイルして作成されたクラスをロードできない。FML テーブルをコンパイルする場合には、次の手順で DynRdHdr
プロパティを使用します。
userTable.class
ファイルの作成後は、userTable.class
を手動で更新しなくても FML テーブルを変更してその変更をデプロイすることができます。WTC サービスの開始時に、WebLogic Tuxedo Connector は、WTC サービス コンフィグレーションの [リソース] タブで指定された場所を使用して更新済みの FML テーブルをロードします。Path_to_Your_FML_Table 属性を変更した場合、前の手順に従って userTable.java
および userTable.class
ファイルを更新する必要があります。
注意 : 指定するデータ型は、FLAT または NO にする必要があります。他のデータ型を指定すると、リダイレクションは失敗します。
WTCtBridgeRedirect MBean の TranslateFML
要素は、FML32 変換がメッセージ ペイロードで実行されることを示すために使用します。FML32 変換には、FLAT および NO の 2 つのタイプがあります。
メッセージ ペイロードは、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
<FML32>
<NAME>JOE</NAME>
<ADDRESS>CENTRAL CITY</ADDRESS>
<PRODUCTNAME>BOLT</PRODUCTNAME>
<PRODUCTNAME>SCREW</PRODUCTNAME>
<PRICE>1.95</PRICE>
<PRICE>2.50</PRICE>
</FML32>
変換は使用されません。tBridge は、リダイレクションの方向に応じて、JMS TextMessage を Tuxedo TypedBuffer (TypedString) に (またはその逆に) マップします。JMS BytesMessage は、Tuxedo TypedBuffer (TypedCarray) に (またはその逆に) マップされます。
FML32 を使用する場合は、以下の情報について考慮する必要があります。
STRING
値を無視します。たとえば、<STRING></STRING>
は、結果的に FML32 バッファではスキップされます。他のすべての型の場合、WTC では変換エラーとなるエラーがログに記録されます。
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);
}
}
TypedMBString
オブジェクトは、WTC アプリケーション コードで TypedString
オブジェクトとほとんど同じように使用できます。ただ、TypedMBString
には文字列データに関連付けられたコードセット エンコーディング名がある点だけが異なります。
MBSTRING データを含む Tuxedo メッセージが別の Tuxedo ドメインに送信されるときに、TypedMBString
は java.lang.String
クラスの変換関数を使用して Unicode と外部エンコーディングの間の変換を行います。TypedMBString
には文字列データに関連付けられたコードセット エンコーディング名があります。
WTC アプリケーション コードでの TypedMBString
オブジェクトの作成時には、エンコーディング名は null に設定されます。エンコーディング名が null 値の場合、MBSTRING データをリモート ドメインに送信するときに、Unicode 文字列のバイト配列への変換にはデフォルトのエンコーディング名が使用されます。デフォルトでは、バイト配列文字列に対する Java のデフォルト エンコーディング名がデフォルト エンコーディング名として使用されます。エンコーディングを指定することも、デフォルト エンコーディングをそのまま使用することもできます。次の順序は、TypedMBString
に対する優先順位を示しています。
リモート ドメインから MBSTRING データを含む Tuxedo メッセージが受信されると、以下のアクションが発生します。
TypedFML32
に FLD_MBSTRING フィールド型が追加されています。この場合、FLD_MBSTRING の関連付けられたオブジェクト型として TypedMBString
オブジェクトが TypedFML32
メソッドに渡されます。FLD_MBSTRING フィールドの MBSTRING 変換に使用するエンコーディング名を指定できます。
次の順序は、TypedFML32 に対する優先順位を示しています。
注意 : 以下のメソッド Fldtype()
、Fchg()
、Fadd()
、Fget()
、および Fdel()
は、FLD_MBSTRING の使用時に更新する必要があります。
Tuxedo で必要な Fmbpack32()
および Fmbunpack32()
などのオンデマンド エンコーディング メソッドや自動変換メソッドは、WebLogic Tuxedo Connector では不要です。
![]() ![]() |
![]() |
![]() |