# ToolTalkサービスの紹介

独自に開発されたアプリケーションが同時に動作することを要求するコンピュータ・ ユーザが増えてきているため、相互運用はソフトウェア開発者にとって重要なテーマに なってきています。お互いの機能を共同で使用することにより、相互運用アプリケーション は、単一のアプリケーションが提供するには難しい機能をユーザに提供します。ToolTalk サービスは、個人やワーク・グループで利用される相互運用アプリケーションの開発を簡単 に行えるように設計されています。

ToolTalkサービスを使用すると、独立したアプリケーションが互いに直接認識 していなくても通信することができます。アプリケーションはToolTalkメッセージを作成 し、送信することで相互に通信します。ToolTalkサービスは、これらのメッセージを受信 し、受信先を決定してから、そのメッセージを適切なアプリケーションに配信します。 この通信の様子を TTUG.Intro.mkr.2に示します。

## ToolTalkサービスを使ったアプリケーション

## ToolTalkサービスが解決できる業務上の問題

この節では、
ToolTalkサービスが解決するようになっている相互運用に関する問題について 説明します。ToolTalkサービスは、アプリケーションが次のようなことを必要とする場合 に使用するのに適切な技術です。

- ツール互換性

- 制御統合

- ごく一般的なサーバ（たとえばXサーバ）では所有しておらず、予想可能なリスナの 集合がないネットワーク透過イベント

- 自動ツール起動機能

- 広範囲で使用可能な分散オブジェクトシステム

- 固定表示オブジェクト

もちろん、相互運用の問題に対してToolTalkサービスを使用するのは適切でない場合 もあります。しかし、アプリケーションが両方の問題（つまり、ToolTalkサービスが解決 するようになっている相互運用に関する問題とToolTalkが解決するのではない問題）の解決 を必要としている場合は、ToolTalkサービスを他の技術と組み合わせて使用することができ ます。

### ツール互換性

プラグ・アンド・プレイ機能を必要とする場合は、ToolTalkサービスを使用してください。 プラグ・アンド・プレイとは、同じプロトコルを使用しているかぎ り、どんなツールでも交換が可能であるということを意味します。つまり、ToolTalkによ って与えられるプロトコルに従うツールであれば、それをコンピューティング環境に配置 （プラグ）し、プロトコルが示す関数を実行（プレイ）することができます。ツールを変更 することなく、またお互いの特定の組み込み知識を持っていなくてもツールを併用すること ができます。

### 制御統合

アプリケーションが
制御統合を要求する場合、ToolTalkサービスを使用してください。 制御統合という語は、ユーザの直接介入がなくても共通の目的に 向かって一緒に動作するツールのグループを示します。ToolTalkサービスを使うと、簡単 で柔軟性のある機能により特定のツール・インスタンスか不特定のサービス・プロバイダ に対して任意の要求を発行する制御統合が可能になります。

### ネットワーク透過イベント

アプリケーションが
ネットワーク透過イベントの生成や受信を必要とする場合は、ToolTalk サービスを使用してください。従来のイベント機構（シグナルやウィンドウ・システム・ イベントなど）を使用するには、特別な環境を必要とします。たとえば、プロセスや ウィンドウIDを認識していることなどです。ToolTalkサービスにより、イベントが参照する ファイルやイベントを適用できるネットワーク上のプロセスのグループに関して、イベント が自然に記述されます。ToolTalkサービスは、ネットワーク上のいたる所にある配信対象 プロセスにイベント(通知と呼ぶ)を配信します。ToolTalkの通知は 柔軟性があり、システムの拡張を簡単にします。

### 自動ツール起動機能

アプリケーションがネットワーク透過な
自動ツール起動機能を必要とする場合は、ToolTalkサービスを使用してくだ さい。ToolTalkサービスは、メッセージがネットワークから送信されると、ツールを起動 させるメッセージを記述させます。ToolTalk自動起動機能の使用は簡単で、従来の `inetd`(1) 機能ほどホストに固有のものでは ありません。

