BEA Logo BEA Tuxedo Release 8.0

  BEA ホーム  |  イベント  |  ソリューション  |  パートナ  |  製品  |  サービス  |  ダウンロード  |  ディベロッパ・センタ  |  WebSUPPORT

 

   Tuxedoホーム   |   BEA Tuxedo C リファレンス   |   先頭へ   |   前へ   |   次へ   |   目次

 


tpinit(3c)

名前

tpinit()-アプリケーションへの参加

形式

#include <atmi.h>
int tpinit(TPINIT *tpinfo)

機能説明

tpinit() は、クライアントが BEA Tuxedo ATMI システムのアプリケーションに参加するときに使用します。BEA Tuxedo ATMI システムのコミュニケーションあるいはトランザクション・ルーチンをクライアントが使用する前には、あらかじめクライアントは BEA Tuxedo ATMI システムのアプリケーションに参加しなければなりません。

tpinit() には、シングルコンテキスト・モードとマルチコンテキスト・モードの 2 つの操作モードがあります。次にこれについて説明します。シングルコンテキスト・モードでは tpinit() の呼び出しはオプションのため、シングルコンテキストのクライアントは、tpinfo をヌルに設定して tpinit() を透過的に呼び出す多くの ATMI ルーチン (たとえば、tpcall()) を呼び出すことによって、アプリケーションに参加することもできます。クライアントは、tpinit() を直接呼び出して、後に示すパラメータを設定する必要がある場合があります。また、マルチコンテキスト・モードが必要な場合、アプリケーションの認証が必要な場合 (UBBCONFIG(5) の SECURITY キーワードの説明を参照)、またはアプリケーションが独自のバッファ・タイプ・スイッチを提供する場合 (typesw(5) を参照) は、tpinit() を使用しなければなりません。tpinit() が正常に終了した場合は、クライアントはサービス要求を開始し、トランザクションを定義できます。

シングルコンテキスト・モードでは、tpinit() を 2 回以上呼び出す場合 (つまり、クライアントが既にアプリケーションに参加した後に呼び出す場合) は、何もアクションは実行されず、成功を示す戻り値が返されます。

マルチスレッド・クライアントの場合、TPINVALIDCONTEXT 状態のスレッドは tpinit() の呼び出しを発行できません。BEA Tuxedo ATMI アプリケーションに参加するには、マルチスレッドのワークステーション・クライアントは、たとえシングルコンテキスト・モードで動作している場合でも、必ず TPMULTICONTEXTS フラグを設定して tpinit() 関数を呼び出さなければなりません。

注記 TMNOTHREADS 環境変数を yes に設定しても、 tpinit の TPMULTICONTEXTS モードは正しく動作します。この環境変数を yes に設定すると、スレッドを使用しないアプリケーションでマルチスレッド処理が無効になります。

TPINFO 構造体の説明

tpinit() の引数 tpinfo は、TPINIT タイプおよび NULL サブタイプの型付きバッファを指すポインタです。TPINIT はバッファ・タイプであり、ヘッダ・ファイル atmi.h に typedef で定義されています。このバッファは、tpinit() を呼び出す前に tpalloc() で割り当てなければなりません。このバッファの解放は、tpinit() の呼び出しの後、tpfree() を使用して行います。TPINIT 型付きバッファ構造体は次のようなメンバで構成されています。

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

usrname、cltname、grpname、および passwd はすべて NULL で終了する文字列です。usrname は呼び出し元を表す名前です。cltname は、その意味付けがアプリケーション側で定義されているクライアント名です。値 sysclient は、cltname フィールド用にシステムによって予約されています。usrname と cltname フィールドは、tpinit() 実行時にクライアントと関連付けられ、ブロードキャスト通知と管理統計情報の検索に使用されます。これらの名前は、MAXTIDENT の文字数を超えてはなりません。MAXTIDENT は 30 字に定義されています。passwd は、アプリケーション・パスワードとの認証に使用される非暗号化形式のアプリケーション・パスワードです。一方通行の暗号化方式に関する UNIX システムの制限から、passwd は8文字までしか意味をもちません。grpname は、クライアントをリソース・マネージャ・グループ名と関連付けるときに使用します。grpname が長さ 0 の文字列として設定されている場合は、クライアントはリソース・マネージャに関連付けられず、デフォルトのクライアント・グループに含まれます。ワークステーション・クライアントの場合、この値は NULL 文字列 (長さが 0 の文字列) でなければなりません。grpname は ACL グループとは関連がないことに注意してください。

