1.3.2 AppContextクラスの使用
AppContextクラスは、Tuxedoサービスへのアクセス関数の実行に使用するキー・クラスです。AppContextを使用すると、マルチコンテキスト・クライアント・アプリケーションでOOプログラミング手法を活用できます。
ノート:
マルチコンテキストの詳細は、『Cを使用したOracle Tuxedo ATMIアプリケーションのプログラミング』のマルチスレッドおよびマルチコンテキストATMIアプリケーションのプログラミングに関する項を参照してください。Tuxedo ATMI C関数(たとえば、tpcall()とtpnotify())はほとんどすべてAppContextクラスのメソッドとして定義されています。AppContextクラスのインスタンスの作成は、TuxedoドメインとそのTuxedoドメインで提供される呼出しサービスに接続する上で、重要な要素です。
CまたはCOBOLで記述されたマルチコンテキストのアプリケーションでは、通常、プログラマは2つのATMI関数tpgetctxt()とtpsetctxt()を使用して、Tuxedoコンテキストを切り替える必要があります。この切替えは、Tuxedo .NETワークステーション・クライアントを使用する場合、不要です。クラスAppContextのインスタンスを作成すると、特定のTuxedoコンテキストのインスタンスも作成されます。
特定のAppContextのインスタンスに対する操作は、他のAppContextのインスタンスに影響しません。マルチコンテキスト・アプリケーションを開発し、簡単に切り替えることができます。
Tuxedoコンテキストのインスタンスを作成するには、静的クラスのコンストラクタではなく、メソッドAppContext.tpinit(TPINIT)を呼び出す必要があります。
ノート:
Tuxedoコンテキストのインスタンスは、自動的には破棄されません。Tuxedoコンテキストのインスタンスを破棄するには、AppContext.tpterm()を呼び出す必要があります。そうしないと、以下の現象が発生する可能性があります。
- ガベージ・コレクタ(gc)が、Tuxedoコンテキストのセッションを終了せずに、
AppContextクラスのインスタンスを破棄します。 - クライアントとWSHの間の接続が、タイムアウトするまで保持されます。
次のC#コード・スニペットは、単一コンテキスト・クライアントTuxedoドメインへの接続方法を示しています。
……
TypedTPINIT tpinfo = new TypedTPINIT();
AppContext ctx1 = AppContext.tpinit(tpinfo); // connect to Tuxedo domain
……
ctx1.tpterm(); // disconnect from Tuxedo domain次のC#コード・スニペットは、マルチコンテキスト・クライアントTuxedoドメインへの接続方法を示しています。
……
TypedTPINIT tpinfo = new TypedTPINIT();
tpinfo.flags = TypedTPINIT.TPMULTICONTEXTS; // set multi context flag
// connect to the first Tuxedo domain
AppContext ctx1 = AppContext.tpinit(tpinfo);
Utils.tuxputenv("WSNADDR=//10.2.0.5:1001");
// connect to the second Tuxedo domain
AppContext ctx2 = AppContext.tpinit(tpinfo);
……
ctx1.tpterm(); // disconnect from the first Tuxedo domain
ctx2.tpterm(); // disconnect from the second Tuxedo domain