| Oracle® Fusion Middleware Oracle WebLogic Server Oracle WebLogic Tuxedo Connectorアプリケーションの開発 12c (12.2.1.1.0) E79381-01 |
|
![]() 前 |
![]() 次 |
この章の内容は以下のとおりです。
注意:
Oracle Tuxedo 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変換もサポートしていません。
注意:
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しか持てません。
Oracle WebLogic Tuxedo Connector コンパイラとOracle Tuxedo viewjコンパイラの両方で同一のVIEW記述ファイルが使用されます。
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文字です。 |
次に、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
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バッファを取り込む際には、次の手順に従います。
ヘルパー・クラスを使用して、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>