Red Hat Decision Managerのルール実行環境をSpringBootで素早く構築してルールアプリを動かしてみる（前編）

Red Hat Decision Managerは、Javaで実装されたオープンソースのルールエンジン製品です。
ルールエンジンとは、データを渡すと、あらかじめ定義されたルールに基づいて効率よく各種判定および処理を実行してくれるものです。

データオブジェクト（JavaのPOJO）とルール定義（専用言語によるスクリプト、またはExcelで定義）を作成すれば、ルールは直ぐに実行することができますが、
ここでは、SpringBootを使って、ルール実行環境を簡単に作る方法を紹介します。

### 前提環境

- JDK1.8以上
- Maven3.x

JavaとMavenはあらかじめ必要です。なければインストールください。

以下、2部構成です。構築するところまでが、この記事（前編）で、ルールアプリを作成して動かすところは後編を参照ください。

前編 Spring BootでKieServerを動かす（10分程度で完了）
後編 ルールアプリを作成しKieServer上で実行する（30分程度かかるかな）

## (前編) Spring BootでKieServerを動かす

KieServer（Decision Serverとか、Execution Serverとか呼び名がいろいろあるので注意）とは、REST APIでルールを実行できるサーバアプリです。
JBoss EAPや、Weblogicを立てて、そこにKieServerをデプロイして動作させることももちろん可能ですが、ここではSpringBootスターターを使ってKieServerを素早くあげちゃいましょう。
この手順は、[製品マニュアル](https://access.redhat.com/documentation/ja-jp/red_hat_decision_manager/7.7/html/creating_red_hat_decision_manager_business_applications_with_spring_boot/index)にも出ています。


### KieServer on Spring Bootを取得

製品マニュアルにも書いてありますが、[ここ(https://start.jbpm.org)](https://start.jbpm.org)からダウンロードすると、KieServer on Spring Bootがダウンロードできます。

![スクリーンショット.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276989/da773f58-00af-446d-30f9-b2203501b2e8.png)

1. Configure your business Application を選択
2. Decision Management　を選択
3. Package Name、Application Name、Versionを選択(名前は好きなものでOK。Versionは、Enterprise xxを選択してください。Versionは後から変更できます。）
4. Business Assets、Data Models、Serviceを選択し、「Generate business Application」をクリック

KieServer on Sprint BootがZip形式でダウンロードされます。

ダウンロードしたZipを解凍すると、３つのプロジェクトが確認できます。`business-appication`部分は、自分で指定したApplication Nameになっています。
![スクリーンショット.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276989/c11d8d5f-f327-b30e-4235-7580ac71a721.png)

### KieServerを起動

起動スクリプトが含まれていますので、それを実行するとKieServerが起動しますが、その前にいくつか作業をします。

#### settings.xmlに製品リポジトリを追加
Maven Repositoryを追加設定しましょう。
自分の環境で参照している、`settings.xml`ファイルを開き、以下を追記します。(pom.xmlに追記でももちろん可）
これにより、Red Hatの製品版のリポジトリが参照先として追加されます。

```xml:
<repository>
  <id>jboss-enterprise-repository-group</id>
  <name>Red Hat JBoss Enterprise Maven Repository</name>
  <url>https://maven.repository.redhat.com/ga/</url>
  <layout>default</layout>
  <releases>
    <updatePolicy>never</updatePolicy>
  </releases>
  <snapshots>
    <updatePolicy>daily</updatePolicy>
  </snapshots>
</repository>
<pluginRepository>
  <id>jboss-enterprise-repository-group</id>
  <name>Red Hat JBoss Enterprise Maven Repository</name>
  <url>https://maven.repository.redhat.com/ga/</url>
  <layout>default</layout>
  <releases>
    <updatePolicy>never</updatePolicy>
  </releases>
  <snapshots>
    <updatePolicy>daily</updatePolicy>
  </snapshots>
</pluginRepository>
```

#### Swaggerの有効化

後ほど、SwaggerUI使う予定なので、SwaggerドキュメントとUIを有効にしておきましょう。

1.`<business-application>/<business-application>-service/pom.xml` ファイルを開きます。
2.以下の依存関係を追加して、このファイルを保存します。

```xml:
    <dependency>
      <groupId>org.apache.cxf</groupId>
      <artifactId>cxf-rt-rs-service-description-swagger</artifactId>
      <version>3.1.11</version>
    </dependency>
    <dependency>
      <groupId>io.swagger</groupId>
      <artifactId>swagger-jaxrs</artifactId>
      <version>1.5.15</version>
      <exclusions>
        <exclusion>
          <groupId>javax.ws.rs</groupId>
          <artifactId>jsr311-api</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>org.webjars</groupId>
      <artifactId>swagger-ui</artifactId>
      <version>2.2.10</version>
    </dependency>
```

3.テキストエディターで `<business-application>/<business-application>-service/src/main/resources/application.properties` ファイルを開きます。
4.以下の行を application.properties ファイルに追加します。

`kieserver.swagger.enabled=true`

#### ビルドして実行する

起動スクリプトがついているので、それを使います。

```
$ cd <business-application>/<business-application>-service
$ ./launch.sh clean install
```
Windows環境の方は、`./launch.bat clean install`

ビルドが始まり、やがてそれが成功すると（初回は、必要なjarをたくさんダウンロードしてくるので、時間がかかります）、SpringBootが起動し、KieServerが起動します。
![スクリーンショット.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276989/0176ad2e-cfce-26c6-463f-1725f41c3378.png)
（中略）
![スクリーンショット.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276989/77724f06-afb2-68e5-12ab-64be1db717a3.png)
（中略）
![スクリーンショット.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276989/8dfbe585-2d97-c3fd-4948-0fc91c713a7c.png)


#### 起動確認

起動後、以下URLにアクセスすると、HTMLファイルが表示されます。

`http://localhost:8090/`

![スクリーンショット.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276989/0f0fb169-ad9b-76c2-6f5a-af92d0913f1e.png)

ルールは何も実装していないので、アプリケーションの中身はほぼ空なので、ここではこのページが表示されることを確認するだけです。
止めるときは、`Ctrl+C` です。

#### SwaggerUI確認

SwaggerUIも確認してみましょう。以下URLにアクセスして、SwaggerUIが表示されることを確認します。
user/userログイン出来ます。

`http://localhost:8090/rest/api-docs?url=http://localhost:8090/rest/swagger.json`
![スクリーンショット.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276989/fd870e11-d186-6004-d502-2b84e4d329b5.png)

ここから、ルールの実行などをテストすることが可能です。
SwaggerUIを使わなくても、curl等でルール実行は可能です。

さて、ここまでで、KieServerが準備できました。するっといけば、１０分くらいで出来たはずです。

### 続きは後編にて。
[Red Hat Decision Managerのルール実行環境をSpringBootで素早く構築してルールアプリを動かしてみる（後編）](https://qiita.com/Erina/items/16ebe857c2d1f5c4f0a0)