目次 前 次 PDF


ATMI Javaサーバーのユーザー・インタフェース

ATMI Javaサーバーのユーザー・インタフェース
このトピックには次の項が含まれます:
TuxedoJavaServer
TuxedoJavaServerは抽象クラスです。サービスを実装するすべてのユーザー定義クラスによって継承される必要があります。
 
表2-1 TuxedoJavaServerインタフェース
関数
説明
tpsvrinit
初期化処理を実行するために、子クラスが実装する必要がある抽象メソッド
tpsvrdone
クリーンアップ処理を実行するために、子クラスが実装する必要がある抽象メソッド
getTuxAppContext
現在アタッチされているTuxedoアプリケーションJavaコンテキストを取得するために使用
Oracle Tuxedo Javaコンテキスト
Oracle Tuxedo Javaサーバーで提供されるTJATMIプリミティブにアクセスするには、すべてのTJATMIプリミティブを実装するTuxAppContextオブジェクトを取得する必要があります。
サービス・クラスはTuxedoJavaServerから継承するため、サービスでgetTuxAppContext()を呼び出してコンテキスト・オブジェクトを取得します。ただし、tpsvrinit()ではTuxAppContextを取得できません。この時点でTuxAppContextは準備ができていないためです。tpsvrinit()TuxAppContextオブジェクトを取得しようとすると、tpsvrinit()が失敗して、例外がスローされます。
Tuxedo JavaアプリケーションのTJATMIプリミティブ
TJATMIは、サービスの呼出し、トランザクションの開始と終了、DataSourceへの接続の取得など、クライアントとサーバー間の通信を提供する一連のプリミティブです。
詳細は、「JavaサーバーのJavadoc」を参照してください。
 
