目次 前 次 PDF


リファレンス

リファレンス
このトピックには次の項が含まれます:
Oracle Tuxedo JavaサーバーでのFMLの使用
FMLの概要
FMLは、フィールド・バッファと呼ばれる記憶構造を定義および操作するJava言語機能のセットです。各フィールド・バッファには、フィールドに属性および値の組合せが含まれています。各フィールドは次のように構成されます。
属性はフィールドの識別子です。
関連する値はフィールドのデータ内容を示します。
オカレンス番号。
FMLには、2つのタイプがあります。
フィールド長および識別子に16ビット値を使用するFML16。一意のフィールド数が8191、個々のフィールド長が64Kバイト、フィールド・バッファの合計サイズが64Kバイトに制限されています。
フィールド長および識別子に32ビット値を使用するFML32。約3千万のフィールド、約20億バイトのフィールド長およびバッファ長が使用できます。
FMLの使用方法の詳細は、「FMLを使用したTuxedo ATMIアプリケーションのプログラミング」を参照してください。
Oracle WebLogic Tuxedo Connector FML API
FMLアプリケーション・プログラム・インタフェース(API)は、WebLogic ServerクラスのJavadocに含まれているweblogic.wtc.jatmiパッケージにドキュメント化されています。
FMLフィールド表の管理
フィールド表は、Oracle Tuxedoフィールド表に似た方法で生成されます。フィールド表は、2つのシステム間で共通のフィールド名定義、フィールド・タイプ、および識別番号を提供するテキスト・ファイルです。FMLを使用してOracle Tuxedoシステムと相互運用するには、次の手順を実行する必要があります。
1.
Oracle TuxedoシステムからOracle Tuxedo Javaサーバー環境に、フィールド表をコピーします。
例: Oracle Tuxedo配布キットには、bankappという銀行アプリケーション・サンプルが含まれています。このアプリケーションには、次の構造を持つbankfldsというファイルがあります。
# name number type flags comments
ACCOUNT_ID 110 long - -
ACCT_TYPE 112 char - -
ADDRESS 109 string - -
2.
フィールド表定義をJavaソース・ファイルに変換します。weblogic.wtc.jatmiパッケージのmkfldclass/mkfldclass32ユーティリティを使用します。このクラスは、FML/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 */
.
.
.
}
3.
次のコマンドを使用して、作成したbankflds.javaファイルをコンパイルします。
javac bankflds.java
コンパイルすると、bankflds.classファイルとなります。ロード時、Oracle Tuxedo Javaサーバーはクラス・ファイルを使用してFMLフィールドからフィールド・エントリを追加、検索および削除します。
4.
Tuxedo Javaサーバーの構成ファイルの<Resources>セクションに、フィールド表クラスを追加します(Tuxedo Javaサーバーの構成ファイルの<ClassPath>にも含めます)。
例:
<Resources>
<FieldTable16Classes>bankflds</FieldTable16Classes>
</Resources>
5.
フィールド表のクラス定義をロードするために、Tuxedo Javaサーバーを再起動します。
mkfldclass32クラスに対するDynRdHdrプロパティの使用
以下の場合には、DynRdHdrユーティリティを使用する必要があります。
非常に大きなFML表を使用しているので、mkfldclass32クラスで作成された.javaメソッドが、単一のクラスまたはインタフェースの全体的な複雑度に関する内部Java仮想マシンの制限を超えます。
非常に大きなFML表を使用しているので、.javaメソッドをコンパイルして作成されたクラスをロードできません。
FML表をコンパイルする場合には、次の手順でDynRdHdrプロパティを使用します。
1.
フィールド表定義をJavaソース・ファイルに変換します。
2.
java -DDynRdHdr=Path_to_Your_FML_Table
weblogic.wtc.jatmi.mkfldclass32 userTable
このコマンドの引数の定義は次のとおりです。
 
