プライマリ・コンテンツに移動
Oracle® Fusion Middleware Oracle WebLogic Server Oracle WebLogic Tuxedo Connectorアプリケーションの開発
12c (12.2.1.3.0)
E90367-01
目次へ移動
目次

前
次

8 Oracle WebLogic Tuxedo Connector JATMI VIEW

この章では、Oracle WebLogic Tuxedo Connector VIEWバッファの使用方法について説明します。

この章の内容は以下のとおりです。

Oracle WebLogic Tuxedo Connector VIEWバッファの概要

注意:

http://docs.oracle.com/cd/E13203_01/tuxedo/tux100/pgc/pgbuf.htmlにある「C言語を使用したTuxedo ATMIアプリケーションのプログラミング」のVIEW型バッファの使用に関する項を参照してください。

Oracle WebLogic Tuxedo Connectorを使用すると、非依存型C構造体から派生したOracle Tuxedo VIEWバッファ・タイプと同様のJava VIEWバッファを作成できます。これにより、Oracle WebLogic ServerアプリケーションおよびOracle Tuxedoアプリケーションが共通の構造体を用いて情報を受け渡しできます。Oracle WebLogic Tuxedo Connector VIEWバッファは、FML VIEWもFML VIEW/Java変換もサポートしていません。

VIEW記述ファイルの作成方法

注意:

fbnameフィールドとnullフィールドは、非依存型Java構造体やC構造体とは関係がなく、JavaやCのVIEWコンパイラには無視されます。これらのフィールドにはプレースホルダーとして値(たとえば、ダッシュ)を入れる必要があります。

Oracle WebLogic ServerアプリケーションとOracle Tuxedoアプリケーションは、VIEW記述で定義された同一の情報構造を共有する必要があります。VIEW記述ファイルの各構造体には下記の形式を使用します。

$ /* VIEW structure */
VIEW viewname 
type cname fbname count flag size null 

説明:

  • ファイル名はVIEW名と同一です。

  • ファイルごとに1つのVIEWしか持てません。

  • VIEW記述ファイルは、Oracle WebLogic Tuxedo Connector viewjコンパイラとOracle Tuxedo viewcコンパイラの両方で使用されるファイルと同じファイルです。

  • viewnameは情報構造の名前です。

  • コメント行は、「#」または「$」文字で始めます。

  • 各構造体用のVIEW記述ファイルに指定しなければならないフィールドを下表で説明します。

