4.1 アプリケーションへの参加

ATMIクライアントがサービスをリクエストする場合、Oracle Tuxedo ATMIアプリケーションに明示的または暗黙的に参加している必要があります。アプリケーションに参加すると、クライアントはリクエストを送り、その応答を受け取ることができるようになります。

クライアントが明示的にアプリケーションに参加するには、次のシグネチャを指定してtpinit(3c)関数を呼び出します:

int
tpinit (TPINIT *tpinfo)

クライアントがtpinit()関数を呼び出す前にサービス・リクエスト(またはATMI関数)を呼び出すと、暗黙的にアプリケーションに参加したことになります。その場合、tpinfo引数がNULLに設定されて、tpinit()関数がクライアントではなくOracle Tuxedoシステムによって呼び出されます。tpinfo引数は、タイプがTPINIT、サブタイプがNULLの型付きバッファを指します。TPINIT型バッファはatmi.hヘッダー・ファイルに定義されており、次の情報が格納されています。

char usrname[MAXTIDENT+2];
char cltname[MAXTIDENT+2];
char passwd[MAXTIDENT+2];
char grpname[MAXTIDENT+2];
long flags;
long datalen;
long data;

次の表は、TPINITデータ構造体のフィールドをまとめたものです。

表4-1 TPINITデータ構造体のフィールド

フィールド 説明
usrname クライアントを表す名前。ブロードキャスト通知と管理統計情報の検索に使用されます。クライアントは、tpinit()関数を呼び出すときにusrnameに値を設定します。この値には、最大文字数がMAXTIDENT (30文字)で、最後がNULLで終わる文字列を指定します。
cltname アプリケーション定義のセマンティクスに従ったクライアント名。30文字以内で最後がNULLで終わる文字列を指定します。ブロードキャスト通知と管理統計情報の検索に使用されます。クライアントは、tpinit()関数を呼び出すときにcltnameに値を設定します。この値には、最大文字数がMAXTIDENT (30文字)で、最後がNULLで終わる文字列を指定します。

ノート:

sysclientの値は、cltnameフィールド用に予約されています。
passwd 非暗号化形式のアプリケーション・パスワード。ユーザー認証に使用されます。30文字以内の文字列を指定します。
grpname クライアントをリソース・マネージャ・グループに関連付ける値。これが長さ0の文字列に設定されている場合、クライアントはリソース・マネージャに関連付けられず、デフォルトのクライアント・グループに属します。ワークステーション・クライアントの場合、grpnameの値にはNULL文字列(長さが0の文字列)を指定します。ワークステーション・クライアントの詳細は、『ATMIワークステーション・コンポーネントの使用』を参照してください。
flags クライアント固有の通知メカニズム、およびシステム・アクセスのモード。この値により、マルチコンテキスト・モードとシングル・コンテキスト・モードが制御されます。フラグの詳細は、「非請求通知の処理」、または『Oracle Tuxedo ATMI C言語関数リファレンス』のtpinit()を参照してください。
datalen アプリケーション固有データの長さ。TPINIT型バッファのバッファ・タイプ・スイッチ・エントリは、そのバッファに渡される合計サイズに基づいてこのフィールドを設定します。アプリケーション・データのサイズは、合計サイズからTPINIT構造体自体のサイズを差し引き、その値に構造体に定義されているデータ・プレースホルダーのサイズを加算したものです。
data アプリケーション定義の認証サービスに転送される可変長データ用のプレース・ホルダー。

クライアント・プログラムは、アプリケーションに参加する前にtpalloc()を呼び出してTPINITバッファを割り当てる必要があります。次のリストは、TPINITバッファを割り当て、そのバッファを使用してアプリケーション固有の8バイトのデータtpinit()関数に渡す方法を示しています。

TPINIT型バッファの割当てのリスト

. 
. 
. 
TPINIT *tpinfo; 
. 
. 
. 
if ((tpinfo = (TPINIT *)tpalloc("TPINIT",(char *)NULL, 
     TPINITNEED(8))) == (TPINIT *)NULL){ 
     Error Routine 
}

TPINIT型バッファの詳細は、『Oracle Tuxedo ATMI C言語関数リファレンス』のtpinit()を参照してください。

ノート: