![]() |
![]() |
|
|
APPQ_MIB(5)
名前
APPQ_MIB - /Q の管理情報ベース
形式
#include <fml32.h>
#include <tpadm.h>
機能説明
/Q MIB はアプリケーション・キューを管理するためのクラスを定義します。
APPQ_MIB(5) は、管理要求をフォーマットし、管理応答を解釈するために共通の MIB のリファレンス・ページMIB(5)と組み合わせて使用できます。MIB(5)で説明されているように、要求はこのリファレンス・ページで解説されているクラスと属性を使用してフォーマットされます。この要求は、アクティブなアプリケーションに存在する多数の ATMI インターフェイスのどれかを使用して管理サービスを要求するのに使用されます。非アクティブなアプリケーションのアプリケーション・キューは、tpadmcall() 関数インターフェイスを使用しても管理できます。APPQ_MIB(5) のすべてのクラス定義に関連する追加情報については、「APPQ_MIB(5) に関する追加情報」を参照してください。
APPQ_MIB(5) は以下のクラスから構成されます。
クラス名 |
属性 |
---|---|
キュー・スペース内のアプリケーション・キュー |
|
アプリケーション・キュー内のメッセージ |
|
アプリケーション・キュー・スペース |
|
アプリケーション・キューに対応したトランザクション |
この MIB は、サーバ・キュー (TM_MIB(5) コンポーネントの T_QUEUE クラス) ではなく、アプリケーションが定義している永続的 (信頼性の高いディスク・ベースの) キューおよび非永続的 (メモリ内の) なキュー (つまり /Q キュー) を示していることに注意してください。 各クラスの説明セクションには、4 つのサブセクションがあります。
属性表の形式
この MIB の一部を構成している各クラスは、4 つのパートで記録されます。1 つは属性表です。属性表はクラス内の属性をリストし、さらに管理者、オペレータ、一般ユーザが属性を使用してアプリケーションとインターフェイスをとる方法を示しています。
属性表の各属性記述には 5 つの構成要素 (名前、タイプ、パーミッション、値、デフォルト値) があります。各項目についてはMIB(5)で説明します。
TA_FLAG 値
MIB(5)は、共通およびコンポーネントの MIB 固有のフラグ値を持った long の共通 TA_FLAGS 属性を定義します。APPQ_MIB(5) コンポーネントには、次に示すフラグ値が定義されます。これらのフラグ値は共通 MIB フラグと組み合わせて使用します。
FML32 フィールド・テーブル
このリファレンス・ページに記述する属性のフィールド・テーブルは、システムにインストールした BEA Tuxedo ソフトウェアのルート・ディレクトリからの相対パスで指定される udataobj/tpadm ファイルにあります。${TUXDIR}/udataobj ディレクトリは FLDTBLDIR 環境変数で指定されるリスト (Windows の場合はセミコロンで区切り、それ以外はコロンで区切る) に、またフィールド・テーブル名 tpadm は FIELDTBLS 環境変数で指定されるカンマで区切ったリストに、アプリケーションによって指定されなければなりません。
制限事項
この MIB は、リリース 6.0 以降の BEA Tuxedo を使用しているサイトでのネイティブおよび /WS だけに提供されます。
リリース 6.0 以前の BEA Tuxedo リリースを動作させているサイトがアプリケーションでアクティブな場合は、この MIB による管理アクセスは以下のように制限されます。
T_APPQ クラスの定義
概要
T_APPQ クラスはアプリケーション・キューを表します。1 つのアプリケーション・キュー・スペースには、1 つ以上のアプリケーション・キューがあります。
制限事項
すべてのキー・フィールドを未設定にすると、このクラスのすべてのインスタンスを検索できません。反対に、1 つのアプリケーション・キュー・スペースを明示的に指定するには、適切なキー・フィールドを指定しなければなりません。必要なキー・フィールドは、TA_APPQSPACENAME、TA_QMCONFIG、TA_LMID です。ただし、アプリケーションの環境が未設定 (TUXCONFIG 環境変数が未設定) の場合を除きます。環境が未設定の場合は、TA_LMID を省略しなければなりません。たとえば、tpcall() を用いて、要求に TA_APPQSPACENAME、TA_QMCONFIG、および TA_LMID 属性を設定した場合、指定したキュー・スペースのすべての T_APPQ オブジェクトが検索されます。
属性表
a T_APPQ クラスの属性はすべてローカル属性です。 b アプリケーションのコンフィギュレーションが設定されていない (TUXCONFIG 環境変数が未設定) 場合以外、TA_LMID はキー・フィールドとして指定する必要があります。 c T_APPQ オブジェクトに対するすべての操作 (GET、SET の両方) は、対応するキュー・スペースを自動的にオープンします。つまり、キュー・スペースの状態が OPEn または ACTive になっていない場合、暗黙的に OPEn に設定されます。キュー・スペースが大きいと、操作に時間がかかります。 d アプリケーション・キューを作成した後は、TA_APPQORDER を変更できません。 e 1 つのアプリケーション・キュー・スペースを明示的に指定するには、GET 操作の際に適切なキー・フィールドを設定する必要があります。 属性の意味
VALid |
指定されたキューが存在します。この状態は INActive と同等で、パーミッションの確認に使用されます。 |
PRIO、TIME、LIFO
TIME、PRIO、FIFO
TIME、FIFO
EXPIR
EXPIR、PRIO、FIFO
TIME、EXPIR、PRIO、FIFO
T_APPQMSG クラスの定義
概要
T_APPQMSG クラスは、アプリケーション・キュー内に保存されたメッセージを表します。メッセージは管理者が作成するのではなく、tpenqueue() 呼び出しの結果作成されます。メッセージは tpdequeue() 呼び出し、または管理者によって削除されます。また、メッセージの特定属性は管理者が変更できます。たとえば、管理者はメッセージを同一キュー・スペース内のあるキューから別のキューに移動させたり、優先順位を変更することができます。
制限事項
すべてのキー・フィールドを未設定にすると、このクラスのすべてのインスタンスを検索できません。反対に、1 つのアプリケーション・キュー・スペースを明示的に指定するには、適切なキー・フィールドを指定しなければなりません。必要なキー・フィールドは、TA_APPQSPACENAME、TA_QMCONFIG、および TA_LMID です。ただし、アプリケーションの環境が未設定 (TUXCONFIG 環境変数が未設定) の場合を除きます。環境が未設定の場合は、TA_LMID を省略しなければなりません。たとえば、tpcall() を用いて、要求に TA_APPQSPACENAME、TA_QMCONFIG、および TA_LMID 属性を設定した場合、指定キュー・スペース内のすべての T_APPQMSG オブジェクトが検索されます。
属性表
a T_APPQMSG クラスの属性はすべてローカル属性です。 b アプリケーションのコンフィギュレーションが設定されていない (TUXCONFIG 環境変数が未設定) 場合を除いて、TA_LMID をキー・フィールドとして指定しなければなりません。 c T_APPQMSG オブジェクトに対する操作はすべて (GET、SET の両方とも)対応するキュー・スペースを自動的にオープンします。キュー・スペースの状態が OPEn または ACTive 以外の場合、暗黙的に OPEn に設定します。キュー・スペースが大きい場合、この操作には大変時間がかかります。 d 1 つのアプリケーション・キュー・スペースを明示的に指定するには、GET 操作の際に適切なキー・フィールドを設定する必要があります。 属性の意味
VALid |
メッセージが存在します。この状態は INActive と同等で、パーミッションの確認に使用されます。 |
INValid |
メッセージがキュー・スペースから削除されます。この操作を行う場合、メッセージは VALid 状態でなければなりません。正常終了すると、オブジェクトの状態は INValid になります。 |
unset |
メッセージを変更します。正常終了すると、オブジェクトの状態は変更されません。 |
TA_HIGHPRIORITY:1 <= num <= 100
TA_MSGEXPIREENDTIME:
TA_MSGENDTIME:
T_APPQSPACE クラスの定義
概要
T_APPQSPACE クラスは、アプリケーション・キュー・スペースを表します。アプリケーション・キュー・スペースとは BEA Tuxedo システム・デバイス内の領域です。デバイスとその属性についての詳細は、TM_MIB(5) の T_DEVICE クラスを参照してください。各キュー・スペースには通常 1 つ以上のアプリケーション・キューがあり、各キューにはメッセージが保存されます。
キュー・スペースは、名前 (TA_APPQSPACENAME 属性)、キュー・スペースが存在するデバイス (TA_QMCONFIG 属性)、デバイスが存在する論理マシン (TA_LMID 属性) の複数の属性により一意に識別されます。
キュー・スペースは通常、環境設定済みのアプリケーションでは 1 つのサーバグループにしか関連付けられません。キュー・スペース名およびデバイス名は、T_GROUP オブジェクトの TA_OPENINFO 属性のコンポーネントです。
制限事項
すべてのキー・フィールドを未設定にすると、このクラスのすべてのインスタンスを検索できません。反対に、1 つのアプリケーション・キュー・スペースを明示的に指定するには、すべてのキー・フィールドを指定しなければなりません。環境設定がされていない (TUXCONFIG 環境変数が未設定) アプリケーションのコンテキストで tpadmcall() を介してローカル・キュー・スペースにアクセスすると、例外が 1 つ発生します。この場合、TA_LMID キー・フィールドは省略しなければなりません。
/Q MIB 内のすべてのオブジェクトに対する操作は暗黙的にキュー・スペースを使用するため、上記のキュー・スペースのアクセスに関する制限は、T_APPQ オブジェクト、T_APPQMSG オブジェクト、T_APPQTRANS オブジェクトにも該当します。
属性表
a T_APPQSPACE クラスの属性はすべてローカル属性です。 b アプリケーションの環境設定がされていない (TUXCONFIG 環境変数が未設定) 場合を除いて、TA_LMID をキー・フィールドとして指定しなければなりません。 c T_APPQ オブジェクト、T_APPQMSG オブジェクト、および T_APPQTRANS オブジェクトに対する操作はすべて (GET、SET の両方とも) 対応するキュー・スペースを自動的にオープンします。キュー・スペースの状態が OPEn または ACTive 以外の場合、暗黙的に OPEn に設定します。キュー・スペースが大きい場合、この操作には大変時間がかかります。 d キュー・スペース作成後、TA_MAXQUEUES は変更不可能となります。 属性の意味
T_APPQTRANS クラスの定義:
概要
T_APPQTRANS クラスは、アプリケーション・キューに対応するトランザクションの実行時属性を表します。
制限事項
すべてのキー・フィールドを未設定にすると、このクラスのすべてのインスタンスを検索できません。反対に、1 つのアプリケーション・キュー・スペースを明示的に指定するには、すべてのキー・フィールドを指定しなければなりません。たとえば、TA_XID を除くすべてのキー・フィールドを tpcall() を使用して要求に設定した場合、指定キュー・スペースに対応する T_APPQTRANS オブジェクトがすべて検索されます。
このクラスのオブジェクトで表現されるトランザクションは必ずしも検索対象のアプリケーションに対応しないので注意して下さい。トランザクションは実際に他のアプリケーションに属さない、あるは影響を持たないため、トランザクションにコミットしたり、トランザクションをアボートする場合は注意してください。TA_XID 属性の値はアプリケーション間で一意とは限りません。
属性表
a T_APPQTRANS クラスの属性はすべてローカル属性です。 b T_APPQTRANS オブジェクト―GET および SET―対応するキュー・スペースを自動的にオープンします。キュー・スペースの状態が OPEn または ACTive 以外の場合、暗黙的に OPEn に設定します。キュー・スペースが大きい場合、この操作には大変時間がかかります。 c 1 つのアプリケーション・キュー・スペースを明示的に指定するには、GET 操作の際に適切なキー・フィールドを設定する必要があります。 属性の意味
HABort |
トランザクションをヒューリスティックにアボートします。正常終了の場合は、オブジェクトは HABort 状態になります。 |
HCOmmit |
トランザクションをヒューリスティックにコミットします。正常終了の場合は、オブジェクトは HCOmmit 状態になります。 |
APPQ_MIB(5) に関する追加情報
移植性
BEA Tuxedo システムの MIB を使用した管理作業をサポートするために必要な既存の FLM32 関数および ATMI 関数、そして本マニュアル・ページに記述するヘッダ・ファイルとフィールド・テーブルは、すべてのサポート対象ネイティブ・プラットフォームおよびワークステーション・プラットフォームで利用可能です。
相互運用性
この MIB は、リリース 6.0 以降の BEA Tuxedo を使用しているサイトでのネイティブおよびワークステーションだけに提供されます。
リリース 6.0 以前の BEA Tuxedo システムのリリースを動作させているサイトがアプリケーションでアクティブな場合は、本 MIB による管理アクセスは以下のように制限されます。
リリースが異なるサイト (共にリリース 6.0 以降) が相互運用を行う場合、当該リリースの MIB マニュアル・ページに定義されるように、旧サイト上の情報はアクセスおよび更新に利用可能で、以降のリリースで利用可能な情報のサブセットとなります。
使用例
以下に、アプリケーション・キュー・スペース、キュー、メッセージ、およびトランザクションに対する各種操作の実行方法を示すコードを示します。
各コードの前には、以下のように、FML32 型付きバッファを割り当てるコードを追加してください。
rqbuf = tpalloc("FML32", NULL, 0);
バッファにデータを入力した後、各コードの後には、以下のような、要求を送信し応答を受信するコードを追加します
flags = TPNOTRAN | TPNOCHANGE | TPSIGRSTRT;
rval = tpcall(".TMIB", rqbuf, 0, rpbuf, rplen, flags);
詳細については、MIB(5) を参照してください。
フィールド・テーブル
属性フィールド識別子にアクセスするには、フィールド・テーブル tpadm が環境中で利用可能でなければなりません。そのために、以下のようにシェルで入力します。
$ FIELDTBLS=tpadm
$ FLDTBLDIR=${TUXDIR}/udataobj
$ export FIELDTBLS FLDTBLDIR
ヘッダ・ファイル
以下のヘッダ・ファイルが必要です。
#include <atmi.h>
#include <fml32.h>
#include <tpadm.h>
ライブラリ
${TUXDIR}/lib/libtmib.a、${TUXDIR}/lib/libqm.a、${TUXDIR}/lib/libtmib.so.<rel>、${TUXDIR}/lib/libqm.so.<rel>、${TUXDIR}/lib/libqm.lib
buildclient を使用するときは、ライブラリを手動でリンクしなければなりません。次のように使用してください。
-L${TUXDIR}/lib -ltmib -lqm
アプリケーション・キュー・スペースの作成
通常アプリケーション・キュー・スペースを作成するには 2 つの操作が必要です。最初の操作でキュー・スペースを割り当てる BEA Tuxedo システム・デバイスを作成し、次の操作でキュー・スペース自体を作成します。
/* 上記を参照してバッファを割り当てる */
/* SITE1 に新しいデバイスを作成する要求を作成 */
Fchg32(rqbuf, TA_OPERATION, 0, "SET", 0);
Fchg32(rqbuf, TA_CLASS, 0, "T_DEVICE", 0);
Fchg32(rqbuf, TA_STATE, 0, "NEW", 0);
Fchg32(rqbuf, TA_CFGDEVICE, 0, "/dev/q/dsk001", 0);
Fchg32(rqbuf, TA_LMID, 0, "SITE1", 0);
size = 500;
Fchg32(rqbuf, TA_DEVSIZE, 0, (char *)size, 0);
/* 上記を参照して要求を作成 */
/* 再使用のため、同じバッファを再度初期化する */
Finit32(rqbuf, (FLDLEN) Fsizeof32(rqbuf));
/* キュー・スペースを作成する要求を作成 */
Fchg32(rqbuf, TA_OPERATION, 0, "SET", 0);
Fchg32(rqbuf, TA_CLASS, 0, "T_APPQSPACE", 0);
Fchg32(rqbuf, TA_STATE, 0, "NEW", 0);
Fchg32(rqbuf, TA_APPQSPACENAME, 0, "QSPACE1", 0);
Fchg32(rqbuf, TA_QMCONFIG, 0, "/dev/q/dsk001", 0);
Fchg32(rqbuf, TA_LMID, 0, "SITE1", 0);
Fchg32(rqbuf, TA_ERRORQNAME, 0, "errque", 0);
ipckey = 123456;
Fchg32(rqbuf, TA_IPCKEY, 0, (char *)ipckey, 0);
maxmsg = 100;
Fchg32(rqbuf, TA_MAXMSG, 0, (char *)maxmsg, 0);
maxpages = 200;
Fchg32(rqbuf, TA_MAXPAGES, 0, (char *)maxpages, 0);
maxproc = 50;
Fchg32(rqbuf, TA_MAXPROC, 0, (char *)maxproc, 0);
maxqueues = 10;
Fchg32(rqbuf, TA_MAXQUEUES, 0, (char *)maxqueues, 0);
maxtrans = 100;
Fchg32(rqbuf, TA_MAXTRANS, 0, (char *)maxtrans, 0);
/* 上記を参照して要求を作成 */
アプリケーション・キュー・スペースへのキューの追加
以下のコードは、上の例で作成したキュー・スペースに新規にキューを作成します。
/* 要求を作成 */
Fchg32(rqbuf, TA_OPERATION, 0, "SET", 0);
Fchg32(rqbuf, TA_CLASS, 0, "T_APPQ", 0);
Fchg32(rqbuf, TA_STATE, 0, "NEW", 0);
Fchg32(rqbuf, TA_APPQNAME, 0, "errque", 0);
Fchg32(rqbuf, TA_APPQSPACENAME, 0, "QSPACE1", 0);
Fchg32(rqbuf, TA_QMCONFIG, 0, "/dev/q/dsk001", 0);
Fchg32(rqbuf, TA_LMID, 0, "SITE1", 0);
Fchg32(rqbuf, TA_APPQORDER, 0, "PRIO", 0);
/* 上記を参照して要求を作成 */
アプリケーションが認識しているアプリケーション・キュー・スペースの一覧表示
アプリケーションが認識しているアプリケーション・キュー・スペースを一覧表示するには、2 段階の検索を行います。まず、/Q トランザクション・マネージャ TMS_QM を使用するグループがアプリケーション環境設定から検索され、次に各グループが参照しているキュー・スペースが検索されます。以下のコードは、キュー・スペースを使用する各 GROUP エントリに 1 つの論理マシンが対応付けられていると仮定します (つまり、サーバ移行は未使用)。
アプリケーションが認識しているアプリケーション・キュー・スペースの一覧表示
/* すべての TMS_QM グループを検索する要求を作成 */
Fchg32(rqbuf, TA_OPERATION, 0, "GET", 0);
Fchg32(rqbuf, TA_CLASS, 0, "T_GROUP", 0);
Fchg32(rqbuf, TA_TMSNAME, 0, "TMS_QM", 0);
fldid1 = TA_OPENINFO;
fldid2 = TA_LMID;
Fchg32(rqbuf, TA_FILTER, 0, (char *)fldid1, 0);
Fchg32(rqbuf, TA_FILTER, 0, (char *)fldid2, 1);
/* アプリケーションに参加したと想定して要求を作成 */
rval = tpcall(".TMIB", rqbuf, 0, rpbuf, rplen, flags);
/* 各 TMS_QM グループに対して、キュー・スペースを検索する要求を作成 */
rval = Fget32(*rpbuf, TA_OCCURS, 0, (char *)occurs, NULL);
for (i = 0; i occurs; i++) {
/* バッファを初期化して、すべての共通属性を設定 */
Finit32(rqbuf, (FLDLEN) Fsizeof32(rqbuf));
Fchg32(rqbuf, TA_OPERATION, 0, "GET", 0);
Fchg32(rqbuf, TA_CLASS, 0, "T_APPQSPACE", 0);
/* デバイスとキュー・スペース名を決める OPENINFO を取得 */
/* OPENINFO の形式は、<resource-mgr>:<qmconfig>:<appqspacename>、*/
/* Windows の場合は、<resource-mgr>:<qmconfig>;<appqspacename> */
rval = Fget32(rpbuf, TA_OPENINFO, i, openinfo, NULL);
/* デバイスは OPENINFO の 2 つ目のフィールド */
qmconfig = strchr(openinfo, ':') + 1;
/* キュー・スペース名は OPENINFO の 3 つ目のフィールド */
#if defined(_TMDOWN) || defined(_TM_NETWARE)
#define pathsep ";" /*PATH の区切り文字 */
#else
#define pathsep ":"/* PATH の区切り文字 */
#endif
appqspacename = strchr(qmconfig, pathsep);
appqspacename[0] = '¥e0'; /* qmconfig をヌルで終了するように指定 */
appqspacename++; /* ヌルに値を追加 */
/* APPQSPACENAME および QMCONFIG キーを設定 */
Fchg32(rqbuf, TA_APPQSPACENAME, 0, appqspacename, 0);
Fchg32(rqbuf, TA_QMCONFIG, 0, qmconfig, 0);
/* LMID を取得 (このグループに対する移行はないものとする) */
rval = Fget32(rpbuf, TA_LMID, i, lmid, NULL);
Fchg32(rqbuf, TA_LMID, 0, lmid, 0);
/* 要求を作成 */
rval = tpcall(".TMIB", rqbuf, 0, rpbuf2, rplen2, flags);
}
上記のコードでは、キュー・スペースが作成されていても、アプリケーションのコンフィギュレーションに対応する GROUP エントリがないと、キュー・スペースは検索されません。このようなキュー・スペースは、キュー・スペースのキー・フィールド (つまり、TA_APPQSPACENAME、TA_QMCONFIG、および TA_LMID) の優先順位がわかっていないと検索できません。
アプリケーション・キュー内のメッセージの一覧表示
以下のコードは、論理デバイス SITE1 上のデバイス /dev/q/dsk001 のキュー・スペース QSPACE1 内のキュー STRING にあるメッセージをすべて検索します。
/* 要求を作成 */ Fchg32(rqbuf, TA_OPERATION, 0, "GET", 0);
Fchg32(rqbuf, TA_CLASS, 0, "T_APPQMSG", 0);
Fchg32(rqbuf, TA_APPQNAME, 0, "STRING", 0);
Fchg32(rqbuf, TA_APPQSPACENAME, 0, "QSPACE1", 0);
Fchg32(rqbuf, TA_QMCONFIG, 0, "/dev/q/dsk001", 0);
Fchg32(rqbuf, TA_LMID, 0, "SITE1", 0);
/* 上記を参照して要求を作成 */
キュー・スペースを使用するトランザクションの一覧表示
以下のコードは、キュー・スペース QSPACE1 の中の任意のキューを使用するトランザクションをすべて検索します。
/* 要求を作成 */ Fchg32(rqbuf, TA_OPERATION, 0, "GET", 0);
Fchg32(rqbuf, TA_CLASS, 0, "T_APPQTRANS", 0);
Fchg32(rqbuf, TA_APPQSPACENAME, 0, "QSPACE1", 0);
Fchg32(rqbuf, TA_QMCONFIG, 0, "/dev/q/dsk001", 0);
Fchg32(rqbuf, TA_LMID, 0, "SITE1", 0);
/* 上記を参照して要求を作成 */
ファイル
${TUXDIR}/include/tpadm.h
${TUXDIR}/udataobj/tpadm
関連項目
tpacall(3c)、tpadmcall(3c)、tpalloc(3c)、tpcall(3c)、tpdequeue(3c)、tpenqueue(3c)、tpgetrply(3c)、tprealloc(3c)、FML 関数の紹介、Fadd、Fadd32(3fml)、Fchg、Fchg32(3fml)、Ffind、Ffind32(3fml)、MIB(5)、TM_MIB(5)
『BEA Tuxedo アプリケーションの設定』
『BEA Tuxedo アプリケーション実行時の管理』
『C 言語を使用した BEA Tuxedo アプリケーションのプログラミング』
『FML を使用した BEA Tuxedo アプリケーションのプログラミング』
![]() |
![]() |
![]() |
|
Copyright © 2001 BEA Systems, Inc. All rights reserved.
|