### 分散オブジェクト・システム

さまざまなプラットフォームにまたがって使用可能である
分散オブジェクト・システムでアプリケーションを作成する必要がある場合 は、ToolTalkを使用してください。 ToolTalkのオブジェクト・システムは、一般的なUNIXプラットフォームすべてにある アプリケーションで使用できます。次のようなアプリケーションでも使用できます。

- シングル・スレッドまたはマルチ・スレッドである

- コマンド行またはグラフィカル・ユーザ・インタフェースを持っている

- 独自のイベント・ループ、またはウィンドウ・システムのツールキットの イベント・ループを使用している。

ToolTalkのオブジェクト指向メッセージ・インタフェース用にコーディングされたプログラムは、
ソースコードを変更しなければCORBA準拠システムに 移植できません。

### 固定表示オブジェクト

アプリケーションがUNIXファイル・システムで
オブジェクトを目立たないように配置する必要がある場合は、 ToolTalkサービスを使用してください。

### ToolTalkサービスが業務上の問題を解決する方法を示すシナリオ

この節にある
シナリオは、ToolTalkサービスを利用することによって、業務上の問題をどの ように解決できるかを示しています。これらのシナリオで使用するメッセージ・プロトコル は、架空のものです。

#### ToolTalkデスクトップ・サービス・メッセージ・セットの使用

ToolTalk
デスクトップ・サービス・セットを使用することにより、アプリケーション は、ユーザの介入がなくても他のアプリケーションを統合およびコントロールすることが できます。この節では、デスクトップ・サービス・メッセージ・セットの実行方法を示す ２つのシナリオ(下記の TTUG.Intro.mkr.3と TTUG.Intro.mkr.4)について 説明します。

##### スマート・デスクトップ

この節のシナリオは、ユーザの要求を翻訳するアプリケーション・レベルのプログラ ムで、ToolTalkサービスを使用する方法を示すためのものです。共通デスクトップ環境 プロダクトによりToolTalkサービスにユーザの要求を翻訳させる方法を 示すためのものではありません。

グラフィカル・ユーザ・インタフェース(GUI)のフロント・エンドに対するユーザの 共通した要求は、データ・ファイルがアプリケーションに気づく (または 「知っている」)ようにできることにあります。これを行うには、 アプリケーション・レベルのプログラムがユーザの要求を翻訳する必要があります。 このアプリケーション・レベルのプログラム(スマート・デスクトップという)には、 アップル社の Macintosh® ファインダ、 マイクロソフト社の Windows™ ファイル・マネージャ、共通デスクトップ環境のファイル・マネージャなどがありま す。スマート・デスクトップの主な共通要件は、次のとおりです。

1. ファイルを取得する

2. アプリケーションを決定する

3. アプリケーションを起動する

ToolTalkサービスは、ツールのクラスが特定のデータ型を編集できるようにすること によって柔軟性が増します。次のシナリオでは、デスクトップ・サービス・メッセージ・ セットをエンドユーザに対して透過的なスマート・デスクトップとして実行する方法を説明 します。

1. ダイアンが[ファイルマネージャ]アイコンをダブルクリックします。

   - ファイル・マネージャが開き、ダイアンの現在のディレクトリ内のファイルを表示します。

2. ダイアンは、データ・ファイルのアイコンをダブルクリックします。

   1. ファイル・マネージャは、アイコンで表現されているファイルの表示を要求します。 また、表示 メッセージ内のファイル・タイプを 符号化します。

   2. ToolTalkセッション・マネージャは、登録されたアプリケーション(この場合は アイコン・エディタ)に表示 メッセージ内のパターン を照合して、ダイアンのデスクトップ上で実行中のアプリケーションのインスタンスを見 つけます。

      ToolTalkセッション・マネージャがアプリケーションの実行中のインスタンスを 見つけられない場合は、静的に定義した
      プロセス型 (ptypes)をチェックし、メッセージ内のパターンに最も一致 するアプリケーションを起動します。一致するptyepがないと、ファイル・マネージャ に異常終了を返します。

   3. アイコン・エディタは表示メッセージを受け取り、自分のアイコン化を解除し、 自分を一番上に表示します。