シングルコンテキスト・モードとマルチコンテキスト・モード

tpinit() には、シングルコンテキスト・モードとマルチコンテキスト・モードの 2 つの操作モードがあります。シングルコンテキスト・モードでは、プロセスは 1 度に 1 つのアプリケーションに参加できます。このアプリケーションには、複数のアプリケーション・スレッドがアクセスできます。シングルコンテキスト・モードを指定するには、ヌルのパラメータを指定した tpinit() を呼び出すか、TPINIT 構造体の flags フィールドに TPMULTICONTEXTS フラグを指定せずに tpinit() を呼び出します。また、tpinit() が別の ATMI 関数によって暗黙的に呼び出されたときも、シングルコンテキスト・モードが指定されます。シングルコンテキスト・モードで動作するプロセスのコンテキスト状態は、TPSINGLECONTEXT です。

注記 TMNOTHREADS 環境変数を "yes" に設定しても、tpinit の TPMULTICONTEXTS モードは正しく機能します。

シングルコンテキスト・モードでは、tpinit() を 2 回以上呼び出す場合 (つまり、クライアントが既にアプリケーションに参加した後に呼び出す場合) は、何もアクションは実行されず、成功を示す戻り値が返されます。

TPINIT 構造体の flags フィールドに TPMULTICONTEXTS フラグを設定して tpinit() を呼び出すと、マルチコンテキスト・モードに移行します。マルチコンテキスト・モードでは、tpinit() を呼び出すたびに別のアプリケーション関連が作成されます。

アプリケーションの関連とは、プロセスと BEA Tuxedo ATMI アプリケーションを関連付けるコンテキストです。クライアントは、複数の BEA Tuxedo ATMI アプリケーションの関連を持ったり、同じアプリケーションに対して複数の関連を持つことができます。クライアントの関連は、すべて同じリリースの BEA Tuxedo ATMI システムを実行するアプリケーションに対する関連でなくてはなりません。また、すべての関連はネイティブ・クライアントかワークステーション・クライアントのいずれかでなければなりません。

ネイティブ・クライアントの場合、新しい関連を作成するときに TUXCONFIG 環境変数の値を使ってアプリケーションを識別します。ワークステーション・クライアントの場合、新しい関連を作成するときに WSNADDR または WSENVFILE 環境変数の値を使ってアプリケーションを識別します。カレント・スレッドのコンテキストは、新しい関連に設定されます。

マルチコンテキスト・モードでは、アプリケーションは tpgetctxt() を呼び出してカレント・コンテキストのハンドルを取得し、そのハンドルをパラメータとして tpsetctxt() に渡し、特定のスレッドまたはプロセスが動作するコンテキストを設定することができます。

シングルコンテキスト・モードとマルチコンテキスト・モードの両方を使用することはできません。アプリケーションがどちらかのモードを選択した場合、すべてのアプリエケーション関連で tpterm() が呼び出されるまで、他のモードで tpinit() を呼び出すことはできません。

TPINFO 構造体フィールドの説明

マルチコンテキスト・モードとシングルコンテキスト・モードを制御するほかに、flags の設定により、クライアント固有の通知メカニズムとシステム・アクセスのモードの両方を示すことができます。この 2 つの設定で、アプリケーションのデフォルト設定を上書きすることができます。これらの設定でアプリケーションのデフォルトを上書きできない場合、tpinit() はログ・ファイルに警告メッセージを記録し、その設定を無視して、tpinit() からの戻り時に flags フィールドの設定をアプリケーションのデフォルト設定に戻します。クライアントへの通知の場合、flags の値として次のものがあります。

TPU_SIG

シグナルによる任意通知を選択します。このフラグは、シングルスレッド、シングルコンテキストのアプリケーション専用です。TPMULTICONTEXTS フラグが設定されている場合、このフラグは使用できません。

TPU_DIP

ディップ・インによる任意通知を選択します。

TPU_THREAD

BEA Tuxedo ATMI システムが管理する独立したスレッドで、THREAD 通知を選択します。このフラグは、マルチスレッドをサポートするプラットフォーム専用です。マルチスレッドをサポートしていないプラットフォームで TPU_THREAD が指定されると、無効な引き数と見なされ、エラーが返されて tperrno() が TPEINVAL に設定されます。

TPU_IGN

任意通知を無視します。

一度に上記の中から1つのフラグだけを使用できます。クライアントがフラグ・フィールドを使用して通知方法を選択しない場合、アプリケーションのデフォルトの方法が、tpinit() の終了時にフラグ・フィールドに設定されます。

