8 Oracle WebLogic Tuxedo Connector JATMI 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 Tuxedoviewc
コンパイラの両方で使用されるファイルと同じファイルです。 -
viewname
は情報構造の名前です。 -
コメント行は、「#」または「$」文字で始めます。
-
各構造体用のVIEW記述ファイルに指定しなければならないフィールドを下表で説明します。
表8-1 VIEW記述ファイルのフィールド
フィールド | 説明 |
---|---|
|
フィールドのデータ型。設定できる型は、 |
|
情報構造内でのフィールド名。 |
|
無視されます。 |
|
フィールドの反復回数。 |
|
次のいずれかのオプション・フラグを指定します。
|
|
|
|
ユーザー指定のNULL値、または、マイナース記号( デフォルトのNULL値は、数値型の場合はすべて0 (dec_tでは0.0)。文字型の場合は、` 規約により、エスケープ文字として使用される定数にも、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
このコマンドの引数の定義は次のとおりです。
表8-2 引数
引数 | 説明 |
---|---|
options |
ノート: |
package |
例: |
viewfile |
VIEW記述ファイルの名前。 例: |
たとえば:
-
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バッファを取り込む際には、次のステップに従います。
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>