3. ダイアンは、ファイルを手動で編集します。

##### 統合ツールセット

デスクトップ・サービス・メッセージ・セットを実行できるもう１つの重要な アプリケーションは、統合ツールセットです。これらの環境は、 垂直のアプリケーション（CASEソフトウェア開発者用ツールセットなど）または水平の環境 （複合ドキュメントなど）に適用することができます。その両方のアプリケーションの 共通点は、総合的な解決法が、１つの特定のタスクをうまく実行するように設計されている 専門のアプリケーションから構築された、という前提があることです。統合ツールセット アプリケーションには、テキスト・エディタ、描画パッケージ、ビデオ・ディスプレイ・ ツール、オーディオ・ディスプレイ・ツール、コンパイラのフロント・エンド、デバッガ などがあります。統合ツールセット環境には、相互に呼び出して対話し、ユーザからの 要求を処理するアプリケーションが必要です。たとえば、ビデオを表示するには、エディタ がビデオ・ディスプレイ・プログラムを呼び出します。または、完成したコードの ブロックを確認するには、エディタがコンパイラを呼び出します。

次のシナリオでは、デスクトップ・サービス・メッセージ・セットを統合ツール セットとして実行する方法を説明します。

1. ブルースは、好みのエディタを使用して複合ドキュメントを扱う作業をしています。

   ソースコード・テキストの一部を変更することにします。

2. ブルースは、ソースコード・テキストをダブルクリックします。

   1. ドキュメント・エディタは、まずソースコードを表すテキストを判別し、その後 そのソースコードがどのファイルに入っているかを判別します。

   2. ドキュメント・エディタは、ファイル名をメッセージのパラメータとして使用し、 編集メッセージ要求を送信します。

   3. ToolTalkセッション・マネージャは、登録されたアプリケーション（この場合は、 ソースコード・エディタ）に編集メッセージ内のパターンを照合 して、ブルースのデスクトップ上で実行中のアプリケーションのインスタンスを見つけ ます。

      ToolTalkセッション・マネージャがアプリケーションの実行中のインスタンスを 見つけられない場合は、静的に定義したptypeをチェックし、メッセージ内のパターンに 最も一致するアプリケーションを起動します。一致するptypeがないと、ドキュメント・ エディタ・アプリケーションに異常終了を返します。

   4. ソースコード・エディタが編集メッセージ要求を受け取ります。

   5. ソースコード・エディタは、ソースコード・ファイルが構成コントロールを受けて いると判別し、ファイルをチェックするためのメッセージを送信します。

   6. そのメッセージをソースコード制御アプリケーションが受け取り、要求されたファイ ルの読み取り書き込み用コピーを作成します。その後、ファイル名をソースコード・ エディタに戻します。

   7. ソースコード・エディタは、ソース・ファイルが入っているウィンドウを開きます。

3. ブルースは、ソースコード・テキストを編集します。

#### ToolTalkドキュメント・メディア交換メッセージ・セットの使用

ToolTalk
ToolTalkドキュメント・メディア交換メッセージ・セットは、非常に柔軟性 があり、強力です。この節では、次のようなToolTalkドキュメント・メディア交換 メッセージ・セットの３つの使用方法について説明します。

- マルチメディアのオーサリング・アプリケーションへの統合

- 既存のアプリケーションへのマルチメディア拡張機能の追加

- メディア交換機能の追加によるXのカット＆ペースト機能の拡張

##### マルチメディア機能の統合

マルチメディア機能をアプリケーションに統合することによって、アプリケーション のエンド・ユーザは、さまざまなメディアの型をドキュメントに埋め込むことができます。