システム・アクセス・モードの設定の場合、flags の値として次のものがあります。

TPSA_FASTPATH

システム・アクセス・モードを fastpath に設定します。

TPSA_PROTECTED

システム・アクセス・モードを protected に設定します。

一度に上記の中から1つのフラグだけを使用できます。クライアントが通知方法あるいはシステム・アクセス・モードをフラグ・フィールドで選択しない場合、tpinit() の終了時にアプリケーションのデフォルトの方法がフラグ・フィールドに設定されます。クライアントの通知方法とシステム・アクセス・モードの詳細については、UBBCONFIG(5) を参照してください。

アプリケーションがマルチスレッドまたはマルチコンテキストを使用する場合は、次のフラグを設定する必要があります。

TPMULTICONTEXTS

「シングルコンテキスト・モードとマルチコンテキスト・モード」の説明を参照してください。

datalen は、それに続くアプリケーション固有のデータの長さです。TPINIT 型付きバッファのバッファ・タイプ・スイッチ・エントリは、そのバッファに対して渡される合計サイズに基づいてこのフィールドを設定します (アプリケーション・データのサイズは、合計サイズから TPINIT 構造体自体のサイズを差し引き、構造体に定義されているプレース・ホルダのサイズを加えたものです)。data は、アプリケーションで定義された認証サービスに転送される可変長データ用のプレース・ホルダです。これは常に、この構造体の最後の要素となります。

マクロ TPINITNEED は、目的のアプリケーション固有のデータ長を収めるのに必要とされる TPINIT のバッファのサイズを判別するときに使用できます。たとえば、アプリケーション固有のデータを 8 バイトにしたい場合、TPINITNEED(8) は必要とされる TPINIT のバッファ・サイズを返します。

アプリケーションが BEA Tuxedo ATMI システムの認証機能を使用しない場合には、tpinfo に NULL 値を使用できます。NULL 引数を使用するクライアント・プロセスは、usrname、cltname、および passwd についてはデフォルトの設定である長さ 0 の文字列を獲得します。フラグは設定されず、アプリケーション・データも得られません。

戻り値

異常終了すると、tpinit() は呼び出しプロセスを元のコンテキストに維持したまま -1 を返し、tperrno を設定してエラー条件を示します。また tpurcode() は、AUTHSVR(5) サーバによって返される値に設定されます。

エラー

異常終了時には、tpinit() は tperrno() を次のいずれかの値に設定します。

[TPEINVAL]

無効な引き数が指定されていました。tpinfo は NULL でありませんが、TPINIT 型付きバッファを指していません。

[TPENOENT]

領域制限のため、クライアントはアプリケーションに参加できません。

[TPEPERM]

クライアントは、パーミッションを持たないため、または正しいアプリケーション・パスワードが与えられていないために、アプリケーションに参加できません。許可が与えられない理由として、アプリケーション・パスワードが無効であった場合、アプリケーション固有の認証検査にパスできない場合、あるいは禁止されている名前を使用した場合などがあります。tpurcode() は、クライアントがアプリケーションに参加できない理由を説明するため、アプリケーション固有の認証サーバによって設定される場合があります。

[TPEPROTO]

tpinit() が不正に呼び出されました。たとえば、(a) 呼出し元がサーバである、(b) シングルコンテキスト・モードで TPMULTICONTEXTS フラグが指定されている、または (c) マルチコンテキスト・モードで TPMULTICONTEXTS フラグが指定されていない場合があります。

[TPESYSTEM]

BEA Tuxedo システムのエラーが発生しました。エラーの正確な内容はログ・ファイルに書き込まれます。

[TPEOS]

オペレーティング・システムのエラーが発生しました。

相互運用性

tpchkauth() および、tpinit() の TPINIT タイプのバッファ引数に対する NULL 以外の値は、リリース 4.2 またはそれ以降を使用しているサイトでしか使用できません。

移植性

tpinit(3c) に記述されているインターフェイスは、UNIX システム、Windows および MS-DOS オペレーティング・システム上でサポートされています。ただし、シグナル・ベースの通知方法は、16 ビットの Windows および MS-DOS ではサポートされていません。tpinit() の実行時にこの通知方法が選択されると、userlog() メッセージが生成され、通知方式は自動的にディップインに設定されます。

環境変数

TUXCONFIG

