前準備
プロジェクトのデプロイ
今まではプロジェクトと呼ばれる中でオブジェクトやルールを作成し、テストケースで動作確認をしていました。 こうしてちゃんとアプリとして(ルールとして?)外部公開する際にはデプロイを実施します。
デプロイしてみる
プロジェクトトップ画面から「設定」-「KIE bases」-「KIE ベースの追加」をクリックします。
KIEベース名を入力し、「KIE セッション」をクリックします。
「KIE Sessionを追加」をクリックします。
一つ目のテキスト入力欄にセッション名を入力し、「完了」ボタンをクリックします。(二つ目は「stateless」のままにします。)
情報が登録されていることを確認し、「保存」ボタンをクリックします。
コミット時のコメントを入力(空でもOK)し、「保存」をクリックします。
上部メニューの「デプロイ」をクリックします。
ビルドが実行された後、デプロイ完了の通知が画面上に表示されるので、「デプロイメントの詳細を表示する」リンクをクリックします。
KIEサーバに先ほどのプロジェクトがデプロイされていることが確認できます。
WebAPIで実行してみる
デプロイが完了すると、WebAPIとして実行できるようになります。
また、KIEサーバとして「http://kie-server:8080/kie-server/services/rest/server」と表示されていますが、ホストOSからは「http:// localhost:8180/kie-server/services/rest/server」で接続が可能です。(docker-compose.ymlの設定に従いますので、変更されている場合はポート番号などは適宜読み替え必要)
まず、「http:// localhost:8180/kie-server/services/rest/server」の接続確認をしてみます。
Visual Studio Code の REST Client の操作になりますが、curlコマンド、postmanなどでも構いません。
認証エラーとなってしまいましたので、認証情報を追記します。
ちゃんと200で結果が得られることが確認できました。
次にデプロイしたプロジェクトの機能を利用してみます。
REST Client の情報として以下を指定し、POSTします。
lookup
にはプロジェクトの設定画面で指定したセッション名を入力します。
POST http://localhost:8180/kie-server/services/rest/server/containers/instances/DroolsTestProject Authorization: Basic admin admin content-type: application/json { "lookup": "testSession", "commands":[ { "insert":{ "object":{ "com.myspace.droolstestproject.Book":{ "title": "入門Java" } }, "out-identifier": "factObject" } }, {"fire-all-rules":""} ] }
上記の内容は「入門Java」という本のタイトルを与えています。このプロジェクトのルールは「入門Java」のタイトルだったらいくら、という情報を決定する内容となっているはずです。
以下が POST した結果になります。
HTTP/1.1 200 OK Expires: 0 Cache-Control: no-cache, no-store, must-revalidate X-Powered-By: Undertow/1 Server: WildFly/10 Pragma: no-cache Date: Sat, 05 Dec 2020 05:11:53 GMT Connection: close Content-Type: application/json Content-Length: 588 { "type": "SUCCESS", "msg": "Container DroolsTestProject successfully called.", "result": { "execution-results": { "results": [ { "value": 1, "key": "" }, { "value": { "com.myspace.droolstestproject.Book": { "title": "入門Java", "price": 2500 } }, "key": "factObject" } ], "facts": [ { "value": { "org.drools.core.common.DefaultFactHandle": { "external-form": "0:7:1076065813:1076065813:7:DEFAULT:NON_TRAIT:com.myspace.droolstestproject.Book" } }, "key": "factObject" } ] } } }
Bookオブジェクトの「price」プロパティ に値段が入っていることが確認できます。 プロジェクトルールが動作し、値段が決定されていることがわかります。