通常、メディア・オブジェクトを表すアイコンは、ドキュメントに埋め込まれます。 埋め込まれたオブジェクトを選択すると、ToolTalkサービスは自動的に適切な外部メディア ・アプリケーションを起動し、オブジェクトは次のシナリオで説明するように処理されま す。

1. ダニエルがマルチメディア・オブジェクトが入っているドキュメントを開きます。

2. ウィンドウがさまざまなメディアの種類（音声、画像、グラフィックスなど）を 表すアイコンで、ドキュメントを表示します。

3. ダニエルは、[音声]アイコンをダブルクリックします。

   音声アプリケーション(プレイヤと呼ぶ)が起動され、録音済 みの音声が再生されます。

4. 録音状態を編集するために、ダニエルはアイコンを１回クリックして選択し、３番 目のマウス・ボタンを使用して[編集]メニューを表示します。

   編集アプリケーションが起動され、ダニエルはメディア・オブジェクトを編集 します。

##### 既存のアプリケーションへのマルチメディア拡張機能の追加

ToolTalkドキュメント・メディア交換メッセージ・セットによって、アプリケーシ ョンは他のマルチメディア・アプリケーションを使用してその機能または性能を拡張する こともできます。たとえば、次のシナリオで示すように、カレンダ・マネージャを拡張 し、オーディオ・ツールを使って音声ファイルをアポイントメントの覚え書きとして再生 することもできます。

1. シェルビーは、自分のカレンダ・マネージャを開き、アポイトメントを設定します。

2. シェルビーが[音声応答]ボタンをクリックすると、オーディオ・ツールが起動 します。

3. シェルビーは、たとえば「レポートを持ってくる」といったようなメッセージを記録します。

シェルビーがアポイントの覚え書きを実行すると、カレンダ・マネージャは オーディオ・ツールを起動し、シェルビーが録音した覚え書きを再生します。

##### Xのカット＆ペースト機能の拡張

ToolTalkドキュメント・メディア交換メッセージ・セットは、拡張可能なオープン・ エンドの交換機能をサポートできます。次のシナリオは、拡張可能なマルチメディアの カット＆ペースト機能の動作を示します。

1. マリアがメディア型が異なる２つのドキュメントを開きます。

2. マリアがドキュメントAの一部分を選択し、標準のX ウィンドウのカット機能を使用して、その部分をカットします。

3. さらにマリアは、そのカットした部分をドキュメントBにペーストします。

   1. ドキュメントBは、カットしたデータの転送についてドキュメントAと交渉します。

   2. ドキュメント Aが提供するデータのどの型についてもドキュメントBが認識 しない場合、ドキュメントBはタグ付メディア型を送信してくれる ようドキュメント Aに要求します。ドキュメントBは、タグ付メディア型を使用 して、そのメディア型を理解可能なメディア型へ変換するように要求するToolTalk メッセージをブロードキャストします。

   3. 登録されている変換ユーティリティはその要求を受けて、変換後のバージョンの メディア型をドキュメントBへ返します。

   4. 変換されたデータのドキュメントBへのペーストが実行されます。

##
アプリケーションのToolTalkメッセージの使用方法

アプリケーションは、ToolTalkメッセージを作成、送信、および受信することに よって、他のアプリケーションと通信を行います。
送信側は、メッセージを作成、書き込み、および送信します。 ToolTalkサービスは受信側を判別し、そのメッセージを
受信側に配信します。 受信側はメッセージを検出してメッセージ内の情報をチェックし、メッセージを破棄する か、オペレーションを実行してその結果を返答します。

###
ToolTalkメッセージの送信

ToolTalkメッセージの構造は簡単で、アドレス、サブジェクト、および配信 情報のフィールドを含みます。ToolTalkメッセージを送信するため、アプリケーションは 空のメッセージを取得し、メッセージ属性を書き込んだ後、メッセージを送信します。 送信を行うアプリケーションは、次の情報を提供する必要があります。

- 通知用メッセージか要求用メッセージか（つまり、受信側がメッセージに応答する 必要があるかどうか）

