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()を参照してください。
ノート:
- 『Oracle Tuxedo ATMI C関数リファレンス』の
tpinit(3c)に関する項
親トピック: クライアントのコーディング