表4-1 DynRdHdrプロパティを使用するコマンドの引数
属性
説明
-DDynRdHdr
FML表をコンパイルするためのOracle WebLogic Tuxedo Connectorプロパティ。
Path_to_Your_FML_Table
FML表のパス名。サーバーのCLASSPATHでリソース・ファイルとして検索可能な完全修飾パスまたは相対パスを指定します。
weblogic.wtc.jatmi.mkfldclass32
このクラスは、FML32フィールド表を読み取るユーティリティ機能で、FldTblインタフェースを実装するJavaファイルを生成する。
userTable
mkfldclass32クラスによって作成される.javaメソッドの名前。
3.
次のコマンドを使用して、userTableファイルをコンパイルします。
javac userTable.java
4.
Tuxedo Javaサーバーの構成ファイルの<Resources>セクションに、フィールド表クラスを追加します(Tuxedo Javaサーバーの構成ファイルの<ClassPath>にも含めます)。
例:
<Resources>
<FieldTable32Classes>userTable</FieldTable32Classes>
</Resources>
5.
フィールド表のクラス定義をロードするために、Tuxedo Javaサーバーを再起動します。
userTable.classファイルの作成後は、userTable.classを手動で更新しなくてもFML表を変更してその変更をデプロイできます。Javaサーバーは起動時に、更新されたFML表をロードします。
Path_to_Your_FML_Table属性を変更した場合、前の手順に従ってuserTable.javaおよびuserTable.classファイルを更新する必要があります。
TypedFML32でパフォーマンスの向上を実現する
2つの新しいTypedFML32コンストラクタを使用すると、パフォーマンスが向上します。これらのコンストラクタの使用については、以下を参照してください。
コンストラクタは、WebLogic ServerクラスのJavadocに定義されます。
TypedFML32でパフォーマンスの向上を実現するためには、TypedFML32コンストラクタにサイズ・ヒントを指定します。これらのコンストラクタで利用できるパラメータは、以下の2つです。
フィールドの最大数のヒントを指定するパラメータ。すべての発生数を指定します。
バッファで使用されるフィールドIDの総数を指定するパラメータ。
たとえば、バッファで使用されるフィールド表に20個のフィールドIDを格納し、各フィールドを20回発生させることができます。この場合、最初のパラメータにフィールドの最大数400を指定する必要があります。2番目のパラメータにフィールドIDの総数20を指定する必要があります。
TypeFML32 mybuffer = new TypeFML32(400, 20);
注意:
通常、バッファのサイズに制限はありませんが、非常に小さいサイズでは、うまく機能しません。
非常に小さいバッファを使用する場合は、これらのコンストラクタをヒントなしで使用します。非常に小さいバッファとは、たとえば、フィールドの総発生回数が16より小さいバッファを指します。たとえば、フィールドの総発生回数が250000を超える非常に大きいバッファの場合は、アプリケーションでフィールドの総発生回数250000より小さいバッファに分割することを検討する必要があります。
Oracle Tuxedo JavaサーバーでのVIEWの使用
VIEWバッファの概要
Oracle Tuxedo Javaサーバーを使用すると、非依存型C構造体から派生したOracle Tuxedo VIEWバッファ・タイプと同様のJava VIEWバッファを使用できます。これにより、Oracle Tuxedo Javaサーバー・クラスおよびOracle Tuxedoアプリケーションが共通の構造体を使用して情報を受け渡しできます。
Oracle Tuxedo VIEWバッファの詳細は、C言語を使用したTuxedo ATMIアプリケーションのプログラミングのVIEW型バッファの使用に関する項を参照してください。
VIEW記述ファイルの作成方法
Oracle Tuxedo Javaサーバー・クラスとOracle Tuxedoアプリケーションは、VIEW記述で定義された同一の情報構造を共有する必要があります。VIEW記述ファイルの各構造体には次の形式を使用します。
$ /* VIEW structure */
VIEW viewname
type cname fbname count flag size null
説明
ファイル名はVIEW名と同一です。
ファイルごとに1つのVIEWしか持てません。
viewjコンパイラとOracle Tuxedo viewcコンパイラの両方で同一のVIEW記述ファイルが使用される。
viewnameは情報構造の名前です。
行頭に#または$文字を付けてコメント行を挿入できます。
各構造体用のVIEW記述ファイルに指定する必要があるフィールドを、次の表で説明します。
 
