|
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
|