[Glue!] Glue Logic のからくり


Glue Logic のエージェントと Glue Logic Server

Glue Logic を利用するエージェントは、 他のエージェントと情報の共有を行なったり、 タイミングの同期を図ったりする事ができる。
この様な Glue Logic のエージェントに対するサービスは、 現在は全てひとつのサーバ・プロセスで実現されている。 このプロセスの事を "Glue Logic Server" と呼び、 ネットワーク上の任意のホストでひとつ動いておれば良い。

各エージェントは Glue Logic API という Application Program Interface を利用する事で、 Glue Logic Server との接続を、エージェント開発者が ネットワークの存在をほとんど意識しないままに行なう事ができる。 さらにこの API は、 エージェントが Glue Logic Server との接続を確立するための規約を全て知っており、 ソースコード上に Glue Logic の舞台裏が洩れ出る必要が無いようになっている。

各エージェントと Glue Logic Server との接続は、 TCP/IP を介した二つのソケットを使って行なわれる。 一つは Glue Logic Server がエージェントに対して 変更通知メッセージなどを送るために用いる Message Socket であり、 もう一つは エージェントが Glue Logic に対して データベース内の情報の参照や変更通知メッセージの送信依頼登録などを 行なうために用いる Transaction Socket である。

エージェントは自分の制御対象などの変化を知らせる変更通知メッセージが Message Socket から送られて来るのを待ち合わせ、 そのメッセージを受け取ると Transaction Socket を使って必要な情報を収集し 必要なアクションを取る。 一連の操作が終わると、また変更通知メッセージが送られて来るのを待つ事となる。

エージェントは、 データを参照したり Glue Logic Server から働きかけてもらう方法を指定したりするために、 Transaction Socket を用いた交信を行なう。 交信の行ない方は Glue Logic Protocol 仕様に規定されているが、 大きく分けると、データベースへのデータの書き込み・参照と、 データベース内の名前に関する問い合わせや 各種の登録・設定に分類する事ができる。


Glue Logic Server が提供するサービス

エージェントは Glue Logic Server に、 以下のようなサービスを受ける事ができる。
データベースの参照・更新
Glue Logic は基本的にはネットワーク越しに使える (高機能な)データベース・システムである。 このシステムではデータの整合性を維持するため、 同時に複数の名前の値を参照したり更新したりする事ができる。

データベースの条件付き更新
ある名前の値を更新するための条件として、 特定の名前が特定の値を持っている事を要求する事ができる。 これにより、たとえばある名前が "IDLE" と言う文字列を持っている時だけ、 "START" という文字列を書き込めるようにする、といった事もでき、 資源の排他制御の実現が容易になる。

変更通知メッセージの送付
あらかじめ登録した名前の値が変更された時に、変更通知メッセージを送る。 (この様に能動的な動作を行なう能力を持ったデータベースのことを、 アクティブ・データベースと呼ぶ。) メッセージの宛先とするエージェントや、 どのような値の変り方をした時に通知するかなどは 自由に指定する事ができる。

データベースへの演算式型データの代入
データベースのある名前に演算式型のデータを代入すると、 演算式に含まれる名前をデータベース内の値に置き換えて評価し、 得られた結果を名前に代入する。
この時、名前の Control 属性を指定して演算式型のデータを代入すると、 代入時には名前の置き換えを行なわずにデータベースに蓄え、 その後から名前を参照した時にデータベース内の値に置き換えて評価し、 そこで得られた結果をエージェントに返す。

データベースの自動更新・条件監視
ある名前に対して、 ある式をその名前がトリガされた時に実行されるものとして定義し、 さらにこの名前をトリガする名前のリストを与える事によって、 リストに含まれる名前の値が変化した時に、 指定した式を評価して名前の値として代入するという一連の操作を行なう。
この機能と変更通知メッセージとを組み合わせる事により、 Glue Logic Server 単独である演算式を評価した値を連続的に監視して、 その値が変化した時に変更通知メッセージを送信する事ができる。

情報隠蔽
あるエージェントのアンカー名、および そのエージェントが理解するメッセージと対応する機能だけを公開しておけば、 それ以外の情報は一切明かさないでおいても そのエージェントの機能を充分に利用する事ができる。
ただし、この場合には、 そのエージェントが理解できるメッセージは完全に責任を持って処理できる事と、 および理解できないメッセージについてはその旨を確実に示せる事が必要となる。


 [M.T. HomePage]  [written & copyrighted by Masayuki Takata]