表4-2 VIEW記述ファイルのフィールド
フィールド
説明
type
フィールドのデータ型。設定できる型は、shortlongfloatdoublecharstringcarrayまたはdec_t(パック10進数)。
cname
情報構造内でのフィールド名。
fbname
無視されます。
count
フィールドの出現回数。
flag
次のいずれかのオプション・フラグを指定します。
N - ゼロ方向マッピング
C - 連想カウント・メンバー(ACM)に追加フィールドを生成
L - STRINGおよびCARRAYに転送されるバイト数を保持
size
STRINGまたはCARRAY型レコードの最大長を指定します。それ以外のバッファ・タイプでは、このフィールドは無視されます。
null
ユーザー指定のNULL値、またはマイナス記号(-)の場合にはフィールドのデフォルト値を示します。VIEW型バッファで使用されるNULL値は空のC構造体メンバーを示します。
数値型の場合、デフォルトのNULL値は0 (dec_tの場合は0.0)になります。文字型の場合、デフォルトのNULL値は\0になります。STRING型とCARRAY型の場合、デフォルトのNULL値は" "になります。
エスケープ文字として使用されている定数も、NULL値の指定に使用できます。VIEWコンパイラが認識するエスケープ定数は次のとおりです。\ddd (dは8進数)、\0\n\t\v\r\f\\\'および\"
STRINGCARRAYおよびchar型のNULL値を、二重引用符または単一引用符で囲んでもかまいません。ユーザー指定のNULL値内のエスケープされていない引用符は、VIEWコンパイラでは受け付けられません。
VIEWメンバー記述のNULLフィールドでキーワード「NONE」を指定することもできます。この指定は、そのメンバーにはNULL値がないことを意味します。文字列および文字配列メンバーの最大サイズのデフォルト値は2660文字です。
サンプルVIEW記述ファイル
次に、Oracle Tuxedoアプリケーションと情報を送受信するためにVIEWバッファを使用するサンプルVIEW記述を示します。このVIEWのファイル名はinfoencです。
リスト4-1 サンプルVIEW記述
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コンパイラには無視されます。これらのフィールドには、プレースホルダーとしてダッシュ(-)などの値を挿入する必要があります。
viewjコンパイラの使用方法
VIEW型バッファをコンパイルするには、引数としてパッケージ名とVIEW記述ファイルの名前を指定して、viewjコマンドを実行します。出力ファイルはカレント・ディレクトリに作成されます。
viewjコンパイラを使用するには、次のコマンドを入力します。
java weblogic.wtc.jatmi.viewj [options] [package] viewfile
viewj32コンパイラを使用するには、次のコマンドを入力します。
java weblogic.wtc.jatmi.viewj32 [options] [package] viewfile
このコマンドの引数の定義は次のとおりです。
 