- 受信側と送信側は、どのような処理対象を共有しているか（たとえば、受信側は特 定のユーザ・セッションで実行されているものか、または特定のファイルを処理対象とし ているものか）

メッセージの配信の範囲を限定するために、送信側アプリケーションはメッセージ 内にさらに情報を指定できます。

### メッセージ・パターン

ToolTalkの重要な
特徴は、送信側が受信側について何も認識していなくてもかまわないという ことです。これは、メッセージを受信したいアプリケーション側が、受け取りたい メッセージの種類を明示的に示すからです。この情報は、メッセージ・パターンとしてToolTalkサービスに登録されます。

アプリケーションは、そのインストール時または実行時にメッセージ・パターンを ToolTalkサービスに指定できます。メッセージ・パターンは、メッセージと同じ方法で 作成します。つまり、どちらの場合も同じ型の情報を使用します。アプリケーションは受 信したいそれぞれの型のメッセージについて、空のメッセージ・パターンを取得し、属性 を書き込み、そのパターンをToolTalkサービスに登録します。
これらのメッセージ・パターンは通常、アプリケーションが相互に使用する ことにしたメッセージ・プロトコルと一致します。アプリケーションは、個々の使用に応 じてさらにパターンを追加できます

ToolTalkサービスは、送信側アプリケーションからメッセージを受信すると、 メッセージ内の情報と登録されているパターンとを比較します。一致するものが見つかる と、ToolTalkサービスは、
受信側アプリケーションすべてにメッセージのコピーを 配信します。

アプリケーションは、受信を希望するメッセージを記述したパターンごとに、 メッセージを
処理または
監視できるかどうかを宣言しています。多数のアプリケーション がメッセージを監視できますが、メッセージを処理できるアプリケーションは１つだけで す。これは、要求されたオペレーションが確実に１回だけ実行されるようにするためです。 ToolTalkサービスが要求に対するハンドラを見つけだせなかった場合は、そのメッセージ を送信側アプリケーションに返し、配信が失敗したことを示します。

###
ToolTalkメッセージの受信

ToolTalkサービスは、メッセージを特定のプロセスに配信する必要があると判断する と、メッセージのコピーを作成し、受信待ちメッセージがあることをそのプロセスに通知 します。受信側アプリケーションが実行中でない場合、ToolTalkサービスは、アプリケーシ ョンの起動方法に関する指示（インストール時にアプリケーションが指示したもの）を 検索します。

プロセスは、メッセージを検索し、その内容をチェックします。

- オペレーションが実行されたという情報がメッセージに含まれている場合、プロセス はその情報を読み取ってから、メッセージを破棄します。

- オペレーションの実行要求がメッセージに含まれている場合、プロセスはそのオペ レーションを実行し、元のメッセージへの応答という形でオペレーションの結果を返しま す。応答が送信されると、プロセスは元のメッセージを破棄します。

## ToolTalkメッセージの配信

ToolTalkサービスは、
メッセージを配布する２つの方式を提供します。 プロセス指向メッセージ方式とオブジェクト指向メッセージ方式です。

### プロセス指向メッセージ方式

プロセス指向メッセージとは、プロセスにアドレス指定されたメッセージです。 プロセス指向メッセージを作成するアプリケーションは、指定されたプロセスか特定の型の プロセスのどちらかにそのメッセージをアドレス指定します。プロセス指向メッセージ方式 は、既存のアプリケーションが他のアプリケーションと通信するのに便利な方法です。プロ セス指向メッセージ方式をサポートするための修正は簡単で、通常は実行するのもそんなに 時間はかかりません。

### オブジェクト指向メッセージ方式

オブジェクト指向メッセージは、アプリケーションが管理するオブジェクトに アドレス指定されます。オブジェクト指向メッセージを作成するアプリケーションは、指定 されたオブジェクトか特定の型のオブジェクトのどちらかにそのメッセージをアドレス指定 します。オブジェクト指向メッセージ方式は、現在オブジェクトを使用しているアプリケー ション、またはオブジェクトを対象として設計されたアプリケーションに対して特に便利 です。既存のアプリケーションがオブジェクト指向でない場合は、ToolTalkサービスを 使うと、アプリケーションがアプリケーションのデータの一部をオブジェクトとして識別す るので、これらのオブジェクトに関する通信ができるようになります。

