FMLは、フィールド・バッファと呼ばれる記憶構造を定義および操作するJava言語機能のセットです。各フィールド・バッファには、フィールドに属性および値の組合せが含まれています。各フィールドは次のように構成されます。
FMLの使用方法の詳細は、FMLを使用したTuxedo ATMIアプリケーションのプログラミングを参照してください。
FMLアプリケーション・プログラム・インタフェース(API)は、WebLogic ServerクラスのJavadocに含まれている weblogic.wtc.jatmiパッケージにドキュメント化されています。
フィールド表は、Oracle Tuxedoフィールド表に似た方法で生成されます。フィールド表は、2つのシステム間で共通のフィールド名定義、フィールド・タイプ、および識別番号を提供するテキスト・ファイルです。FMLを使用してOracle Tuxedoシステムと相互運用するには、次の手順を実行する必要があります。
例: Oracle Tuxedo配布キットには、bankappという銀行アプリケーション・サンプルが含まれています。このアプリケーションには、次の構造を持つbankfldsというファイルがあります。
# name number type flags comments
コマンドの正しいインスタンスを使用して、bankfldsフィールド表をFML32 Javaソースに変換します。次は、mkfldclassを使用した例です。
java weblogic.wtc.jatmi.mkfldclass bankflds
作成されたファイルはbankflds.java
となり、次のような構造を持ちます。
implements weblogic.wtc.jatmi.FldTbl
public final static int ACCOUNT_ID = 33554542;
public final static int ACCT_TYPE = 67108976;
/** number: 109 type: string */
public final static int ADDRESS = 167772269;
コンパイルすると、bankflds.class
ファイルとなります。ロード時、Oracle Tuxedo Javaサーバーはクラス・ファイルを使用してFMLフィールドからフィールド・エントリを追加、検索および削除します。
<FieldTable16Classes>bankflds</FieldTable16Classes>
以下の場合には、DynRdHdrユーティリティを使用する必要があります。
FML表をコンパイルする場合には、次の手順でDynRdHdrプロパティを使用します。
userTable.class
ファイルの作成後は、userTable.class
を手動で更新しなくてもFML表を変更してその変更をデプロイできます。Javaサーバーは起動時に、更新されたFML表をロードします。
Path_to_Your_FML_Table
属性を変更した場合、前の手順に従ってuserTable.java
およびuserTable.class
ファイルを更新する必要があります。
2つの新しいTypedFML32コンストラクタを使用すると、パフォーマンスが向上します。これらのコンストラクタの使用については、以下を参照してください。
コンストラクタは、WebLogic ServerクラスのJavadocに定義されます。
TypedFML32でパフォーマンスの向上を実現するためには、TypedFML32コンストラクタにサイズ・ヒントを指定します。これらのコンストラクタで利用できるパラメータは、以下の2つです。
たとえば、バッファで使用されるフィールド表に20個のフィールドIDを格納し、各フィールドを20回発生させることができます。この場合、最初のパラメータにフィールドの最大数400を指定する必要があります。2番目のパラメータにフィールドIDの総数20を指定する必要があります。
TypeFML32 mybuffer = new TypeFML32(400, 20);
注: | 通常、バッファのサイズに制限はありませんが、非常に小さいサイズでは、うまく機能しません。 |
注: | 非常に小さいバッファを使用する場合は、これらのコンストラクタをヒントなしで使用します。非常に小さいバッファとは、たとえば、フィールドの総発生回数が16より小さいバッファを指します。たとえば、フィールドの総発生回数が250000を超える非常に大きいバッファの場合は、アプリケーションでフィールドの総発生回数250000より小さいバッファに分割することを検討する必要があります。 |
Oracle Tuxedo Javaサーバーを使用すると、非依存型C構造体から派生したOracle Tuxedo VIEW
バッファ・タイプと同様のJava VIEW
バッファを使用できます。これにより、Oracle Tuxedo Javaサーバー・クラスおよびOracle Tuxedoアプリケーションが共通の構造体を使用して情報を受け渡しできます。
Oracle Tuxedo VIEW
バッファの詳細は、C言語を使用したTuxedo ATMIアプリケーションのプログラミングのVIEW型バッファの使用に関する項を参照してください。
Oracle Tuxedo Javaサーバー・クラスとOracle Tuxedoアプリケーションは、VIEW
記述で定義された同一の情報構造を共有する必要があります。VIEW
記述ファイルの各構造体には次の形式を使用します。
type cname fbname count flag size null
VIEW
名と同一です。VIEW
しか持てません。VIEW
記述ファイルが使用される。#
または$
文字を付けてコメント行を挿入できます。VIEW
記述ファイルに指定する必要があるフィールドを、次の表で説明します。 次に、Oracle Tuxedoアプリケーションと情報を送受信するためにVIEW
バッファを使用するサンプルVIEW
記述を示します。このVIEW
のファイル名はinfoenc
です。
VIEW infoenc
#type cname fbname count flag size null
float amount AMOUNT 2 - - 0.0
short status STATUS 2 - - 0
int term TERM 2 - - 0
char mychar MYCHAR 2 - - -
string name NAME 1 - 16 -
carray carray1 CARRAY1 1 - 10 -
dec_t decimal DECIMAL 1 - 9 - #size ignored by viewj/viewj32
END
注: | fbname フィールドとnull フィールドは、非依存型Java構造体やC構造体とは関係がなく、JavaやCのVIEW コンパイラには無視されます。これらのフィールドには、プレースホルダーとしてダッシュ(-)などの値を挿入する必要があります。 |
VIEW
型バッファをコンパイルするには、引数としてパッケージ名とVIEW
記述ファイルの名前を指定して、viewjコマンドを実行します。出力ファイルはカレント・ディレクトリに作成されます。
viewj
コンパイラを使用するには、次のコマンドを入力します。
java weblogic.wtc.jatmi.viewj [options] [package] viewfile
viewj32
コンパイラを使用するには、次のコマンドを入力します。
java weblogic.wtc.jatmi.viewj32 [options] [package] viewfile
java weblogic.wtc.jatmi.viewj -compat_names examples.javaserver.atmi.simpview infoenc
java weblogic.wtc.jatmi.viewj32 -compat_names -modify_strings
examples.javaserver.atmi.simpview infoenc
viewj
およびviewj32
コマンドの出力は、VIEW
記述ファイルの各フィールドに対するsetおよびgetアクセサ・メソッドが含まれた.javaソース・ファイルになります。VIEW
バッファとの間で情報を受け渡すには、Javaアプリケーションでこれらのsetおよびgetアクセサ・メソッドを使用します。
VIEW
記述ファイルで関連する長さと数のフィールドが指定されている場合、その値をsetおよびgetメソッドで使用するかどうかを指定するには、AssociatedFieldHandling
フラグを使用します。setメソッドは配列フィールドでは数を、stringまたはcarrayフィールドでは長さを設定します。
AssociatedFieldHandling
フラグの状態を設定または取得するには、次のいずれかの方法を使用します。
JATMI
アプリケーションにVIEW
バッファを取り込む際には、次の手順に従います。
VIEW
記述ファイルを作成します。VIEW
記述ファイルをコンパイルします。VIEW
バッファに情報を渡したり、VIEWバッファから情報を受け取ったりします。VIEW
コンパイラの出力クラスをソース・コードにインポートします。VIEW
記述ファイルをコンパイルし、その出力をCソース・ファイルにインクルードします。VIEW
記述ファイルの完全修飾クラス名を、Tuxedo Javaサーバー構成の<Resources>セクションに構成します。コンパイル済Java VIEW
記述ファイルのクラスは、構成ファイル内の<ClassPath>にも含めてください。 <ViewFile32Classes>
examples.javaserver.atmi.simpview</ViewFile32Classes>
ヘルパー・クラスを使用して、FML32バッファに対してVIEW32
データを追加および取得できます。クラス名はwtc.jatmi.FViewFld
です。このクラスを使用することで、プログラマはFML32バッファに対してVIEW32
フィールド・タイプを使用するJATMIベースのアプリケーションを簡単に開発できます。
構成の変更は不要です。引き続き、Tuxedo Javaサーバー構成ファイルの<Resources>セクションにあるViewFile32Classes
属性を使用して、VIEW32
クラスを構成します。
このヘルパー・クラスでは、以下のアクセス・メソッドを使用できます。
FViewFld (String vname, TypedView32 vdata);
FviewFld (FviewFld to_b_clone);
void setViewName (String vname)
String getViewName();
void setViewData (TypedView32 vdata)
void TypedView32 getViewData();
String toConvert = new String("hello world");
TypedFML32 MyData = new TypedFML32(new MyFieldTable());
Long d1 = new Long(1234);
Float d2 = new Float(12.32);
MyView data = new myView();
FviewFld vfld;
data.setamount((float)100.96);
data.setstatus((short)3);
vfld = new FviewFld("myView", data);
try {
myData.Fchg(MyFieldTable.FLD0, 0, toConvert);
myData.Fchg(MyFieldTable.FLD1, 0, 1234);
myData.Fchg(MyFieldTable.FLD2, 0, d2);
myData.Fchg(MyFieldTable.myview, 0, vfld);
} catch (Ferror fe) {
log("An error occurred putting data into the FML32 buffer. The error is " + fe);
}
try {
myRtn = myTux.tpcall("FMLVIEW", myData, 0);
} catch(TPReplyException tre) {
...
}
TypedFML32 myDataBack = (TypedFML32)myRtn.getReplyBuffer();
Integer myNewLong;
Float myNewFloat;
myView View;
String myNewString;
try {
myNewString = (String)myDataBack.Fget(MyFieldTable.FLD0, 0);
myNewLong = (Integer)myDataBack.Fget(MyFieldTable.FLD1, 0);
myNewFloat = (Float)myDataBack.Fget(MyFieldTable.FLD2, 0);
vfld = (FviewFld)myDataBack.Fget(MyFieldTable.myview, 0);
view = (myView)vfld.getViewData();
} catch (Ferror fe) {
...
}
次のコード・リストは、リスト4-2のサンプルに関連するFML記述(MyFieldTable)の例です。
*base 20000
#name number type flags comments
FLD0 10 string - -
FLD1 20 long - -
FLD2 30 float - -
myview 50 view32 - defined in View description file