表4-3 viewjコンパイラ・コマンドの引数
引数
説明
options
-associated_fields:
AssociatedFieldHandlingをtrueに設定する。これにより、VIEW記述ファイルで関連する長さと数のフィールドが指定されている場合は、その値をsetおよびgetアクセサ・メソッドで使用できます。指定しない場合、AssociatedFieldHandlingのデフォルト値はfalseです。
-bean_names:
JavaBeansの命名規則に従って、setおよびgetアクセサ名を作成します。フィールド名の最初の文字は、setまたはget接頭辞を付加する前に大文字に変更されます。配列フィールドに対する索引の付いたsetアクセサのシグネチャは、デフォルト・シグネチャのvoid setAfield (T value, int index)からvoid setAfield (int index, T value)に変更されます。
-compat_names:
VIEW記述ファイルからフィールド名を取得してsetまたはget接頭辞を追加する方法で、setおよびgetアクセサ名を作成します。WebLogic Server 8.1 SP2より前のリリースとの互換性があります。-bean_namesまたは-compat_namesを指定しない場合、デフォルト値は -compat_namesになります。
-modify_strings:
Oracle Tuxedoに送信する文字列のエンコードとOracle Tuxedoから受信する文字列のデコードに対して異なるJavaコードを生成する。エンコードのコードでは、各文字列の最後にnull文字を追加します。デコードのコードでは、最初のnull文字を受け取った箇所で各文字列を切り詰めます。
-xcommon:
TypedViewのかわりに、TypedViewを拡張したTypedXCommonとして出力クラスを生成するために使用します。
-xtype:
TypedViewのかわりに、TypedViewを拡張したTypedXCTypeとして出力クラスを生成するために使用します。
注意:
-compat_names-bean_namesは相互に排他的なオプション。
package
.javaソース・ファイルに含まれるパッケージ名。
例: examples.wtc.atmi.simpview
viewfile
VIEW記述ファイルの名前。
例: Infoenc
例:
VIEWバッファは次のようにしてコンパイルします。
java weblogic.wtc.jatmi.viewj -compat_names examples.javaserver.atmi.simpview infoenc
VIEW32バッファは次のようにしてコンパイルします。
java weblogic.wtc.jatmi.viewj32 -compat_names -modify_strings
examples.javaserver.atmi.simpview infoenc
VIEWバッファとの情報の受け渡し方法
viewjおよびviewj32コマンドの出力は、VIEW記述ファイルの各フィールドに対するsetおよびgetアクセサ・メソッドが含まれた.javaソース・ファイルになります。VIEWバッファとの間で情報を受け渡すには、Javaアプリケーションでこれらのsetおよびgetアクセサ・メソッドを使用します。
VIEW記述ファイルで関連する長さと数のフィールドが指定されている場合、その値をsetおよびgetメソッドで使用するかどうかを指定するには、AssociatedFieldHandlingフラグを使用します。setメソッドは配列フィールドでは数を、stringまたはcarrayフィールドでは長さを設定します。
配列に対するgetメソッドは、関連する数のフィールド以下のサイズを持つ配列を返します。
文字列とcarrayに対するgetメソッドは、関連する長さのフィールド以下の長さを持つデータを返します。
AssociatedFieldHandlingフラグの状態を設定または取得するには、次のいずれかの方法を使用します。
viewjおよびviewj32コンパイラの-associated_fieldsオプションを使用して、AssociatedFieldHandlingフラグをtrueに設定します。
Javaアプリケーションでvoid setAssociatedFieldHandling (boolean state)メソッドを呼び出して、AssociatedFieldHandlingフラグの状態を設定します。
falseの場合、setおよびgetメソッドは長さと数のフィールドを無視します。
trueの場合、VIEW記述ファイルで関連する長さと数のフィールドが指定されている場合は、その値をsetおよびgetメソッドで使用します。
デフォルトの状態はfalseです。
Javaアプリケーションでboolean getAssociatedFieldHandling()メソッドを呼び出して、AssociatedFieldHandlingの現在の状態を返します。
JATMIアプリケーションでのVIEWバッファの使用方法
JATMIアプリケーションにVIEWバッファを取り込む際には、次の手順に従います。
1.
前述のとおり、アプリケーションのVIEW記述ファイルを作成します。
2.
前述のとおり、VIEW記述ファイルをコンパイルします。
3.
前述のとおり、setおよびgetアクセサ・メソッドを使用して、VIEWバッファに情報を渡したり、VIEWバッファから情報を受け取ったりします。
4.
VIEWコンパイラの出力クラスをソース・コードにインポートします。
5.
必要な場合は、C言語を使用したTuxedo ATMIアプリケーションのプログラミングのVIEW型バッファの使用に関する項で説明されているとおりに、Oracle Tuxedoアプリケーション用のVIEW記述ファイルをコンパイルし、その出力をCソース・ファイルにインクルードします。
6.
コンパイル済Java VIEW記述ファイルの完全修飾クラス名を、Tuxedo Javaサーバー構成の<Resources>セクションに構成します。コンパイル済Java VIEW記述ファイルのクラスは、構成ファイル内の<ClassPath>にも含めてください。
例: (VIEW32の場合)
<Resources>
<ViewFile32Classes> examples.javaserver.atmi.simpview</ViewFile32Classes>
</Resources>
7.
Oracle Tuxedo Javaサーバーを起動します。
FML32バッファに対してVIEW32データを追加および取得する方法
ヘルパー・クラスを使用して、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();
リスト4-2 例: TypedFML32バッファに対して埋込みTypedView32バッファを追加および取得する方法
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)の例です。
リスト4-3 サンプルFML記述
*base 20000
#name number type flags comments
FLD0 10 string - -
FLD1 20 long - -
FLD2 30 float - -
myview 50 view32 - defined in View description file
 
関連項目
TMJAVASVR(5)
Oracle Tuxedo Javaサーバーの管理
Oracle Tuxedo Javaサーバーの構成
付録: Javaサーバー構成ファイルのスキーマ
Javaを使用したOracle Tuxedoアプリケーションのプログラミング
 

Copyright ©1994, 2017,Oracle and/or its affiliates. All rights reserved