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)
に関する項
親トピック: クライアントのコーディング