18.2. カスタムデータトランスポートを使用するための Decision Server の拡張
デフォルトでは、Decision Server の拡張が REST または JMS データトランスポートを使用して公開されます。Decision Server を拡張して、カスタムのデータトランスポートのサポートを追加し、Decision Server トランスポートプロトコルをビジネスニーズに適合します。
たとえば、以下の手順では、Drools
拡張を使用し、Apache MINA (オープンソースの Java ネットワークアプリケーションフレームワーク) をベースとする Decision Server にカスタムのデータトランスポートを追加します。カスタムの MINA トランスポートの例では、既存のマーシャリング操作に依存し、JSON 形式のみをサポートする文字列ベースのデータを変換します。
手順
空の Maven プロジェクトを作成して、以下のパッケージタイプと依存関係を、プロジェクトの
pom.xml
ファイルに定義します。サンプルプロジェクトの pom.xml ファイルの例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下の例のように、プロジェクトの Java クラスに
org.kie.server.services.api.KieServerExtension
インターフェイスを実装します。KieServerExtension
インターフェイスの実装例Copy to Clipboard Copied! Toggle word wrap Toggle overflow KieServerExtension
インターフェイスは、新規の MINA トランスポートの機能を追加する時に Decision Server が使用する主要な拡張インターフェイスです。このインターフェイスには、以下のコンポーネントが含まれます。KieServerExtension
インターフェイスの概要Copy to Clipboard Copied! Toggle word wrap Toggle overflow このインターフェイスの先程の
MinaDroolsKieServerExtension
実装例では、init
メソッドが主に、Drools
拡張からサービスを収集して、MINA サーバーをブートストラップ化する要素となっています。KieServerExtension
インターフェイスの他のメソッドは、標準の実装のままで、インターフェイスの要件を満たします。TextBasedIoHandlerAdapter
クラスは、受信要求に対応する MINA サーバーにあるハンドラーです。以下の例のように、MINA サーバーの
TextBasedIoHandlerAdapter
ハンドラーを実装します。TextBasedIoHandlerAdapter
ハンドラーの実装例Copy to Clipboard Copied! Toggle word wrap Toggle overflow この例では、ハンドラークラスはテキストメッセージを受信して、
Drools
サービスでこのメッセージを実行します。TextBasedIoHandlerAdapter
ハンドラー実装を使用する場合は、以下のハンドラー要件と動作を考慮してください。- 各受信トランスポート要求が 1 行であるため、ハンドラーに送信する内容は、1 行でなければなりません。
-
ハンドラーで
containerID|payload
の形式が想定されるように、この 1 行に KIE コンテナー ID を渡す必要があります。 - マーシャラーで生成される方法で応答を設定できます。応答は複数行にすることができます。
-
このハンドラーは stream mode をサポートし、Decision Server セッションを切断せずにコマンドを送信できます。ストリームモードで Decision Server セッションを終了するには、サーバーに
exit
またはquit
コマンドを送信してください。
-
新規のデータトランスポートを Decision Server で検出できるようにするには、Maven プロジェクトで
META-INF/services/org.kie.server.services.api.KieServerExtension
ファイルを作成し、このファイルにKieServerExtension
実装クラスの完全修飾名を追加します。たとえば、このファイルにはorg.kie.server.ext.mina.MinaDroolsKieServerExtension
の 1 行が含まれます。 -
プロジェクトを構築して、作成された JAR ファイルと
mina-core-2.0.9.jar
ファイル (今回の例でこの拡張が依存) をプロジェクトの~/kie-server.war/WEB-INF/lib
ディレクトリーにコピーします。たとえば、Red Hat JBoss EAP ではこのディレクトリーへのパスはEAP_HOME/standalone/deployments/kie-server.war/WEB-INF/lib
です。 Decision Server を起動して、実行中の Decision Server に構築したプロジェクトをデプロイします。プロジェクトは、Business Central インターフェイスまたは Decision Server REST API (
http://SERVER:PORT/kie-server/services/rest/server/containers/{containerId}
へのPUT
要求) のいずれかを使用してデプロイできます。プロジェクトを実行中の Decision Server にデプロイした後に、Decision Server ログで新規データトランスポートのステータスを表示して、新規データトランスポートの使用を開始できます。
サーバーログの新規データトランスポート
Drools-Mina KIE Server extension -- Mina server started at localhost and port 9123 Drools-Mina KIE Server extension has been successfully registered as server extension
Drools-Mina KIE Server extension -- Mina server started at localhost and port 9123 Drools-Mina KIE Server extension has been successfully registered as server extension
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この例では、Telnet を使用して Decision Server の 新しい MINA ベースのデータトランスポートと対話できます。
コマンドターミナルでの Telnet の開始およびポート 9123 での Decision Server の接続
telnet 127.0.0.1 9123
telnet 127.0.0.1 9123
Copy to Clipboard Copied! Toggle word wrap Toggle overflow コマンドターミナルでの Decision Server との対話例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow サーバーログの出力例
16:33:40,206 INFO [stdout] (NioProcessor-2) Hello john 16:34:03,877 INFO [stdout] (NioProcessor-2) Hello mary 16:34:19,800 INFO [stdout] (NioProcessor-2) Hello james
16:33:40,206 INFO [stdout] (NioProcessor-2) Hello john 16:34:03,877 INFO [stdout] (NioProcessor-2) Hello mary 16:34:19,800 INFO [stdout] (NioProcessor-2) Hello james
Copy to Clipboard Copied! Toggle word wrap Toggle overflow