システム説明



ここでは、KLICとJavaのメッセージインタフェースの実装について簡単に説明します。

このインタフェースは、各言語上でライブラリとして実装され、インタフェースを利用する場合は、このライブラリを用いて通信を行うこととなります。また、各言語上のインタフェース間で通信を行うために、UNIXのストリーム型ソケットを用いています。このソケットをライブラリに指定することにより、通信を行うアプリケーションが決定されます。システムの全体的な構成は以下のようになります。

全体構成


KLIC側におけるメッセージインタフェースの実装は、KLICのモジュールとして実現されています。インタフェースを利用する場合には、このモジュールのゴールを呼び出すことで使用できます。モジュールは、jk, jkmain, jkinput, jkspool, jkparse, jkwrapstr, jkinspectorの7つからなります。各モジュールが提供する機能の概略は以下のとおりです。ユーザがインタフェースを利用する場合は、jkモジュールのjk/2というゴールを呼び出します。このゴールが、その他のモジュールを利用して、必要なプロセスを生成し、インタフェースの機能を実現します。

モジュール 機能
jk必要なプロセスを生成し、メッセージインタフェースの機能を提供する
jkmainKLIC側からのメッセージを受け取り、Java側に渡す
jkinputJava側からのメッセージを受け取り、処理を行う
jkspool手続き呼び出しや、ストリーム通信などのデータを保持する
jkparseJava側から送られた文字列データを解析しKLICのデータを生成する
jkwrapstrJava側へのデータ送信のための文字列を生成する
jkinspectorインタフェースの内部動作を外部から参照するためのライブラリ

KLIC側のメッセージインタフェースの内部は以下に示すように、main, input, spoolの3つのプロセスから構成されます。mainプロセスは、KLICアプリケーションからのメッセージを受け取り、そのデータをJava側へ送信します。inputプロセスは、Java側から送られたメッセージを受け取り、そのメッセージに応じた処理を行います。spoolは手続き呼び出しやデータストリームのデータ等の値を保持します。これらのプロセスはストリームにより接続され、相互にデータをやり取りします。

KLIC側の内部構成


Java側におけるメッセージインタフェースは、いくつかのクラスを用いて実装されています。インタフェースを利用するには、これらのクラスのオブジェクトを利用することになります。主なクラスとして、JK, ReadThread, ArgsManager, Stream, ObjectTable, Dataがあります。これらクラスの機能の概略を以下に示します。ユーザは、JKクラスのオブジェクトを生成し、このオブジェクトのメソッドを呼び出すことによりインタフェースが利用できます。このオブジェクトが、必要なクラスを利用してインタフェースの機能を実現します。また、通信の際に利用されるKLICのデータ型を扱う場合には、Dataクラスを用います。

クラス機能
JKJavaからのメッセージを受け取りKLIC側へ送信する
ReadThreadKLIC側から送られたメッセージを受け取り処理する
ArgsManager手続き呼び出しの戻り値の設定先を管理する
Streamデータストリームのデータ処理
ObjectTableKLIC側から生成されたオブジェクトを管理する
DataKLICのデータを扱う

Java側のメッセージインタフェースの内部は以下に示すようになっています。JKクラスのオブジェクトは、Javaアプリケーションからのメッセージを受け取り、そのデータをKLIC側へ送信します。ReadThreadクラスのオブジェクトは、Javaアプリケーションとは別のスレッドで動作し、KLIC側から送られたメッセージを読み取り、メッセージに応じた処理を行います。ArgsManager, Streamの各クラスのオブジェクトは、手続き呼び出しやデータストリームのデータ等を保持します。ObjectTableは、KLIC側から作成されたオブジェクトを管理します。

Java側の内部構成