droolsの動作確認(WebAPI)

前準備

takeiteasy-09.net

takeiteasy-09.net

takeiteasy-09.net

プロジェクトのデプロイ

今まではプロジェクトと呼ばれる中でオブジェクトやルールを作成し、テストケースで動作確認をしていました。 こうしてちゃんとアプリとして(ルールとして?)外部公開する際にはデプロイを実施します。

デプロイしてみる

プロジェクトトップ画面から「設定」-「KIE bases」-「KIE ベースの追加」をクリックします。

f:id:akky97:20201205131244p:plain

KIEベース名を入力し、「KIE セッション」をクリックします。

f:id:akky97:20201205131527p:plain

「KIE Sessionを追加」をクリックします。

f:id:akky97:20201205131727p:plain

一つ目のテキスト入力欄にセッション名を入力し、「完了」ボタンをクリックします。(二つ目は「stateless」のままにします。)

f:id:akky97:20201205131919p:plain

情報が登録されていることを確認し、「保存」ボタンをクリックします。

f:id:akky97:20201205132227p:plain

コミット時のコメントを入力(空でもOK)し、「保存」をクリックします。

f:id:akky97:20201205132452p:plain

上部メニューの「デプロイ」をクリックします。

f:id:akky97:20201205133306p:plain

ビルドが実行された後、デプロイ完了の通知が画面上に表示されるので、「デプロイメントの詳細を表示する」リンクをクリックします。

f:id:akky97:20201205133449p:plain

KIEサーバに先ほどのプロジェクトがデプロイされていることが確認できます。

f:id:akky97:20201205133655p:plain

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などでも構いません。

f:id:akky97:20201205134702p:plain

認証エラーとなってしまいましたので、認証情報を追記します。

f:id:akky97:20201205135030p:plain

ちゃんと200で結果が得られることが確認できました。

f:id:akky97:20201205135440p:plain

次にデプロイしたプロジェクトの機能を利用してみます。

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」のタイトルだったらいくら、という情報を決定する内容となっているはずです。

f:id:akky97:20201205142150p:plain

以下が 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」プロパティ に値段が入っていることが確認できます。 プロジェクトルールが動作し、値段が決定されていることがわかります。