![]() |
![]() |
|
|
| |
WebLogic Tuxedo Connector での FML の使用
この章では、フィールド操作言語(FML)および WebLogic Tuxedo Connector が FML を使用する方法について説明します。
FML の概要
注意: FML の使い方の詳細については、『Programming a Application Using FML』を参照してください。
FML は、フィールド バッファと呼ばれる記憶構造を定義および操作する Java 言語機能のセットです。各フィールド バッファには、フィールドに属性および値の組み合わせが含まれています。各フィールドは次のように構成されます。
2 種類の FML があります。
WebLogic Tuxedo Connector FML API
注意: WebLogic Tuxedo Connector は、FML 機能のサブセットを実装しています。たとえば、views
はサポートされていません。
FML アプリケーション プログラム インタフェース(API)は、WebLogic Server クラスの Javadoc に含まれている weblogic.wtc.jatmi
パッケージにドキュメント化されています。
FML フィールド テーブルの管理
フィールド テーブルは、Tuxedo フィールド テーブルに似た方法で生成されます。フィールド テーブルは、2 つのシステム間で共通のフィールド名定義、フィールド タイプ、および識別番号を提供するテキスト ファイルです。FML を使用して Tuxedo システムと相互運用するには、次の手順を実行する必要があります。
例 : 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 - -
.
.
.
weblogic.wtc.jatmi
パッケージの mkfldclass
ユーティリティを使用します。このクラスは、FML32 フィールド テーブルを読み取るユーティリティ機能で、FldTbl インタフェースを実装する Java ファイルを生成します。このユーティリティには、次のような 2 つのインスタンスがあります。
mkfldclass
mkfldclass32
コマンドの正しいインスタンスを使用して、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 */
.
.
.
bankflds
.java
ファイルをコンパイルします。
javac bankflds.java
コンパイルすると、
bankflds
.class
ファイルとなります。ロード時、WebLogic Tuxedo Connector はクラス ファイルを使用して FML32 フィールドからフィールド エントリを追加、検索、および削除します。
<FldTblClass>
行を入力できます。
例 :
<T_DM_RESOURCES>
<FieldTables>
<FldTblClass Type="fml32">com.bea.mystuff.bankflds
</FldTblClass>
</FieldTables>
</T_DM_RESOURCES>
mkfldclass32 クラスに対する DynRdHdr プロパティの使い方
WebLogic Tuxedo Connector には、FML テーブルをコンパイルするための代替手段を提供するプロパティが用意されています。以下の場合に、DynRdHdr
ユーティリティの使用が必要になる場合があります。
mkfldclass32
クラスによって作成される .java
メソッドが、単一のクラスまたはインタフェースの全体的な複雑さに対する Java 仮想マシンの内部的な限界を超える場合。
.java
メソッドのコンパイル時に作成されるクラスをロードできない場合。
DynRdHdr
プロパティを使って FML テーブルをコンパイルするときは、以下の手順で行います。
java -DDynRdHdr=Path_to_Your_FML_Table weblogic.wtc.jatmi.mkfldclass32
userTable
このコマンドの引数は、次の表に示すとおりです。
userTable
ファイルをコンパイルします。
javac
userTable
.java
userTable
.class
ファイルを追加します。
T_DM_RESOURCES
セクションを変更し、userTable
.class
ファイルの完全修飾された場所を指定します。
T_DM_RESOURCES
セクションで指定されている場所を使って、FML テーブルをロードします。
いったん userTable
.class
ファイルを作成した後は、FML テーブルを変更してデプロイする際に、userTable
.class
を手作業で更新する必要はありません。サーバは、起動時に、WebLogic Tuxedo Connector の XML コンフィグレーション ファイルの T_DM_RESOURCES
で指定されている場所を使って、更新された FML テーブルをロードします。ただし、Path_to_Your_FML_Table 属性を変更する場合は、前記の手順を使って、userTable
.java
ファイルと userTable
.class
ファイルを更新する必要があります。
tBridge XML/FML32 変換
注意: 指定するデータ型は、FLAT または NO にする必要があります。他のデータ型を指定すると、リダイレクションは失敗します。
<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 を使用する場合は、以下の情報について考慮する必要があります。
<STRING></STRING>
は、結果的に FML32 バッファではスキップされます。
![]() |
![]() |
![]() |