表2-2 TJATMIプリミティブ
名前
操作
tpcall
要求/応答通信でOracle Tuxedoサービスの同期呼出しに使用する。
tpacall
サービス・リクエストを送信し、その応答を待つルーチン
tpgetrply
以前のリクエストからの応答を受信するルーチン
tpcancel
未終了の応答に対する呼出し記述子を無効にするためのルーチン
tpsubscribe
イベントにサブスクライブ
tpunsubscribe
イベントへのサブスクライブを取り消す
tppost
イベントを通知
tpbroadcast
名前によって通知をブロードキャストするルーチン
tpnotify
クライアント識別子によって通知を送信するルーチン
tpbegin
トランザクションの開始に使用します。
tpcommit
現在のトランザクションをコミットするために使用します。
tpabort
現在のトランザクションを強制終了するために使用します。
tpsuspend
グローバル・トランザクションを一時停止
tpresume
グローバル・トランザクションを再開
tpgetlev
トランザクション・モードかどうかチェックするルーチン
tpscmt
tpcommit()がいつ戻るかを設定するルーチン
tpenqueue
メッセージをキューに登録するルーチン
tpdequeue
キューからメッセージを取り出すルーチン
tpgblktime
以前に設定された、1秒または1ミリ秒当たりの非トランザクション・ブロック時間値を戻すルーチン
tpsblktime
次のサービス呼出しまたはコンテキストごとに使用されるすべてのサービス呼出しの非トランザクション・ブロック時間値を秒単位またはミリ秒単位で設定するルーチン
tpsprio
サービス・リクエストの優先度を設定するルーチン
tpgprio
サービス・リクエストの優先度を取得するルーチン
tpgetctxt
現在のアプリケーション関連のコンテキスト識別子を取り出す
tpsetctxt
現在のアプリケーション関連にコンテキスト識別子を設定
tpappthrinit
アプリケーション生成のサーバー・スレッドで新しいTuxedoコンテキストを生成および初期化するルーチン
tpappthrterm
サーバー・プロセス内のアプリケーション生成のコンテキストを終了するルーチン
tpreturn
Tuxedo Javaサーバーで戻り値とデータを設定するために使用します。
tpgetlev
トランザクションが進行中かどうかをチェックするために使用します。
getConnection
構成したDataSourceへの接続を取得するために使用します。
userlog
ユーザー・ログをTuxedoユーザー・ログ・ファイルに出力するために使用します。
注意:
tpreturnが実行を終了した後も、サービスは実行し続けます。tpreturn()をサービスの最後の実行文として指定してください。
Java APIプログラミングの例
Tuxedo Java APIのほとんどは、有効なTuxedoコンテキストで呼び出す必要があります。これらのAPIを呼び出す前に、有効なTuxedoコンテキストを取得する必要があります。
次の例では、Java APIでのプログラム方法を示します。
リスト2-1 サーバーの初期化および終了段階でAPIを呼び出す場合の例
public int tpsvrinit()
{
TuxAppContext myAppCtxt = null;
try {
int cd;
TypedString rqstData = new TypedString("hello���);
TuxATMIReply rply = null;
myAppCtxt = getTuxAppContext();
cd = myAppCtxt.tpacall("data_process", rqstData, 0);
rply = myAppCtxt.tpgetrply(cd, 0);
...
} catch (TuxATMITPException ex) {
} catch (Throwable ex) {
}
return 0;
}
public void tpsvrdone()
{
TuxAppContext myAppCtxt = null;
try {
TypedString rqstData = new TypedString("hello���);
TuxATMIReply rply = null;
myAppCtxt = getTuxAppContext();
rply = myAppCtxt.tpcall("data_process", rqstData, 0);
...
} catch (TuxATMITPException ex) {
} catch (Throwable ex) {
}
return;
}
 
リスト2-2 サービス・ルーチンでAPIを呼び出す場合の例
public void MYSERVICE(TPSVCINFO rqst)
{
TuxAppContext myAppCtxt = null;
try {
TypedFML32 rqstData = (TypedFML32)rqst.getServiceData();
TuxATMIReply rply = null;
TypedFML32 rplyData = null;
myAppCtxt = getTuxAppContext();
rply = myAppCtxt.tpcall("data_process", rqstData, 0);
rplyData = (TypedFML32)rply.getReplyBuffer();
myAppCtxt.tpreturn(TPSUCCESS, 0, rplyData, 0);
} catch (TuxATMITPException ex) {
} catch (Throwable ex) {
}
return;
}
 
リスト2-3 サービス要求を転送する場合の例
public void MYSERVICE(TPSVCINFO rqst)
{
TuxAppContext myAppCtxt = null;
try {
TypedFML32 rqstData = (TypedFML32)rqst.getServiceData();
TuxATMIReply rply = null;
TypedFML32 rplyData = null;
myAppCtxt = getTuxAppContext();
rply = myAppCtxt.tpcall("data_process", rqstData, 0);
rplyData = (TypedFML32)rply.getReplyBuffer();
myAppCtxt.tpforward("FWD_SVC", rplyData, 0);
} catch (TuxATMITPException ex) {
} catch (Throwable ex) {
}
return;
}
 
リスト2-4 アプリケーション・サーバー・スレッドでAPIを呼び出す場合の例
public class SimpServTuxAppThread implements Runnable, TuxATMIConstants {
public void run() {
try {
TPINIT tpinfo = null;
int rtn = 0;
rtn = TuxAppContextUtil.tpappthrinit(tpinfo);
TuxAppContext myAppCtxt = null;
myAppCtxt = TuxAppContextUtil.getTuxAppContext();
TuxATMIReply rply = null;
TypedString rqStr = new TypedString("Is_is_simple_appThread_test");
rply = myAppCtxt.tpcall("SVC", rqStr, TPNOTIME|TPSIGRSTRT);
rtn = TuxAppContextUtil.tpappthrterm();
} catch (TuxATMITPException ex) {
} catch (Throwable ex) {
}
}
}
 
注意:
前述の例では、有効なTuxedoアプリケーション・コンテキストは、アプリケーションによって作成されたJavaサーバー・スレッドでTuxAppContextUtil.tpappthrinit() を呼び出すことで作成できます。TuxAppContextUtil.tpappthrinit()の呼出しに成功すると、TuxAppContextUtil.getTuxAppContext()メソッドを呼び出して有効なTuxedoアプリケーション・コンテキストを取得し、その後Tuxedo Java APIをコンテキストに呼び出すことができます。
Tuxedo JavaアプリケーションのTypedBuffer
ATMI Javaサーバーは、Oracle Tuxedo型付きバッファに対応するOracle WebLogic Tuxedo Connector TypedBufferを再利用します。メッセージは、サーバーの型付きバッファに渡されます。ATMI Javaサーバーによって提供されるバッファ・タイプを表2-3に示します。
 
表2-3 TypedBuffer
バッファ・タイプ
説明
TypedString
データがNULL文字で終了する文字の配列である場合に使用されるバッファ・タイプ。Oracle Tuxedoの等価タイプ: STRING
TypedCArray
データが、NULL可能な文字の未定義配列(バイト配列)である場合に使用されるバッファ・タイプ。Oracle Tuxedoの等価タイプ: CARRAY
TypedFML
データが自己定義である場合に使用されるバッファ・タイプ。データ・フィールドごとに個別の識別子、出現回数、および必要に応じて長さを示す情報を保持します。Oracle Tuxedoの等価タイプ: FML
TypedFML32
TypeFMLに似たバッファ・タイプだが、より大きい文字フィールド、より多くのフィールド、およびより大きいバッファ全体に対して使用可能。Oracle Tuxedoの等価タイプ: FML32
TypedXML
データがXMLベースのメッセージである場合に使用されるバッファ・タイプ。Oracle Tuxedoでは次に相当: XML (Tuxedoリリース7.1以降)。
TypedView
VIEW記述ファイルを用いてバッファ構造を定義するためにアプリケーションがJava構造体を使用するとき、使用されるバッファ・タイプ。Oracle Tuxedoの等価タイプ: VIEW
TypedView32
VIEWに似たバッファ・タイプだが、より大きい文字フィールド、より多くのフィールド、およびより大きいバッファ全体に対して使用可能。Oracle Tuxedoの等価タイプ: VIEW32
詳細は、weblogic.wtc.jatmiのパッケージを参照してください。
また、Javaサーバー・クラスでTypedFML/TypedFML32またはTypedView/TypedView32 (あるいはその両方)を使用する場合は、「リファレンス」の「Oracle Tuxedo JavaサーバーでのFMLの使用」および「Oracle Tuxedo JavaサーバーでのVIEWの使用」の情報が役立ちます。
Typedbufferサポートの制限事項
別のTypedFML32に埋め込まれているTypedFML32のFldid()/Fname()は機能できません。この問題に対処するには、名前またはIDの転送のかわりにfieldtableクラスを使用します。
現時点でweblogic.wtc.gwt.XmlViewCnv/XmlFmlCnvクラスは使用できません。
サービス情報の取得または設定
TPSVCINFOクラスを使用して、Oracle Tuxedoクライアントによって送信されるサービス情報を取得または設定します。
 
表2-4 ゲッター関数
関数
説明
getServiceData
Oracle Tuxedoクライアントから送信されるサービス・データを返すために使用する。
getServiceFlags
Oracle Tuxedoクライアントから送信されるサービス・フラグを返すために使用する。
getServiceName
呼び出されたサービス名を返すために使用する。
getAppKey
アプリケーション認証クライアント・キーを取得するために使用されます。
getClientID
最初のクライアントのクライアントIDを取得するために使用されます。
TuxATMIReplyを使用して、サービス呼出しの返信データとメタデータを取得します。
 
表2-5 返信のゲッター関数
関数
説明
getReplyBuffer
サービスから返される型付きバッファ(nullの可能性あり)を返します。
gettpurcode
サービスから返されるtpurcodeを返します。
例外
tpcall()などのサービスでJATMIプリミティブによってスローされる例外を捕捉する必要があります。JATMIがスローする例外は2種類あります。
TuxATMITPException: TJATMI障害を表す例外。
TuxATMITPReplyException: サービス障害(TPESVCFAILまたはTPSVCERROR)があった場合にスローされる例外。ユーザー・データがこの例外に関連付けられることがあります。
詳細は、「JavaサーバーのJavadoc」を参照してください。
トレース
従来のTuxedo ATMIの場合と同じく、TMTRACE=atmi:ulogをエクスポートする必要もあります。TJATMI APIトレースは他のATMIトレースとしてULOGに書き込まれます。
関連項目
TMJAVASVR(5)
 
Oracle Tuxedo Javaサーバーの管理
Oracle Tuxedo Javaサーバーの構成
付録: Javaサーバー構成ファイルのスキーマ
Javaを使用したOracle Tuxedoアプリケーションのプログラミング
 

Copyright ©1994, 2017,Oracle and/or its affiliates. All rights reserved