ネイティブ・クライアントによって起動されたときに tpinit() 内で使用されます。クライアントが接続するアプリケーションを示します。なお、この環境変数は、tpinit() が呼び出されたときのみ参照されます。これ以降の呼び出しには、アプリケーション・コンテキストが使用されます。

WSENVFILE

ワークステーション・クライアントが呼び出すときに tpinit() 内で使用されます。この変数には、環境変数の設定条件を収めたファイルを指定しますが、この設定は呼び出し元の環境で行うようにします。ワークステーション・クライアントに必要とされる環境変数の設定に関する詳細については、compilation(5) を参照してください。なお、このファイルは、tpinit() が呼び出されるとき (その前ではなく) にのみ処理されます。

WSNADDR

ワークステーション・クライアントが呼び出すときに tpinit() 内から使用されます。これは、アプリケーションをアクセスするときに使用されるワークステーション・リスナ・プロセスのネットワーク・アドレスを示します。この変数はワークステーション・クライアントの場合は必須で、ネイティブ・クライアントの場合は無視されます。

TCP/IP アドレスは次の形式で指定します。

//host.name:port_number
//#.#.#.#:port_number

最初の形式では、ドメインはローカル・ネーム解決機能 (通常DNS) を使って、hostname のアドレスを見つけます。hostname はローカル・マシンでなければならず、ローカル・ネーム解決機能は、ローカル・マシンのアドレスへ hostname を解決しなければなりません。

2 番目文字列 #.#.#.# はドットで区切った 10 進数の形式です。ドットで区切った 10 進数の形式では、各 # は 0 から 255 までの数でなければなりません。このドットで区切った 10 進数は、ローカル・マシンの IP アドレスを表現します。

上記両方の形式で、port_number はドメイン・プロセスが着信要求をリスンする TCP ポート番号です。port_number は 0 から 65535 の間の数字または名前です。port_number が名前の場合は、ローカル・マシンのネットワーク・サービス・データベースになければなりません。

アドレスは、先頭に 0x がついている場合は、16 進形式で指定することもできます。0x の後の各文字は、0 から 9 までの数字か、A から F までの英字 (大文字・小文字に関係なく) です。16 進数の形式は、IPX/SPX や TCP/IP のような任意のバイナリ・ネットワーク・アドレスに使うことができます。

アドレスはまた、任意の文字列として指定することもできます。値は、コンフィギュレーション・ファイルの中の NETWORK セクションの NLSADDR パラメータに指定された値と同じでなければなりません。

WSNADDR アドレス用のコンマで区切られたパス名のリストを指定すると、複数のアドレスを指定することができます。接続が確立するまで順番にアドレス指定が試みられます。アドレス・リストのメンバは、どれでもパイプで区切られたネットワーク・アドレスのかっこ付きのグループとして指定することができます。

例:

