ToolTalk ユーザーズガイド

メッセージの属性

ToolTalk メッセージには、メッセージ情報を格納して配信情報を ToolTalk サービスに提供する属性が含まれています。配信情報は、メッセージを適切な受信側へルーティングするために使用されます。

ToolTalk メッセージは、アドレス、サブジェクト (「操作」や「引数」など)、および配信情報 (「クラス」や「配信範囲」など) の属性を含む単純な構造体です。メッセージの属性を表 8-1 に示します。

表 8-1 ToolTalk メッセージの属性

メッセージの属性 

値 

機能 

使用できる人 

引数 

引数または結果 

操作に使用する引数を指定する。メッセージが応答である場合、これらの引数は操作の結果を含む 

送信側と受信側 

クラス 

TT_NOTICE, TT_REQUEST, TT_OFFER

受信側が操作を実行する必要があるかどうかを指定する 

送信側 

ファイル 

char *pathname

操作に関連するファイルを指定する。メッセージの配信範囲がファイルに関係しない場合、このメッセージ属性は無効である 

送信側と ToolTalk 

オブジェクト 

char *objid

操作に関係するオブジェクトを指定する 

送信側と ToolTalk 

操作 

char *opname

実行する操作名を指定する 

送信側 

otype 

char *otype

操作に関係するオブジェクトの型を指定する 

送信側と ToolTalk 

アドレス 

TT_PROCEDURE, TT_OBJECT, TT_HANDLER, TT_OTYPE

メッセージを送信する場所を指定する 

送信側 

ハンドラ 

char *procid

受信側プロセスを指定する 

送信側と ToolTalk 

handler_ptype 

char *ptype

受信側プロセスの型を指定する 

送信側と ToolTalk 

処置 

TT_DISCARD, TT_QUEUE, TT_START

TT_START+TT_QUEUE

実行中のプロセスがメッセージを受信できない場合に取るべき手段を指定する 

送信側と ToolTalk 

配信範囲 

TT_SESSION, TT_FILE, TT_BOTH, TT_FILE_IN_SESSION

セッションまたはファイルに対して登録された内容に基づいて、受信する可能性のあるアプリケーションを指定する 

送信側と ToolTalk 

sender_ptype 

char *ptype

送信側プロセスの型を指定する 

送信側と ToolTalk 

セッション 

char *sessid

送信側プロセスのセッションを指定する 

送信側と ToolTalk 

状態 

int status, char *status_str

メッセージの状態に関する追加情報を指定する 

受信側と ToolTalk 

アドレス属性

他のアプリケーションにアドレス指定されたメッセージは、特定のプロセス、またはメッセージに一致するパターンを登録してあるプロセスにアドレス指定できます。メッセージをプロセスにアドレス指定するときは、他のアプリケーションのプロセス ID (procid) を知っている必要があります。ただしプロセスは、通常は互いの procid を知りません。ほとんどの場合、送信側はどのプロセスが操作 (要求メッセージ) を実行するのか、またはどのプロセスがイベント (通知メッセージ) を認識するのかを知らなくてもかまいません。

配信範囲属性

通常、ToolTalk サービスを使用して通信するアプリケーションには共通点があります。アプリケーションが同じセッションで実行されていたり、同じファイルまたはデータを対象としていたりします。アプリケーションは、処理の対象を登録するために、ToolTalk サービスにセッションまたはファイル (あるいはその両方) を結合します。ファイル情報とセッション情報は、メッセージパターンが指定された ToolTalk サービスが、メッセージを受信するアプリケーションを判定するために使用します。


注 -

配信範囲属性機能を使用できるのは、NFS ファイルシステムと UFS ファイルシステムだけです。tmpfs ファイルシステムでは、ファイルへの配信範囲は指定できません。


ファイル配信範囲

メッセージをファイルに配信範囲指定した場合は、そのファイルを結合している (かつ残りの属性に一致している) アプリケーションだけがメッセージを受信します。1 つのファイルを処理の対象として共有するアプリケーションは、同じセッションで実行している必要はありません。

パターンへの設定

メッセージがファイル配信範囲であることをパターンに指定する際、使用できる型を表 8-2 に示します。

表 8-2 メッセージのファイル配信範囲をパターンに指定する際の型

配信範囲の型 

説明 

TT_FILE

指定したファイルだけを配信範囲とする。同時にセッション属性も設定すればセッション中のファイルと同様な配信範囲を指定できるが、配信範囲が TT_FILE になっていると、tt_session_join を呼び出してもそのパターンのセッション属性は更新されない

TT_BOTH

