このインタフェースは、各言語上でライブラリとして実装され、インタフェースを利用する場合は、このライブラリを用いて通信を行うこととなります。また、各言語上のインタフェース間で通信を行うために、UNIXのストリーム型ソケットを用いています。このソケットをライブラリに指定することにより、通信を行うアプリケーションが決定されます。システムの全体的な構成は以下のようになります。
KLIC側におけるメッセージインタフェースの実装は、KLICのモジュールとして実現されています。インタフェースを利用する場合には、このモジュールのゴールを呼び出すことで使用できます。モジュールは、jk, jkmain, jkinput, jkspool, jkparse, jkwrapstr, jkinspectorの7つからなります。各モジュールが提供する機能の概略は以下のとおりです。ユーザがインタフェースを利用する場合は、jkモジュールのjk/2というゴールを呼び出します。このゴールが、その他のモジュールを利用して、必要なプロセスを生成し、インタフェースの機能を実現します。
モジュール | 機能 |
---|---|
jk | 必要なプロセスを生成し、メッセージインタフェースの機能を提供する |
jkmain | KLIC側からのメッセージを受け取り、Java側に渡す |
jkinput | Java側からのメッセージを受け取り、処理を行う |
jkspool | 手続き呼び出しや、ストリーム通信などのデータを保持する |
jkparse | Java側から送られた文字列データを解析しKLICのデータを生成する |
jkwrapstr | Java側へのデータ送信のための文字列を生成する |
jkinspector | インタフェースの内部動作を外部から参照するためのライブラリ |
KLIC側のメッセージインタフェースの内部は以下に示すように、main, input, spoolの3つのプロセスから構成されます。mainプロセスは、KLICアプリケーションからのメッセージを受け取り、そのデータをJava側へ送信します。inputプロセスは、Java側から送られたメッセージを受け取り、そのメッセージに応じた処理を行います。spoolは手続き呼び出しやデータストリームのデータ等の値を保持します。これらのプロセスはストリームにより接続され、相互にデータをやり取りします。
Java側におけるメッセージインタフェースは、いくつかのクラスを用いて実装されています。インタフェースを利用するには、これらのクラスのオブジェクトを利用することになります。主なクラスとして、JK, ReadThread, ArgsManager, Stream, ObjectTable, Dataがあります。これらクラスの機能の概略を以下に示します。ユーザは、JKクラスのオブジェクトを生成し、このオブジェクトのメソッドを呼び出すことによりインタフェースが利用できます。このオブジェクトが、必要なクラスを利用してインタフェースの機能を実現します。また、通信の際に利用されるKLICのデータ型を扱う場合には、Dataクラスを用います。
クラス | 機能 |
---|---|
JK | Javaからのメッセージを受け取りKLIC側へ送信する |
ReadThread | KLIC側から送られたメッセージを受け取り処理する |
ArgsManager | 手続き呼び出しの戻り値の設定先を管理する |
Stream | データストリームのデータ処理 |
ObjectTable | KLIC側から生成されたオブジェクトを管理する |
Data | KLICのデータを扱う |
Java側のメッセージインタフェースの内部は以下に示すようになっています。JKクラスのオブジェクトは、Javaアプリケーションからのメッセージを受け取り、そのデータをKLIC側へ送信します。ReadThreadクラスのオブジェクトは、Javaアプリケーションとは別のスレッドで動作し、KLIC側から送られたメッセージを読み取り、メッセージに応じた処理を行います。ArgsManager, Streamの各クラスのオブジェクトは、手続き呼び出しやデータストリームのデータ等を保持します。ObjectTableは、KLIC側から作成されたオブジェクトを管理します。