表8-1 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)。文字型の場合は、`\0'。STRINGおよびCARRAY型では、" "。

規約により、エスケープ文字として使用される定数にも、NULL値を指定できます。VIEWコンパイラが認識するエスケープ定数は次のとおりです: \ddd (dは8進数)、\0、\n、\t、\v、\r、\f、\\、\'、および\"。

STRING、CARRAY、およびchar型のNULL値を、二重引用符または単一引用符で囲んでもかまいません。ユーザー指定のNULL値内のエスケープされていない引用符は、VIEWコンパイラでは受け付けられません。

VIEWメンバー記述のNULLフィールドでキーワード「NONE」を指定することもできます。この指定は、そのメンバーにはNULL値がないことを意味します。文字列および文字配列メンバーの最大サイズのデフォルト値は2660文字です。

サンプルVIEW記述ファイル

次に、Oracle Tuxedoアプリケーションと情報を送受信するためにVIEWバッファを使用するサンプルVIEW記述を示します。このVIEWのファイル名はinfoencです。

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

viewjコンパイラの使用方法

VIEW型バッファをコンパイルするには、引数としてパッケージ名とVIEW記述ファイルの名前を指定して、viewjコマンドを実行します。出力ファイルはカレント・ディレクトリに作成されます。

viewjコンパイラを使用するには、次のコマンドを入力します。

java weblogic.wtc.jatmi.viewj [options] [package] viewfile

viewj32コンパイラを使用するには、次のコマンドを入力します。

java weblogic.wtc.jatmi.viewj32 [options] [package] viewfile

このコマンドの引数の定義は次のとおりです。

引数 説明

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.wtc.atmi.simpview infoenc
    
  • VIEW32バッファは次のようにしてコンパイルします。

    java weblogic.wtc.jatmi.viewj32 -compat_names -modify_strings
    examples.wtc.atmi.simpview infoenc

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

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

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

  • setメソッドは、配列フィールドの数を設定し、文字列または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記述ファイルの作成方法」で説明されているとおりに、アプリケーション用のVIEW記述ファイルを作成します。
  2. 「viewjコンパイラの使用方法」で説明されているとおりに、VIEW記述ファイルをコンパイルします。
  3. 「VIEWバッファとの情報の受け渡し方法」で説明されているとおりに、setおよびgetアクセサ・メソッドを使用して、VIEWバッファに情報を渡したり、VIEWバッファから情報を受け取ったりします。

    クライアントでアクセサを使用してVIEWバッファと情報を受け渡す方法の例については、Oracle WebLogic Server配布キットのexamples/wtc/atmi/simpview/ViewClient.javaファイルを参照してください。

    このリリースでは、WTCサンプルはコード・ライブラリのBEA dev2dev Webサイトで入手できることに注意してください。

  4. VIEWコンパイラの出力ファイルをソース・コードにインポートします。
  5. 必要な場合は、http://docs.oracle.com/cd/E13203_01/tuxedo/tux100/pgc/pgbuf.htmlにあるC言語を使用したTuxedo ATMIアプリケーションのプログラミングの「VIEW型バッファの使用」で説明されているとおりに、Oracle Tuxedoアプリケーション用のVIEW記述ファイルをコンパイルし、その出力をCソース・ファイルにインクルードします。
  6. コンパイル済みJava VIEW記述ファイルの完全修飾クラス名とVIEWバッファ・タイプ(VIEWまたはVIEW32)を指定したResources MBeanでWTCServer MBeanを構成します。コンパイル済みJava VIEW記述ファイルのクラスをCLASSPATHに指定する必要があります。
  7. Oracle Tuxedoアプリケーションをビルドし、起動します。
  8. Oracle WebLogic Serverアプリケーションをビルドし、起動します。

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

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

構成の変更は不要です。引き続き、WLS構成ファイルのWTCResourcesセクションにあるViewTbl32Classes属性を使用して、VIEW32クラス・パスを構成します。

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

  • FViewFld(String vname, TypedView32 vdata);

  • FviewFld(FviewFld to_b_clone);

  • void setViewName(String vname)

  • String getViewName();

  • void setViewData(TypedView32 vdata)

  • void TypedView32 getViewData();

例8-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) {
  ….
}

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

XmlViewCnvクラスを使用したXMLとView/View(32)間の変換

XmlViewCnvクラスを使用すると、XMLからView/View(32)への変換、およびView/View(32)からXMLへの変換を実行できます。次のコードは、XMLバッファ・フォーマットとの間での変換にXmlViewCnvクラスを使用する例です。

import examples.wtc.atmi.simpview.infoenc; // View class import
weblogic.wtc.gwt.XmlViewCnv; 
import weblogic.wtc.jatmi.TypedBuffer;

public class xml2view
{
   public static void main(String[] args) {
      String xmlDoc = 
      "<VIEW32><infoenc><amount>1000.0</amount><infoenc></VIEW32>";

      infoenc convertMe = new infoenc();
      convertMe = (infoenc) XmlViewCnv.XMLToView(
         xmlDoc,
         convertMe.getClass(),
         convertMe.getSubtype());

      convertMe = (infoenc) echo.Echo(convertMe);

      result = XmlViewCnv.ViewToXML(
         (TypedBuffer) convertMe, 
         convertMe.getClass(), 
         true);

      System.out.println(result);
   }
}

ネストされたビューの変換

ネストされたビューとは、それ自体がビューであるstructのタイプの1つ以上のメンバーを含むビューです。この項では、ネストされたビューをXMLに変換する例を示します。

次に、ネストされたビューのファイルを示します。

VIEW file
VIEW    MYVIEW1
#type   Cname   Fbname  Count   Flag    Size    null
long    long1   -       1       -       -       0
string  string1 -       1       -       20      '\0`
END
 
VIEW    MYVIEW2
#type   Cname   Fbname  Count   Flag    Size    null
long    long1   -       1       -       -       0
bool    bool1   -       1       -       -       0
signedchar      schar1   -       1       -       -       0
struct  MYVIEW1 myview1 2       -       -       NONE
END

変換されたXML文字列は、次のとおりです。

<VIEW32>
   <MYVIEW2>
      <bool1>true</bool1>
      <long1>100</long1>
      <myview1><VIEW32><MYVIEW1>
         <string1>aa11</string1>
         <long1>100</long1>
      </MYVIEW1></VIEW32></myview1>
      <myview1><VIEW32><MYVIEW1>
         <string1>bb22</string1>
         <long1>100</long1>
      </MYVIEW1></VIEW32></myview1>
      <schar1>100</schar1>
   </MYVIEW2>
</VIEW32>