処理の対象となるファイルとセッションの「論理和」を配信範囲とする。ファイル、セッション、またはその両方を配信範囲とするメッセージに一致するのは、この配信範囲を指定したパターンだけである 

TT_FILE_IN_SESSION

処理の対象となるファイルとセッションの「論理積」を配信範囲とする。ファイルとセッションを同時に配信範囲とするメッセージにだけ一致するのは、この配信範囲を指定したパターンだけである 

TT_FILE_IN_SESSIONTT_SESSION の論理和を配信範囲に指定するには、例 8-1 のように両方の配信範囲を同じパターンに追加します。


例 8-1 TT_FILE_IN_SESSIONTT_SESSION の論理和を配信範囲に指定する場合

	tt_open();

	Tt_pattern pat = tt_create_pattern();
	tt_pattern_scope_add(pat, TT_FILE_IN_SESSION);
	tt_pattern_scope_add(pat, TT_SESSION);
	tt_pattern_file_add(pat, file);
	tt_pattern_session_add(pat, tt_default_session());
	tt_pattern_register(pat);


メッセージへの設定

メッセージのファイル配信範囲の型も、パターンと同じです。この型を表 8-3 に示します。

表 8-3 メッセージ用の配信範囲

配信範囲の型 

説明 

TT_FILE

処理対象のファイルを登録した全クライアントをメッセージの配信範囲とする 

TT_BOTH

処理対象のセッション、ファイル、またはセッションとファイルの両方を登録した全クライアントをメッセージの配信範囲とする 

TT_FILE_IN_SESSION

処理対象のファイルとセッションを同時に登録した全クライアントをメッセージの配信範囲とする 

TT_SESSION + tt_message_file_set()

処理対象のセッションを登録した全クライアントをメッセージの配信範囲とする。パターンが一致するクライアントは、メッセージを受信すると tt_message_file を呼び出して、そのファイル名を入手できる

メッセージの配信範囲が TT_FILE または TT_BOTH の場合は、ToolTalk クライアントライブラリが、そのファイルを処理対象とするクライアントのセッションをデータベースサーバーからすべて探し出し、それらの ToolTalk セッションにメッセージを送信します。ToolTalk セッションは、その後でメッセージとクライアントを照合します。メッセージの送信側は、tt_file_join を明示的に呼び出す必要はありません。

配信範囲が TT_FILE_IN_SESSION または TT_SESSION のメッセージにファイルを指定しても、ToolTalk データベースサーバーには連絡されず、メッセージは指定したセッション配信範囲のクライアントにしか送信されません。

セッション配信範囲

メッセージをセッションに配信範囲指定した場合は、そのセッションに接続しているアプリケーションだけが受信可能側であると見なされます。


例 8-2 セッションの設定

Tt_message m= tt_message_create();
tt_message_scope_set(m, TT_SESSION);
tt_message_file_set(m, file);


最初の行でメッセージを作成しています。2 行目ではメッセージの配信範囲を追加し、3 行目ではメッセージの範囲に影響を与えないファイル属性を追加しています。

セッション中のファイル配信範囲

アプリケーションは、メッセージ配信範囲として TT_FILE_IN_SESSION を指定することによって、メッセージ配布の範囲をかなり限定できます。指定したファイルとセッションの両方を結合しているアプリケーションだけが受信可能側であると見なされます。

また、アプリケーションは、メッセージのセッションを処理対象として登録しているすべてのクライアントを、TT_SESSIONtt_message_file_set を指定することによって、メッセージの配信範囲とすることもできます。パターンが一致するクライアントがメッセージを受信した場合、その受信側クライアントは tt_message_file を呼び出すことによってファイル名を取得できます。


例 8-3 ファイルの設定

Tt_message m= tt_message_create();
tt_message_scope_set(m, TT_FILE_IN_SESSION);
tt_message_file_set(m, file);


最初の行でメッセージを作成しています。2 行目ではメッセージの配信範囲を追加し、3 行目ではメッセージ配信範囲にファイルを追加しています。

構造化データのシリアル化

ToolTalk サービスではメッセージ引数のデータ型として、整数、NULL 終了文字列、バイト文字列の 3 種類をサポートしています。

ToolTalk メッセージで他のデータ型を送信する際、クライアントはデータをシリアル化して文字列またはバイト文字列に変換し、受信時はそのシリアル化を解除しなければなりません。今回の ToolTalk サービスとともに新しく提供する XDR 引数 API 呼び出しでは、これらの処理を関数として提供します。クライアントが用意するのは、XDR ルーチンとデータへのポインタだけです。ToolTalk サービスは、データをシリアル化して内部バッファに入れた後、そのデータをバイトストリームと同じように処理します。