ToolTalkオブジェクト指向メッセージ・インタフェース用にコーディングされた プログラムは、ソースコードを変更しなければCORBA準拠のシステムに 移植できません
。

### メッセージ配信の判別

メッセージを受信するグループを判別するために、メッセージの 配信範囲を指定します。配信範囲指定を行うことにより、メッセー ジの配信を特定のセッションまたはファイルに限定します。

#### セッション

セッションとは、同じToolTalkメッセージ・サーバの インスタンスを持つプロセスのグループのことです（スレッド・セイフ・セッション管理 の情報については、付録Ｃを参照してください）。プロセスがToolTalkサービスとの通信 を開始すると、デフォルトのセッションが配置され（または、セッションが存在していない 場合は作成され）、プロセスには、プロセス識別子 (procid)が割り当てられます。 デフォルト・セッションは、環境変数 (「プロセス・ツリー・セッション」と呼ぶ)、 またはXディスプレイ(「Xセッション」と呼ぶ)によって配置されます。

セッションの概念は、メッセージの配信において重要です。送信側は、あるセッショ ンをメッセージの配信範囲とすることができます。ToolTalkサービスは、現在のセッション を参照するメッセージ・パターンを持つすべてのプロセスにメッセージを配信します。現在の
セッション識別子 (sessid)でメッセージ・パターンを 更新するときは、アプリケーションはそのセッションを結合します。

#### ファイル

このマニュアルでは、アプリケーションの処理対象であるデータを入れるコンテナの
ことをファイルと呼びます。

ファイルの概念は、メッセージの配信において重要です。送信側は、あるファイルを メッセージの配信範囲とすることができます。また、ToolTalkサービスは、プロセスの デフォルト・セッションに関係なく、そのファイルを参照するメッセージ・パターンを持つ すべてのプロセスにメッセージを配信します。現在のファイルのパス名でメッセージ・パター ンを更新するときは、アプリケーションはそのファイルを結合します。

また、１つのセッション内にあるファイルをメッセージの配信範囲とすることもでき ます。ToolTalkサービスは、そのメッセージ・パターン内にあるファイルとセッションの 両方を参照するすべてのプロセスにメッセージを配信します。

ファイルの配信範囲指定機能が使用できるのは、NFS®ファイル・システム とUFSファイル・システムだけです。

##
ToolTalkサービスを使用するためのアプリケーションの変更

ToolTalkサービスを使用できるようにアプリケーションを変更する前に、ToolTalk
メッセージ・プロトコルを定義（または配置）する 必要があります。メッセージ・プロトコルとは、アプリケーションが実行を認めたオペレー ションについて記述したToolTalkメッセージの集合です。メッセージ・プロトコル仕様の内 容は、メッセージの設定およびアプリケーションがメッセージを受信したときの動作です。

ToolTalkサービスを使用するために、アプリケーションは、ToolTalk
アプリケーション・プログラミング・インタフェース(API)からToolTalk関数 を呼び出します。ToolTalk APIには、ToolTalkサービスに登録する機能、メッセージ・パタ ーンを作成する機能、メッセージを送信する機能、メッセージを受信する機能、メッセージ 情報をチェックする機能などがあります。ToolTalkサービスを使用できるようにアプリケー ションを変更するには、まずプログラムにToolTalk APIのヘッダ・ファイルを組み込まなけ ればなりません。また、次のことを実現するためにアプリケーションを変更する必要があり ます。

- ToolTalkサービスを初期化し、セッションに参加する

- メッセージ・パターンをToolTalkサービスに登録する

- メッセージを送信および受信する

- メッセージ・パターンを登録解除し、ToolTalkを終了する