WSNADDR=(//m1.acme.com:3050|//m2.acme.com:3050),//m3.acme.com:3050

Windows 下で実行するためには、アドレス文字列は以下のように表します。

set WSNADDR=(//m1.acme.com:3050^|//m2.acme.com:3050),//m3.acme.com:3050

パイプ記号 (|) は Windows では特殊文字と見なされるため、コマンド行で指定する場合は、Windows 環境のエスケープ文字、カラット (^) を前に付けます。ただし、envfile で WSNADDR が定義されている場合、BEA Tuxedo ATMI システムは tuxgetenv(3c) 関数を介して WSNADDR が定義する値を取得します。このコンテキストではパイプ記号 (|) は特殊記号と見なされないため、カラット (^) を前に付ける必要はありません。

BEA Tuxedo ATMI システムはかっこ付きアドレスを無作為に選択します。この方法は、一連のリスナ・プロセスに対してランダムに負荷分散します。接続が確立するまで順番にアドレス指定が試みられます。ワークステーション・リスナを呼び出すには、アプリケーションのコンフィギュレーション・ファイルの値を使用してください。この値が、"0x" で始まる文字列の場合は、16 進値文字列と解釈され、それ以外の場合は、ASCII 文字列と解釈されます。

WSFADDR

ワークステーション・クライアントが呼び出すときに tpinit() 内から使用されます。WSFADDR は、ワークステーション・クライアントがワークステーション・リスナまたはワークステーション・ハンドラに接続するときに使用するネットワーク・アドレスを指定します。この変数は、WSFRANGE 変数とともに、ワークステーション・クライアントが送信接続を確立する前にバインドする TCP/IP ポートの範囲を決めます。このアドレスは、TCP/IP アドレスでなければなりません。TCP/IP アドレスのポート部分は、ワークステーション・クライアントが TCP/IP ポート範囲でバインドできるベース・アドレスを表します。WSFRANGE 変数には、範囲のサイズを指定します。たとえば、このアドレスが //mymachine.bea.com:30000 で WSFRANGE が 200 の場合、この LMID から送信接続を確立しようとするネイティブ・プロセスは、すべて、mymachine.bea.com 3000 から 30200 の間のポートをバインドします。この変数が設定されていないと空の文字列にリセットされ、この場合はオペレーティング・システムによってローカル・ポートがランダムに選択されます。

WSFRANGE

ワークステーション・クライアントが呼び出すときに tpinit() 内で使用されます。この変数は、ワークステーション・クライアント・プロセスが、送信接続を確立する前にバインドを試みる TCP/IP ポートの範囲を指定します。WSFADDR パラメータは、範囲のベース・アドレスを指定します。たとえば、WSFADDR パラメータが //mymachine.bea.com:30000 で WSFRANGE が 200 に設定されている場合、この LMID から送信接続を確立するすべてのネイティブ・プロセスは、mymachine.bea.com 30000 から 30200 の間にあるポートをバインドします。有効範囲は 1 から 65535 で、デフォルト値は 1 です。

WSDEVICE

ワークステーション・クライアントが呼び出すときに tpinit() 内で使用されます。これは、ネットワークのアクセス時に使用するデバイス名を示します。この変数はワークステーション・クライアントが使用し、ネイティブ・クライアントの場合は無視されます。なお、ソケットや NetBIOS などトランスポート・レベルのネットワーク・インターフェイスはデバイス名を必要としません。このようなインターフェイスによってサポートされているワークステーション・クライアントは、WSDEVICE を指定する必要はありません。

WSTYPE

ワークステーション・クライアントが呼び出すときに tpinit() 内から使用され、ネイティブ・サイトとの間で符号化/復号化の責任範囲について調整を行います。この変数はワークステーション・クライアントの場合は省略可能で、ネイティブ・クライアントの場合は無視されます。

WSRPLYMAX

tpinit() によって使用され、アプリケーションの応答をファイルに格納する前にバッファに入れるために使用するコア・メモリの最大サイズを設定します。このパラメータのデフォルトは、256,000 バイトです。詳細については、プログラミング・マニュアルを参照してください。

TMMINENCRYPTBITS

BEA Tuxedo ATMI システムに接続するのに必要な暗号化の最小レベルを確立するときに使用されます。"0" は暗号化がないことを意味し、"56" と "128" は、暗号化キーのビット長を示します。後方互換のため、40 ビットのリンク・レベルの暗号化も使用できます。この最小レベルの暗号化が一致しない時は、リンクの確立は失敗します。デフォルトの値は "0" です。

TMMAXENCRYPTBITS

BEA Tuxedo ATMI システムに接続するときに、このレベルまで暗号化を調整するのに使用されます。"0" は暗号化のないことを意味し、"56" と "128" は暗号キーのビット長を示します。また後方互換のため、40 ビットのリンク・レベルの暗号化も使用できます。デフォルトの値は "128" です。

警告

シグナル・ベースの通知は、マルチコンテキスト・モードでは使用できません。また、シグナルの制約によって、クライアントがシグナル・ベースの通知を選択しても、システムがそれを使用できない場合があります。このような場合、システムは、選択されたクライアントに対する通知をディップ・インに切り替えることを示すログ・メッセージを生成し、クライアントはそれ以降ディップ・イン通知によって通知されます通知方式の詳細については、UBBCONFIG(5) の RESOURCES セクションの NOTIFY パラメータの説明を参照してください。

クライアントのシグナル通知は、必ずシステムによって行われるので、通知呼び出しの起動元がどこであっても、通知の動作は一貫しています。したがって、シグナル・ベースの通知を使用するには次の条件が必要です。

アプリケーション管理者の ID は、アプリケーション・コンフィギュレーションの一部として識別されます。

クライアントにシグナル・ベースの通知を選択すると、ある種の ATMI 呼び出しは正常に実行できないことがあります。このとき、TPSIGRSTRT の指定がない場合、任意通知型メッセージを受け取るため、TPGOTSIG が返されます。

関連項目

「C 言語アプリケーション・トランザクション・モニタ・インターフェイスについて」、tpgetctxt(3c)、tpsetctxt(3c)、tpterm(3c)

 

先頭へ戻る 前のトピックへ 次のトピックへ