Oracle Tuxedo Javaプログラミングの紹介
Oracle TuxedoサービスはPure Java言語を使用して開発できます。Java言語で実装されるサービスは、他のTuxedoサービスと同様に機能します。Tuxedo Javaサーバー(
TMJAVASVR)によって通知されるサービスを、ATMIインタフェースを使用してクライアントまたはTuxedoサーバーから呼び出すことができます。同様に、Tuxedoサーバーによって通知されるサービスを、TJATMIインタフェースを使用してjava実装サービスから呼び出すことができます。
さらに、java実装サービスは、ネイティブ・クライアント、/WSクライアント、Joltクライアントなど、あらゆる種類のTuxedoクライアントから呼び出すことができます。
Tuxedoサービスを実装するために、TJATMIインタフェース、JATMI TypedBuffer、POLO javaオブジェクトなど、様々な主要Javaテクノロジの使用がサポートされます。
次のガイドラインは、Javaサービス開発の基本的な手順です。
•
|
Javaサービスを実装するJavaサーバー・クラスは、 TuxedoJavaServerクラスを継承し、デフォルトのコンストラクタを有している必要があります。
|
•
|
Javaサーバー・クラスでは、Javaサービスとして通知されるJavaメソッドは、入力引数として TPSVCINFOインタフェースのみを使用する必要があります。また、publicとして宣言する必要があります。
|
•
|
Javaサーバー・クラスは、Tuxedo Javaサーバーの起動時に呼び出される tpsvrinit()メソッドを実装する必要があります。
|
•
|
Javaサーバー・クラスは、Tuxedo Javaサーバーの停止時に呼び出される tpsvrdone()メソッドを実装する必要があります。
|
•
|
Javaサービスが、Tuxedo Java ATMI ( tpcall、 tpbeginなど)を使用できる状態にある必要があります。
|
•
|
Javaサービスが、 tpreturnを使用してクライアントに結果を返したり、例外をスローして終了できる状態にある必要があります。
|
Tuxedo Javaサーバー・スレッドおよびJavaクラス・インスタンス・モデル
•
|
Tuxedo 12cリリース1 (12.1.1)では、Tuxedo Javaサーバーで従来のTuxedoマルチスレッド・モデルが使用されるため、マルチスレッド・モードで稼働する必要があります。
|
•
|
起動後に、Tuxedo Javaサーバーでは、構成ファイルに定義されている各クラス用に1つのグローバル・オブジェクト(インスタンス)が作成されます。各動作スレッドは、Javaサービスの処理時にそのグローバル・オブジェクト(インスタンス)を共有します。
|
Tuxedo Javaサーバーの初期化メソッドと終了メソッド
メソッドの動作は、Tuxedo 12cリリース2 (12.1.3以上)とTuxedo 12cリリース1 (12.1.1)で異なります。
Tuxedo 12cリリース2 (12.1.3以上)の動作
Javaサーバーでサポートしている初期化メソッドおよび終了メソッドは、
tpsvrinit()、
tpsvrinit(String [])、
tpsvrdone()、
tpsvrthrinit()、
tpsvrthrinit(String [])および
tpsvrthrdone()です。
注意:
|
tpsvrinit()および tpsvrdone()は必須です。他の4つのメソッドはオプションです。
|
アプリケーション・サーバー・クラスのロード時に、Javaサーバーはこれらすべての初期化メソッドおよび終了メソッドを検索し、次の規則に従って対応する初期化メソッドを呼び出します。
|
|
|
|
|
|
|
|
|
tpsvrinit(), tpsvrinit(String [])
|
|
|
tpsvrinit(), tpsvrinit(String [])
|
|
|
Javaサーバーは、インスタンス化およびアクティブ化時に対応するスレッド・レベルの初期化メソッドを呼び出します(ユーザー・サーバー・クラスの下に実装されている場合)。呼出し規則は次のとおりです。
表1-2
標準のスレッド初期化メソッドの呼出し規則
|
|
|
|
|
|
|
|
|
tpsvrthrinit(), tpsvrthrinit(String [])
|
|
|
tpsvrthrinit(), tpsvrthrinit(String [])
|
|
|
|
|
|
|
|
|
サーバーのディスパッチ・スレッドの非アクティブ化時に、
tpsvrthrdone()メソッドが呼び出されます(サーバー・クラスに実装されている場合)。
tpsvrthrinit()および
tpsvrthrdone()は、Javaサーバーがシングル・スレッド・モードで実行されている場合は呼び出されません。
注意:
|
ユーザーは、初期化メソッドおよび終了メソッドでJava APIを呼び出すことができます。
|
Tuxedo 12cリリース1 (12.1.1)の動作
ユーザーは、
tpsvrinit()メソッドを実装する必要があります。
tpsvrinit()はサーバーの起動時に呼び出されるため、このメソッドにクラス範囲の初期化を設定することをお薦めします。あるクラスの
tpsvrinit()が失敗した場合、警告メッセージがユーザー・ログに報告され、Javaサーバーは実行を続けます。
ユーザーは、
tpsvrdone()メソッドを実装する必要があります。
tpsvrdone()はサーバーの停止時に呼び出されるため、このメソッドにクラス範囲のクリーンアップ処理を設定することをお薦めします。
Tuxedo Javaサーバーのtpreturn()メソッド
Javaサービスの
tpreturn()は、Javaサービス・メソッドの実行をすぐには中断しませんが、Tuxedo Javaサーバーに結果を返します。
Javaサービスにおける
tpreturn()の動作と、既存のTuxedoシステムにおける
tpreturn()の動作の違いを次に示します。
•
|
既存のTuxedoシステムで tpreturn()が呼び出される場合、フロー制御はTuxedoに自動的に移ります。
|
•
|
Javaサービスで tpreturn()が呼び出される場合、 tpreturn()より後の文もそのまま実行されます。ユーザーは、 tpreturn()をJavaサービスにおける最後の実行文にする必要があります。そうできない場合は、 tpreturn()の後にJavaの return呼出しを使用することをお薦めします。そうしないと、 tpreturn()を実行しても、フロー制御がTuxedoシステムに自動的に移りません。
|
注意:
|
Javaサービスで、先行する tpreturn()文なしでJavaの return文を使用することはお薦めしません。そうすると、Javaサーバーは対応するクライアントにrcode設定0を指定した TPFAILを返します。
|
•
|
Javaサービスは実行中いつでも例外をスローして終了できます。この場合、Javaサーバーはクライアントに、このサービスのrcode設定を0に指定した TPFAILを返します。
|
•
|
すべての例外情報は $APPDIR/stderrファイルに記録されます。
|