Oracle® Fusion Middleware Oracle WebLogic Server Oracle WebLogic Tuxedo Connectorアプリケーションの開発 12c (12.1.2) E48051-01 |
|
前 |
次 |
この章では、Oracle WebLogic Tuxedo Connector VIEWバッファの使用方法について説明します。
この章の内容は以下のとおりです。
注意: Oracle Tuxedo 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会話もサポートしていません。
注意:
|
Oracle WebLogic ServerアプリケーションとOracle Tuxedoアプリケーションは、VIEW記述で定義された同一の情報構造を共有する必要があります。VIEW記述ファイルの各構造体には下記の形式を使用します。
$ /* VIEW structure */ VIEW viewname type cname fbname count flag size null
説明:
ファイル名はVIEW名と同一です。
ファイルごとに1つのVIEWしか持てません。
Oracle WebLogic Tuxedo Connector viewj
コンパイラとOracle Tuxedo viewc
コンパイラの両方で同一のVIEW記述ファイルが使用されます。
viewname
は情報構造の名前です。
コメント行は、「#」または「$」文字で始めます。
各構造体用のVIEW記述ファイルに指定しなければならないフィールドを下表で説明します。
表8-1 VIEW記述ファイルのフィールド
フィールド | 説明 |
---|---|
type
|
フィールドのデータ型。設定できる型は、 |
cname
|
情報構造内でのフィールド名。 |
fbname
|
無視されます。 |
count |
フィールドの反復回数。 |
flag |
次のいずれかのオプション・フラグを指定します。
|
size |
|
null |
ユーザー指定の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
型バッファをコンパイルするには、引数としてパッケージ名とVIEW記述ファイルの名前を指定して、viewj
コマンドを実行します。出力ファイルはカレント・ディレクトリに作成されます。
viewj
コンパイラを使用するには、次のコマンドを入力します。
java weblogic.wtc.jatmi.viewj [options] [package] viewfile
viewj32
コンパイラを使用するには、次のコマンドを入力します。
java weblogic.wtc.jatmi.viewj32 [options] [package] viewfile
このコマンドの引数の定義は次のとおりです。
引数 | 説明 |
---|---|
options |
注意: |
package |
例: examples.wtc.atmi.simpview |
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
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バッファを取り込む際には、次の手順に従います。
「VIEW記述ファイルの作成方法」で説明されているとおりに、アプリケーション用のVIEW記述ファイルを作成します。
「viewjコンパイラの使用方法」で説明されているとおりに、VIEW記述ファイルをコンパイルします。
「VIEWバッファとの情報の受け渡し方法」で説明されているとおりに、setおよびgetアクセサ・メソッドを使用して、VIEWバッファに情報を渡したり、VIEWバッファから情報を受け取ったりします。
クライアントでアクセサを使用してVIEWバッファと情報を受け渡す方法の例については、Oracle WebLogic Server配布キットのexamples/wtc/atmi/simpview/ViewClient.java
ファイルを参照してください。
VIEWコンパイラの出力ファイルをソース・コードにインポートします。
必要な場合は、http://docs.oracle.com/cd/E13203_01/tuxedo/tux100/pgc/pgbuf.html
にあるC言語を使用したTuxedo ATMIアプリケーションのプログラミングのVIEW型バッファの使用に関する項で説明されているとおりに、Oracle Tuxedoアプリケーション用のVIEW記述ファイルをコンパイルし、その出力をCソース・ファイルにインクルードします。
コンパイル済みJava VIEW記述ファイルの完全修飾クラス名とVIEWバッファ・タイプ(VIEWまたはVIEW32)を指定したResources MBeanでWTCServer MBeanを構成します。コンパイル済みJava VIEW記述ファイルのクラスをCLASSPATH
に指定する必要があります。
Oracle Tuxedoアプリケーションをビルドし、起動します。
Oracle WebLogic Serverアプリケーションをビルドし、起動します。
ヘルパー・クラスを使用して、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)への変換、および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>