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