Javaを使用したOracle Tuxedoアプリケーションのプログラミング

     前  次    新規ウィンドウで目次を開く    PDFとして表示 - 新規ウィンドウ  Adobe Readerを入手 - 新規ウィンドウ
コンテンツはここから始まります

リファレンス

このトピックには次の項が含まれます:

 


Oracle Tuxedo JavaサーバーでのFMLの使用

FMLの概要

FMLは、フィールド・バッファと呼ばれる記憶構造を定義および操作するJava言語機能のセットです。各フィールド・バッファには、フィールドに属性および値の組合せが含まれています。各フィールドは次のように構成されます。

FMLには、2つのタイプがあります。

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サーバー環境に、フィールド表をコピーします。
  2. 例: Oracle Tuxedo配布キットには、bankappという銀行アプリケーション・サンプルが含まれています。このアプリケーションには、次の構造を持つbankfldsというファイルがあります。

    # name number type flags comments

    ACCOUNT_ID 110 long - -

    ACCT_TYPE 112 char - -

    ADDRESS 109 string - -

  3. フィールド表定義を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 */

      .

      .

      .

      }

  4. 次のコマンドを使用して、作成したbankflds.javaファイルをコンパイルします。
  5. javac bankflds.java

    コンパイルすると、bankflds.classファイルとなります。ロード時、Oracle Tuxedo Javaサーバーはクラス・ファイルを使用してFMLフィールドからフィールド・エントリを追加、検索および削除します。

  6. Tuxedo Javaサーバーの構成ファイルの<Resources>セクションに、フィールド表クラスを追加します(Tuxedo Javaサーバーの構成ファイルの<ClassPath>にも含めます)。
  7. 例:

    <Resources>

    <FieldTable16Classes>bankflds</FieldTable16Classes>

    </Resources>

  8. フィールド表のクラス定義をロードするために、Tuxedo Javaサーバーを再起動します。

mkfldclass32クラスに対するDynRdHdrプロパティの使用

以下の場合には、DynRdHdrユーティリティを使用する必要があります。

FML表をコンパイルする場合には、次の手順でDynRdHdrプロパティを使用します。

  1. フィールド表定義をJavaソース・ファイルに変換します。
  2. java -DDynRdHdr=Path_to_Your_FML_Table
  3. 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メソッドの名前。

  1. 次のコマンドを使用して、userTableファイルをコンパイルします。
  2. javac userTable.java

  3. Tuxedo Javaサーバーの構成ファイルの<Resources>セクションに、フィールド表クラスを追加します(Tuxedo Javaサーバーの構成ファイルの<ClassPath>にも含めます)。
  4. 例:

    <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つです。

たとえば、バッファで使用されるフィールド表に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記述ファイル

次に、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

例:

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

VIEWバッファとの情報の受け渡し方法

viewjおよびviewj32コマンドの出力は、VIEW記述ファイルの各フィールドに対するsetおよびgetアクセサ・メソッドが含まれた.javaソース・ファイルになります。VIEWバッファとの間で情報を受け渡すには、Javaアプリケーションでこれらのsetおよびgetアクセサ・メソッドを使用します。

VIEW記述ファイルで関連する長さと数のフィールドが指定されている場合、その値をsetおよびgetメソッドで使用するかどうかを指定するには、AssociatedFieldHandlingフラグを使用します。setメソッドは配列フィールドでは数を、stringまたはcarrayフィールドでは長さを設定します。

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>にも含めてください。
  7. 例: (VIEW32の場合)

    <Resources>

    <ViewFile32Classes> examples.javaserver.atmi.simpview</ViewFile32Classes>

    </Resources>

  8. Oracle Tuxedo Javaサーバーを起動します。

FML32バッファに対してVIEW32データを追加および取得する方法

ヘルパー・クラスを使用して、FML32バッファに対してVIEW32データを追加および取得できます。クラス名はwtc.jatmi.FViewFldです。このクラスを使用することで、プログラマはFML32バッファに対してVIEW32フィールド・タイプを使用するJATMIベースのアプリケーションを簡単に開発できます。

構成の変更は不要です。引き続き、Tuxedo Javaサーバー構成ファイルの<Resources>セクションにあるViewFile32Classes属性を使用して、VIEW32クラスを構成します。

このヘルパー・クラスでは、以下のアクセス・メソッドを使用できます。

次のコード・リストは、リスト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

  先頭に戻る       前  次