IBM Operational Decision Manager メモ - (1) 概要、Linuxへのインストール

# はじめに
ODM(Operational Decision Manager)というIBM製品があります。これはアプリケーションに含まれる"ビジネス・ルール"を外出しにして容易に開発/管理を行う仕組みを提供してくれるものです。
このシリーズではODMを試してみたときのログを記載していきます。
まずはODM概要の整理と、Linux上に各サーバーを立てる想定でインストールするところまで。

## 関連記事

[IBM Operational Decision Manager メモ - (1) 概要、Linuxへのインストール](https://qiita.com/tomotagwork/items/2bdcc13cc5a896b6a3a1)
[IBM Operational Decision Manager メモ - (2) ルール開発から実行までの流れ](https://qiita.com/tomotagwork/items/446975617acfdb0eda5f)
[IBM Operational Decision Manager メモ - (3) Decision Center利用の流れ](https://qiita.com/tomotagwork/items/5e8b1efbe0072cf5af6b)
[IBM Operational Decision Manager メモ - (4) Linux上での環境セットアップ](https://qiita.com/tomotagwork/items/dd9dc49ed6a67ff876bb)
[IBM Operational Decision Manager メモ - (5) z/OS上での環境セットアップ](https://qiita.com/tomotagwork/items/73ceaf84fb89b5d2af7b)
[IBM Operational Decision Manager メモ - (6) z/OS上でのルール呼び出し](https://qiita.com/tomotagwork/items/577895e05f9ec5e40c06)
[IBM Operational Decision Manager メモ - (7) zODM環境補足](https://qiita.com/tomotagwork/items/fdda485b28c55edae6e6)

# ODMの概要/用語の整理

参考: 
[Decision automation for business agility](https://www.ibm.com/docs/en/odm/8.11.0?topic=manager-decision-automation-business-agility)
[Rule Execution Server architecture](https://www.ibm.com/docs/ja/odm/8.11.0?topic=application-rule-execution-server-architecture)
"Decision"(意思決定) とか言われると今一つピンと来ない感じがしますが、これはよくある例で言うと、例えば、ローン審査を行う業務において申請者の様々な条件(年齢、職業、現時点での借入金額、etc...)を元にローン可否を判断する、とか、保険料算定業務において申込内容(保険商品、付帯特約、保険対象の各種条件、etc...)を元に保険料を算出する、といったように、条件に応じたなんらかの業務上の判断をすることを指しています。
"Decision automation"(意思決定の自動化)というと何か大仰な表現な気がしますが、これは上のような判断を自動化するということで、大昔からローン判定やら保険料算定というのはアプリケーション中のif文とかcase文の塊として実装され、それにより自動化は行われてきた訳です。ですのでこの概念自体は特別目新しいものではありません。
ただ、業務によってはその条件分岐が非常に複雑になるものがあり、ソースコード中にif文やcase文を駆使して実装すると可読性が悪く、管理やメンテナンスが煩雑になってしまう場合があります。
ODMでは、そのような意思決定に関わるロジック(≒if文の塊)を外出しにして、その意思決定ロジックに特化した開発/実行/管理のための仕組みを提供しています。この、抽出された意思決定ロジック(≒if文の塊)は"ビジネス・ルール"と呼ばれたりします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/d79cf6e7-0e58-7e33-380a-bab07f93e10e.png)


ODMを用いて"ビジネス・ルール"を外出しにすることで、以下のようなメリットを得られることが期待されます。

- **ビジネス・ルールの可視化**: ODMの開発ツールを使用すると、プログラミング言語ではなくGUIベースのツールなどを使って"ビジネス・ルール"の開発が可能です。例えば表形式で条件を設定していくことが出来るので、直感的に分かりやすいインターフェースでルールを表現することができます。それにより条件の抜け/漏れなども防ぐことに繋がります。
- **メンテナンス容易性**: プログラミング言語での開発ではなくGUIベース、あるいは自然言語ベースでルールを設定することができるため、いわゆる"開発者"ではなくても、業務寄りのユーザーがメンテナンス(一部の条件を変更するなど)を容易に行えるようになります。また、複数のロジックから共通的に使用されるルールを一元的に管理することができます。
- **ライフサイクルの迅速化**: ビジネス・ルールに特化したメンテナンスの仕組みが提供されるため、ビジネス・ルールの部分のみを変更からリリースまでを迅速に行うことができます。(従来型のケースでは、アプリケーションのレベルで、変更、再コンパイル、テスト、リリースのサイクルを回す必要がある)

このようなことを実現するために、ODMでは主に以下の様な3つの主要コンポーネントが提供されています。

- **Rule Desginer**: ビジネス・ルール開発ツール(Eclipseベース)
- **RES(Rule Execution Server)**: ビジネス・ルールの稼働環境(Javaベース)
- **Decision Center**: ビジネス・ルール管理用サーバー(Javaベース)

Rule DesignerとRule Execution Serverは合わせてDecision ServerとかDecision Server Rulesと呼ばれるようです。(Decision ServerとかDecision Centerとかパッと見まぎらわしいので注意してください。この辺のネーミングセンスがイマイチですなぁ...。)

【ODM利用イメージ】
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/a49a3074-0a33-b614-4c4f-47c8fd31b9b2.png)


基本的な流れは以下の様な感じです。

**(1) ルール開発**
Rule Designerでビジネス・ルールを開発/テストし、Decision Centerと同期します。

**(2) ルール管理**
出来上がったビジネス・ルールを適切な実行環境(Rule Execution Server)にデプロイします。
リリース後のビジネスルールのメンテナンス(編集、テスト、シミュレーション、再デプロイなど)も行えます。
(Decision Centerを介さずに、Rule DesignerからRESに対して直接デプロイすることも可能です)

**(3) 業務アプリケーション開発**
ビジネス・ルールがRule Execution Serverにデプロイされると、それを業務アプリから利用できる状態になるので、そのビジネス・ルールを利用する業務アプリを作成します。
これはアプリの形態、言語等によってそれぞれの方法で実施されます(Liberty上のWebアプリ、BAW上のワークフロー、ホストCICSのCOBOLアプリケーションなど)。

**(4) 業務アプリケーションの使用**
エンドユーザーが業務アプリケーションを使用すると、内部的にはODM上で管理されているビジネス・ルールが呼び出されて判断が行われるということになります。


# 環境構築

簡易テスト用ということで、今回はPC上にODMの環境を作っていきます。
Windows10 のVirtualBox上にRHELを立てて、そこにODMサーバー環境を作っていきます。Rule Designer部分はWindows側に構築します。構築したい環境のイメージは以下の通りです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/00e62e13-79b2-9a2c-55e9-08f9005eff29.png)

RHEL V8.5
ODM V8.11
Db2 V11.5.4

Windows10
Eclipse 4.16(2020-06R)

RES, Decision Center はJavaアプリとして実装されており、LibertyやWAS、JBossなどのJEEサーバー上で稼働させることができます(RESはJEEではなくスタンドアローンのJavaアプリとしても稼働させることが可能)。
また、RES, Decision Centerでは各オブジェクト管理のためにデータベースを使うことになります。Db2, Oracle, H2, Derby, MySQLなど利用可能です。
ここでは、RES, Decision CenterのランタイムとしてはLibertyを使用し、データベースにはDb2を使用する想定とします(いずれもODMに付属のもの)。
開発環境のEclipseはWindows上に構築、ルール管理/稼働用のサーバーはLinux上に構築する、というイメージです。

参考: [IBM Operational Decision Manager 8.11 - Detailed System Requirements](https://www.ibm.com/software/reports/compatibility/clarity-reports/report/html/softwareReqsForProduct?deliverableId=2D28A510507B11EBBBEA1195F7E6DF31&osPlatforms=AIX|Linux|Mac%20OS|Windows|z/OS&duComponentIds=D002|S003|S006|S005|C006&mandatoryCapIds=30|1|13|25|26&optionalCapIds=341|47|9|1|15)

まずは、上のような構成を行うにあたって必要な各種S/Wをインストールしていきます。

## 各コンポーネントのインストール on Linux
参考: [Installing product components](https://www.ibm.com/docs/en/odm/8.11.0?topic=installing-product-components)

### Javaのインストール

※最初IBM Semeru Runtime V11を使おうとしたのだが、ODMのインストール時にうまく認識されなかったので後からV8を入れなおした。
<details><summary><font color="blue">参考:IBM Semeru Runtime 11のインストール</font></summary><div>

IBM Semeru Runtimeの11の最新を使用することにします。
[IBM Semeru Runtime Downloads](https://developer.ibm.com/languages/java/semeru-runtimes/downloads/)
上のサイトからLinux版(x64)のrpmをダウンロードします。

```
[root@Test13 /Inst_Image/JavaSemer11]# ls -la
合計 166144
drwxr-xr-x. 2 root root        66  1月 12 16:20 .
drwxr-xr-x. 4 root root        39  1月 12 16:20 ..
-rwxr-x---. 1 root root 170128588  1月 12 16:20 ibm-semeru-open-11-jdk-11.0.13.8_0.29.0-1.x86_64.rpm

[root@Test13 /Inst_Image/JavaSemer11]# yum install ibm-semeru-open-11-jdk-11.0.13.8_0.29.0-1.x86_64.rpm
サブスクリプション管理リポジトリーを更新しています。
コンシューマー識別子を読み込めません

このシステムは、エンタイトルメントサーバーに登録されていません。subscription-manager で登録できます。

メタデータの期限切れの最終確認: 1:39:00 時間前の 2022年01月12日 14時42分40秒 に実施しました。
依存関係が解決しました。
==========================================================================================================================
 パッケージ                          アーキテクチャー    バージョン                       リポジトリー              サイズ
==========================================================================================================================
インストール:
 ibm-semeru-open-11-jdk              x86_64              11.0.13.8_0.29.0-1               @commandline              162 M

トランザクションの概要
==========================================================================================================================
インストール  1 パッケージ

合計サイズ: 162 M
インストール後のサイズ: 325 M
これでよろしいですか? [y/N]: y
パッケージのダウンロード:
トランザクションの確認を実行中
トランザクションの確認に成功しました。
トランザクションのテストを実行中
トランザクションのテストに成功しました。
トランザクションを実行中
  scriptletの実行中: ibm-semeru-open-11-jdk-11.0.13.8_0.29.0-1.x86_64                                                 1/1
  準備             :                                                                                                  1/1
  インストール中   : ibm-semeru-open-11-jdk-11.0.13.8_0.29.0-1.x86_64                                                 1/1
  scriptletの実行中: ibm-semeru-open-11-jdk-11.0.13.8_0.29.0-1.x86_64                                                 1/1
[/usr/lib/tmpfiles.d/pesign.conf:1] Line references path below legacy directory /var/run/, updating /var/run/pesign → /run/pesign; please update the tmpfiles.d/ drop-in file accordingly.

  検証             : ibm-semeru-open-11-jdk-11.0.13.8_0.29.0-1.x86_64                                                 1/1
インストール済みの製品が更新されています。

インストール済み:
  ibm-semeru-open-11-jdk-11.0.13.8_0.29.0-1.x86_64

完了しました!
```

`/usr/lib/jvm/ibm-semeru-open-11-jdk/`以下にインストールされます。
確認

```
[root@Test13 ~]# ls -la /usr/lib/jvm/ibm-semeru-open-11-jdk/
合計 32
drwxr-xr-x.  9 root root  107  1月 12 16:22 .
drwxr-xr-x.  4 root root  213  1月 12 16:21 ..
drwxr-xr-x.  2 root root 4096  1月 12 16:21 bin
drwxr-xr-x.  4 root root  112  1月 12 16:21 conf
drwxr-xr-x.  3 root root  150  1月 12 16:21 include
drwxr-xr-x.  2 root root 8192  1月 12 16:21 jmods
drwxr-xr-x. 74 root root 4096  1月 12 16:21 legal
drwxr-xr-x.  7 root root 4096  1月 12 16:22 lib
drwxr-xr-x.  4 root root   47  1月 12 16:22 man
-rw-r--r--.  1 root root 1637 10月 22 14:53 release

[root@Test13 ~]# /usr/lib/jvm/ibm-semeru-open-11-jdk/bin/java --version
openjdk 11.0.13 2021-10-19
IBM Semeru Runtime Open Edition 11.0.13.0 (build 11.0.13+8)
Eclipse OpenJ9 VM 11.0.13.0 (build openj9-0.29.0, JRE 11 Linux amd64-64-Bit Compressed References 20211022_282 (JIT enabled, AOT enabled)
OpenJ9   - e1e72c497
OMR      - 299b6a2d2
JCL      - 2d83aa3b76 based on jdk-11.0.13+8)
```

デフォルトだとOpenJDKが有効になっていたので、alternativesコマンドで使用するJavaを切り替えます。

```
[root@Test13 ~]# alternatives --config java

2 プログラムがあり 'java' を提供します。

  選択       コマンド
-----------------------------------------------
*+ 1           java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.302.b08-3.el8.x86_64/jre/bin/java)
   2           /usr/lib/jvm/ibm-semeru-open-11-jdk/bin/java

Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:2

[root@Test13 ~]# java --version
openjdk 11.0.13 2021-10-19
IBM Semeru Runtime Open Edition 11.0.13.0 (build 11.0.13+8)
Eclipse OpenJ9 VM 11.0.13.0 (build openj9-0.29.0, JRE 11 Linux amd64-64-Bit Compressed References 20211022_282 (JIT enabled, AOT enabled)
OpenJ9   - e1e72c497
OMR      - 299b6a2d2
JCL      - 2d83aa3b76 based on jdk-11.0.13+8)
```

</div></details>


IBM Semeru Runtimeの8の最新を使用することにします。
[IBM Semeru Runtime Downloads](https://developer.ibm.com/languages/java/semeru-runtimes/downloads/)
上のサイトからLinux版(x64)のrpmをダウンロードします。

```
[root@Test13 /Inst_Image/JavaSemeru8]# ls -la
合計 91556
drwxr-xr-x. 2 root root       69  1月 12 17:31 .
drwxr-xr-x. 5 root root       59  1月 12 17:30 ..
-rwxr-x---. 1 root root 93752272  1月 12 17:31 ibm-semeru-open-8-jdk-1.8.0.312.b07_0.29.0-1.x86_64.rpm
[root@Test13 /Inst_Image/JavaSemeru8]#
[root@Test13 /Inst_Image/JavaSemeru8]# yum install ibm-semeru-open-8-jdk-1.8.0.312.b07_0.29.0-1.x86_64.rpm
サブスクリプション管理リポジトリーを更新しています。
コンシューマー識別子を読み込めません

このシステムは、エンタイトルメントサーバーに登録されていません。subscription-manager で登録できます。

メタデータの期限切れの最終確認: 2:49:45 時間前の 2022年01月12日 14時42分40秒 に実施しました。
依存関係が解決しました。
==========================================================================================================================================================================
 パッケージ                                    アーキテクチャー               バージョン                                       リポジトリー                         サイズ
==========================================================================================================================================================================
インストール:
 ibm-semeru-open-8-jdk                         x86_64                         1.8.0.312.b07_0.29.0-1                           @commandline                          89 M

トランザクションの概要
==========================================================================================================================================================================
インストール  1 パッケージ

合計サイズ: 89 M
インストール後のサイズ: 220 M
これでよろしいですか? [y/N]: y
パッケージのダウンロード:
トランザクションの確認を実行中
トランザクションの確認に成功しました。
トランザクションのテストを実行中
トランザクションのテストに成功しました。
トランザクションを実行中
  scriptletの実行中: ibm-semeru-open-8-jdk-1.8.0.312.b07_0.29.0-1.x86_64                                                                                              1/1
  準備             :                                                                                                                                                  1/1
  インストール中   : ibm-semeru-open-8-jdk-1.8.0.312.b07_0.29.0-1.x86_64                                                                                              1/1
  scriptletの実行中: ibm-semeru-open-8-jdk-1.8.0.312.b07_0.29.0-1.x86_64                                                                                              1/1
[/usr/lib/tmpfiles.d/pesign.conf:1] Line references path below legacy directory /var/run/, updating /var/run/pesign → /run/pesign; please update the tmpfiles.d/ drop-in file accordingly.

  検証             : ibm-semeru-open-8-jdk-1.8.0.312.b07_0.29.0-1.x86_64                                                                                              1/1
インストール済みの製品が更新されています。

インストール済み:
  ibm-semeru-open-8-jdk-1.8.0.312.b07_0.29.0-1.x86_64

完了しました!
```


`/usr/lib/jvm/ibm-semeru-open-8-jdk/`以下にインストールされます。
確認

```
[root@Test13 ~]# ls -la /usr/lib/jvm/ibm-semeru-open-8-jdk/
合計 53368
drwxr-xr-x.  8 root root      248  1月 12 17:32 .
drwxr-xr-x.  5 root root      231  1月 12 17:32 ..
-rw-r--r--.  1 root root     1522 10月 22 14:30 ASSEMBLY_EXCEPTION
-rw-r--r--.  1 root root    19650 10月 22 14:30 LICENSE
-rw-r--r--.  1 root root   157063 10月 22 14:30 THIRD_PARTY_README
drwxr-xr-x.  2 root root     4096  1月 12 17:32 bin
-rw-r--r--.  1 root root    17300 10月 22 14:30 epl-2.0.html
drwxr-xr-x.  3 root root      150  1月 12 17:32 include
drwxr-xr-x.  4 root root       95  1月 12 17:32 jre
drwxr-xr-x.  3 root root      143  1月 12 17:32 lib
drwxr-xr-x.  4 root root       47  1月 12 17:32 man
-rw-r--r--.  1 root root    33947 10月 22 14:30 openj9-notices
-rw-r--r--.  1 root root     6384 10月 22 14:30 openj9-openjdk-notices
-rw-r--r--.  1 root root      491 10月 22 14:30 release
drwxr-xr-x. 10 root root      151  1月 12 17:32 sample
-rw-r--r--.  1 root root 54386066 10月 22 14:30 src.zip

[root@Test13 ~]# /usr/lib/jvm/ibm-semeru-open-8-jdk/bin/java -version
openjdk version "1.8.0_312"
IBM Semeru Runtime Open Edition (build 1.8.0_312-b07)
Eclipse OpenJ9 VM (build openj9-0.29.0, JRE 1.8.0 Linux amd64-64-Bit Compressed References 20211022_234 (JIT enabled, AOT enabled)
OpenJ9   - e1e72c497
OMR      - 299b6a2d2
JCL      - 8860d39588 based on jdk8u312-b07)
```

alternativesコマンドで使用するJavaを切り替えます。

```
[root@Test13 ~]# alternatives --config java

3 プログラムがあり 'java' を提供します。

  選択       コマンド
-----------------------------------------------
*  1           java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.302.b08-3.el8.x86_64/jre/bin/java)
 + 2           /usr/lib/jvm/ibm-semeru-open-11-jdk/bin/java
   3           /usr/lib/jvm/ibm-semeru-open-8-jdk/bin/java

Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:3

[root@Test13 ~]# java -version
openjdk version "1.8.0_312"
IBM Semeru Runtime Open Edition (build 1.8.0_312-b07)
Eclipse OpenJ9 VM (build openj9-0.29.0, JRE 1.8.0 Linux amd64-64-Bit Compressed References 20211022_234 (JIT enabled, AOT enabled)
OpenJ9   - e1e72c497
OMR      - 299b6a2d2
JCL      - 8860d39588 based on jdk8u312-b07)
```

### Libertyのインストール

disk1/WLP/以下にzipで提供されているので、それを適当なディレクトリに展開します。
ここでは、/opt/IBM以下に配置することにします。

```
[root@Test13 /Inst_Image/ODM811/disk1/WLP]# unzip wlp-base-embeddable-21.0.0.9.zip
Archive:  wlp-base-embeddable-21.0.0.9.zip
   creating: wlp/
   creating: wlp/bin/
   creating: wlp/bin/jaxb/
   creating: wlp/bin/jaxb/tools/
...

[root@Test13 /Inst_Image/ODM811/disk1/WLP]# mv wlp /opt/IBM/

[root@Test13 /Inst_Image/ODM811/disk1/WLP]# ls -la /opt/IBM/wlp
合計 92
drwxr-xr-x. 8 root root   140  8月 25 04:09 .
drwxr-xr-x. 4 root root    44  1月 12 17:51 ..
-rw-r--r--. 1 root root   857  8月 25 04:09 CHANGES.TXT
-rw-r--r--. 1 root root   293  8月 25 04:09 Copyright.txt
-rw-r--r--. 1 root root 12410  8月 25 04:09 README.TXT
drwxr-xr-x. 6 root root  4096  8月 25 04:09 bin
drwxr-xr-x. 3 root root    74  8月 25 04:09 clients
drwxr-xr-x. 4 root root    28  8月 25 04:09 dev
drwxr-xr-x. 7 root root 49152  8月 25 04:09 lib
drwxr-xr-x. 4 root root    36  8月 25 04:09 templates
drwxr-xr-x. 4 root root    35  8月 25 04:09 usr
```


### Installation Managerのインストール
ODM関連のコンポーネントは、Installation Managerというツールを使ってインストールすることになるので、まずはそのInstallation Managerをインストールする必要があります。
この辺はマニュアルにきちんと手順が書いてなさそう。不親切...。

`disk1/IM/agent.installer.linux.gtk.x86_64_1.9.1006.20210614_1906.zip`を解凍してinstallを実行すると、Installation Managerのインストーラーが起動します(X-Serverが必要)
Installation Managerのバージョン1.9.1.6を選択して次へ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/ca7c01b0-7e2c-8fae-8f7d-4fc6613ac574.png)

ライセンスを読み同意して次へ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/083f1b22-55b8-aa75-ac1b-aadb558b6ad9.png)

そのまま次へ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/9c6d9a6e-1c27-9d34-9e9f-25ffd3af18be.png)

内容を確認してインストール
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/b2d57ff2-346e-7ce4-4c4d-28bfbe35f487.png)

これでインストール完了。"Installation Managerの再起動"をクリックするとInstallation Managerが起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/b51b39d4-3f53-d2f2-e13b-7b1911de0c08.png)

※Installation Managerはデフォルトで`/opt/IBM/InstallationManager`にインストールされます。手動で起動したい場合は、`/opt/IBM/InstallationManager/eclipse/IBMIM` を実行します。

### Decision Server Rules / Decision Centerのインストール

DicisionServerRules、および、Decision Centerのインストール・イメージを以下のようなディレクトリに展開している状態。

```
[root@Test13 /Inst_Image/ODM811]# ls disk1/DecisionServerRules/
Offerings  atoc  native  plugins  repository.config  repository.xml
[root@Test13 /Inst_Image/ODM811]# ls disk2/DC/
Offerings  atoc  native  plugins  repository.config  repository.xml
```

Installation Managerのメニューからファイル - 設定を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/6e9ab437-4e1d-aeb0-ac67-8b65ae9b5adc.png)

リポジトリーの追加をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/b3978eb2-f1b1-2324-d9c6-5e17f3227b88.png)

参照ボタンから、.../disk1/DecisionServerRules/repository.configを選択してOK
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/2142a703-35f1-c839-c98c-255702d830c4.png)

これでDecisionServerRules用のリポジトリが追加されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/b48c9f7a-bdd9-3f18-978b-b6f641253267.png)

同様に、DecisionCenter用のリポジトリも追加してOK
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/88f63aef-de19-f553-810a-a4088838f003.png)

Installation Managerのトップからインストールを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/1be0e51c-25d0-aa41-a4d1-7f147e2cca2b.png)

Decision Center、および、Decision Server Rulesを選択して次へ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/9f96165f-2154-9af4-a16b-03bb34d2741c.png)

ライセンスを確認して同意し、次へ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/0d6cfa4c-52a5-a18a-1e67-1525a4b9c822.png)

そのまま次へ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/953c2609-f861-c0d5-1cbe-80a54268b5c3.png)

そのまま次へ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/dce03187-d893-d651-89d2-320912d4490e.png)

そのまま次へ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/9606f547-4115-fea7-c524-f7d9dfcead0f.png)

以下のようにフィーチャーを選択して次へ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/3858488e-b3d6-af14-b26d-84a4560da3ef.png)


最初、以下のようにJava(JDK)の場所としてIBM Semeru Runtime 11のディレクトリを示したら警告マークがついた。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/649eb7bc-e2dd-dacc-c187-2a166cfafefd.png)

仕方無いので IBM Semeru Runtime 8をインストールし直してそのパスを指定したら警告マークが外れた。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/b8d5486b-befd-8047-d83e-418454f22c35.png)

Liberty Serverのロケーションに、Libertyを展開したディレクトリを指定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/8424f9d9-9715-aa56-bb00-c021aca09ac3.png)

ライセンス使用状況は適宜選択して次へ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/5f9519a2-a794-24ca-8d7e-00102ad9793c.png)

内容を確認してインストール
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/68d8528e-1ee5-80c1-56c3-6c076ea8e2c4.png)

インストール完了。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/d160250f-327e-952a-e3be-f724cd680ac0.png)

`/opt/IBM/ODM8110`以下に

```
[root@Test13 ~]# ls -la /opt/IBM/ODM8110/
合計 4
drwxr-xr-x. 10 root root  146  1月 12 18:06 .
drwxr-xr-x.  6 root root   78  1月 12 18:05 ..
drwxr-xr-x.  4 root root   61  1月 12 18:05 buildcommand
drwxr-xr-x.  8 root root  103  1月 12 18:05 executionserver
drwxr-xr-x.  5 root root   99  1月 12 18:05 gettingstarted
drwxr-xr-x.  5 root root 4096  1月 12 18:05 images
drwxr-xr-x.  4 root root   47  1月 12 18:06 license
drwxr-xr-x. 10 root root  117  1月 12 18:05 shared
drwxr-xr-x.  4 root root   38  1月 12 18:05 studio
drwxr-xr-x.  8 root root  133  1月 12 18:05 teamserver
```


### Db2のインストール
参考: [Db2 セットアップ・ウィザードによる Db2 サーバーのインストール (Linuxおよび UNIX)](https://www.ibm.com/docs/ja/db2/11.5?topic=idds-installing-db2-servers-by-using-db2-setup-wizard-linux-unix)
セットアップウィザードを使用してDb2をインストールします。(要XServer)

```
[root@Test13 /Inst_Image/ODM811/server_dec]# ./db2setup
```

新規インストール
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/e22bf1b0-c539-7151-3e0d-21938174e510.png)

DB2バージョン11.5.4.0 Server Editionを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/ba9050d3-036d-9d33-f39b-c5caa897d4c5.png)

カスタムを選択し、"インスタンスを作成する"、"IBMの条項に同意する"にチェックして次へ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/88032299-bd39-3b27-14c3-783eeae710cd.png)

適宜フィーチャー選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/88e5a4d8-8334-ca4d-918d-4fbc70359d6d.png)

ここでは"基本アプリケーション開発ツール"を追加でチェックしています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/6399a65e-5910-979b-3bd4-4a454edd37d4.png)

言語の選択をして次へ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/87fb3aba-6a5c-14cb-c7fd-6fbcb3d55c46.png)

そのまま次へ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/a51c34ba-af26-483c-14c1-e64c8a826477.png)

"単一パーティションインスタンス"を選択して次へ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/201a8681-6ee5-eef3-57bf-98a694a35c4b.png)

作成するインスタンスの設定をして次へ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/81387033-a317-93e5-70db-298452046dc5.png)

fencedユーザーの設定をして次へ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/c3a6952b-6408-6a5e-22f6-58cc538556f0.png)

インスタンス通信の設定をして次へ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/fc1856bb-e868-24ad-c86e-3986ee81b19f.png)

そのまま次へ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/f718d47a-d63e-67b6-6be8-0a9c487002ce.png)

完了
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/e0bbdeda-535e-9cc9-40eb-24013131d377.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/cffa9d6d-894b-224d-d2b5-55f035a26fee.png)

インスタンスが作成されるので稼働確認

```
[root@Test13 ~]# su - db2inst1
[db2inst1@Test13 ~]$ db2start
01/21/2022 16:05:19     0   0   SQL1063N  DB2START の処理が正常に終了しました。
SQL1063N  DB2START の処理が正常に終了しました。
[db2inst1@Test13 ~]$ db2 list db directory
SQL1031N  指定されたファイル・システムには、データベース
・ディレクトリーが 見つかりません。  SQLSTATE=58031
[db2inst1@Test13 ~]$ netstat -an | grep 5000
tcp6       0      0 :::50000                :::*                    LISTEN
```


## 各コンポーネントのインストール on Windows

### Eclipseのインストール

[Installing components locally](https://www.ibm.com/docs/en/odm/8.11.0?topic=components-installing-locally)
上の記述にならって、Eclipse 4.16(2020-06R)をダウンロードする。
こちらからWindows 64bit版をダウンロード。
[https://www.eclipse.org/downloads/packages/release/2020-06/r](https://www.eclipse.org/downloads/packages/release/2020-06/r)

ダウンロードしたzipを展開
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/c86676e6-c7fe-0f79-51bc-a8d1729619aa.png)

### Rule Designerのインストール

事前にWindowsにもInstallation Managerをインストール。ODMに付いているWindows版のインストーラー(install.exe)を使えばよく基本Linuxと同じなので詳細は割愛。

Installation Managerを起動し、Linuxの時と同様にファイル-設定からリポジトリを追加します。今回はDecisionServerRulesのリポジトリのみ追加。
で、インストールに進みます。

Decision Server Rulesを選択して次へ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/c28f899a-19b3-ff41-7727-3f119d71ec52.png)

ライセンスに同意して次へ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/853420d7-768e-36db-b4c0-4751b647b067.png)

適宜変更して次へ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/9739308e-b55c-a278-7ab3-7ba75c81d74e.png)

そのまま次へ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/d4cc18cd-9c43-1c9b-6219-32aa778e9f62.png)

以下のように選択して次へ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/a699725c-2b58-6276-e95d-2c0d9a7e3a97.png)

Javaのパスを指定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/afc5ecfe-4379-18f3-7d62-33ea802860cc.png)

Eclipseのパスを指定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/2c047299-f01e-a51c-aeb5-50888b8ce1f7.png)

適宜選択して次へ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/41de967a-526b-e837-f4aa-3c4f38aeb064.png)

内容を確認してインストール
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/27d89cb2-34bb-05b9-fcd9-643a12cf65bb.png)

インストール完了
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/1ddaa6e3-cd7a-f219-a999-ed2f63f93fa4.png)


# 確認

## Sample Serverの作成/起動

インストールの確認用にサンプルのサーバーを構成/起動するantスクリプトが用意されているので、そちらを実行してみます。

参考: [Starting the sample server](https://www.ibm.com/docs/ja/odm/8.11.0?topic=server-starting-sample)

`<InstallDir>/shared/bin/startserver.sh`を実行します。

<details><summary><font color="blue">startserver.sh実行ログ</font></summary><div>

```
[root@Test13 /opt/IBM/ODM8110/shared/bin]# ./startserver.sh
/usr/bin/which: no xterm in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/opt/IBM/wlp/bin:/opt/IBM/ODM8110/shared/tools/ant/bin/)
Buildfile: /opt/IBM/ODM8110/shared/bin/build.xml

startserver:

start.server:

checkForValidWLPHOME:

abortIfUnrecognizedWLPHOME:

checkIfWeCanWriteToODMHOME:
    [touch] Creating /tmp/testwrite.txt
     [copy] Copying 1 file to /opt/IBM/ODM8110/shared/samplesServer/wlp
   [delete] Deleting: /opt/IBM/ODM8110/shared/samplesServer/wlp/testwrite.txt

abortIfAccessDeniedToODMHOME:

checkIfIsInstallingDC:

checkIfIsInstallingDS:

checkIfSamplesServerExists:

checkIfUpgrading:

abortIfUpgrading:

checkIfPortAlreadyInUse:

abortIfPortAlreadyInUse:

checkIfDCAppsDeployed:

checkIfDSAppsDeployed:

checkIfIsInstallingDS:

checkIfIsInstallingDC:

checkIfOneOfferingIsAlreadyDeployed:

abortIfOneOfferingIsAlreadydeployed:

checkIfSamplesServerExists:

createSamplesServerIfNeeded:
[samples.echo] 1 25, 2022 5:49:12 午後 com.ibm.rules.sampleserver.Log info
[samples.echo] 情報: GBRPS0038I: /opt/IBM/wlp/usr/servers/odm81100 に専用プロファイルを作成中
[samples.echo] GBRPS0038I: /opt/IBM/wlp/usr/servers/odm81100 に専用プロファイルを作成中
[wlp:server] CWWKM2001I: server.config.dir は /opt/IBM/wlp/usr/servers/odm81100 です。
[wlp:server] CWWKM2001I: server.output.dir は /opt/IBM/wlp/usr/servers/odm81100 です。
[wlp:server] CWWKM2001I: Invoke command は [/opt/IBM/wlp/bin/server, create, odm81100] です。
[wlp:server]
[wlp:server] サーバー odm81100 が作成されました。

checkIfWeCanWriteToWlpDir:
     [copy] Copying 1 file to /opt/IBM/wlp/usr/servers/odm81100
   [delete] Deleting: /opt/IBM/wlp/usr/servers/odm81100/testwrite.txt

abortIfAccessDeniedToWlpDir:
    [mkdir] Created dir: /opt/IBM/wlp/usr/servers/odm81100/data
     [copy] Copying 1 file to /opt/IBM/wlp/usr/servers/odm81100
     [copy] Copying 1 file to /opt/IBM/wlp/usr/servers/odm81100
    [mkdir] Created dir: /opt/IBM/wlp/usr/servers/odm81100/lib
     [copy] Copying 2 files to /opt/IBM/wlp/usr/servers/odm81100/lib

checkIfDSInstalled:

checkIfDSAppsDeployed:

copyDSArtifactsIfNeeded:

copyDSArtifacts:
     [copy] Copying 4 files to /opt/IBM/wlp/usr/servers/odm81100/apps

unzipDSdatabase:
    [unzip] Expanding: /opt/IBM/ODM8110/shared/data/h2/resdb-backup.zip into /opt/IBM/wlp/usr/servers/odm81100/data/h2

checkIfDCInstalled:

checkIfDCAppsDeployed:

copyDCArtifactsIfNeeded:

copyDCArtifacts:
     [copy] Copying 4 files to /opt/IBM/wlp/usr/servers/odm81100/apps

unzipDCdatabase:
    [unzip] Expanding: /opt/IBM/ODM8110/shared/data/h2/rtsdb-backup.zip into /opt/IBM/wlp/usr/servers/odm81100/data/h2
    [unzip] Expanding: /opt/IBM/ODM8110/shared/data/h2/rtsdb-serverextendedbrm-backup.zip into /opt/IBM/wlp/usr/servers/odm81100/data/h2

try.start:
[wlp:server] CWWKM2001I: server.config.dir は /opt/IBM/wlp/usr/servers/odm81100 です。
[wlp:server] CWWKM2001I: server.output.dir は /opt/IBM/wlp/usr/servers/odm81100 です。
[wlp:server] CWWKM2001I: Invoke command は [/opt/IBM/wlp/bin/server, start, odm81100] です。
[wlp:server]
[wlp:server] サーバー odm81100 を始動中です。
[wlp:server] サーバー odm81100 がプロセス ID 44504 で始動しました。
[wlp:server] Waiting up to 30 seconds for server confirmation:  CWWKF0011I to be found in /opt/IBM/wlp/usr/servers/odm81100/logs/messages.log
[wlp:server] CWWKM2010I: /opt/IBM/wlp/usr/servers/odm81100/logs/messages.log で CWWKF0011I を検索中です。 この検索は、30 秒後にタイムアウトになります。
[wlp:server] CWWKM2015I: 一致番号: 1 は [22/01/25 17:49:54:856 JST] 00000029 com.ibm.ws.kernel.feature.internal.FeatureManager            A CWWKF0011I: odm81100 サーバーは、Smarter Planet に対応する準備ができました。odm81100 サーバーは 37.079 秒で始動しました。 です。

wait.for.server.start:

checkIfDSInstalled:

wait.for.decisionserverIfExist:

checkIfDCInstalled:

wait.for.decisioncenterIfExist:

checkIfDCBuildAvailable:

checkIfDCAppsDeployed:

checkIfSetSamplesSettings:

update.decisioncenter.servers:

set-samples-settings:
[set-samples-settings] [serverURL] 'http://localhost:9090/decisioncenter'
[set-samples-settings] [datasourceName] 'jdbc/ilogDataSource'
[set-samples-settings] [username] 'rtsAdmin'
[set-samples-settings] [password] '********'
[set-samples-settings] 1 25, 2022 5:50:08 午後 com.ibm.rules.decisioncenter.remoting.internal.RemoteSessionHttpExecutorBuilder log
[set-samples-settings] 情報: {"url":"http://localhost:9090/decisioncenter","datasource":"jdbc/ilogDataSource","username":"rtsAdmin","message":"Sign in successfully","date":"2022/01/25 17:50:08"}
[set-samples-settings] 1 25, 2022 5:50:13 午後 com.ibm.rules.decisioncenter.remoting.internal.RemoteSessionHttpExecutorBuilder log
[set-samples-settings] 情報: {"url":"http://localhost:9090/decisioncenter","datasource":"jdbc/ilogDataSource","username":"rtsAdmin","message":"Sign out successfully","date":"2022/01/25 17:50:13"}

set-samples-settings:
[set-samples-settings] [serverURL] 'http://localhost:9090/decisioncenter'
[set-samples-settings] [datasourceName] 'jdbc/ilogDataSource'
[set-samples-settings] [username] 'rtsAdmin'
[set-samples-settings] [password] '********'
[set-samples-settings] 1 25, 2022 5:50:15 午後 com.ibm.rules.decisioncenter.remoting.internal.RemoteSessionHttpExecutorBuilder log
[set-samples-settings] 情報: {"url":"http://localhost:9090/decisioncenter","datasource":"jdbc/ilogDataSource","username":"rtsAdmin","message":"Sign in successfully","date":"2022/01/25 17:50:15"}
[set-samples-settings] 1 25, 2022 5:50:18 午後 com.ibm.rules.decisioncenter.remoting.internal.RemoteSessionHttpExecutorBuilder log
[set-samples-settings] 情報: {"url":"http://localhost:9090/decisioncenter","datasource":"jdbc/ilogDataSource","username":"rtsAdmin","message":"Sign out successfully","date":"2022/01/25 17:50:18"}

delete.new.installation.files:
   [delete] Deleting: /opt/IBM/ODM8110/shared/data/ds_just_installed
   [delete] Deleting: /opt/IBM/ODM8110/shared/data/dc_just_installed
[samples.echo] 1 25, 2022 5:50:19 午後 com.ibm.rules.sampleserver.Log info
[samples.echo] 情報: GBRPS0029I: start.server が完了しました。
[samples.echo] GBRPS0029I: start.server が完了しました。

BUILD SUCCESSFUL
Total time: 1 minute 11 seconds
```

</div></details>

これで"odm81100"という名前のLibertyサーバーが作成されて、そこにRESとDecision Center用のアプリがデプロイされることになります。データベースとしてはDb2ではなくJavaベースのH2が使われます(※H2はインストール作業などは不要です)。ちなみにH2は開発目的では使用できますが、本番環境での使用はサポートされていません。
参考: [Samples environment](https://www.ibm.com/docs/ja/odm/8.11.0?topic=8110-samples-environment)

>sample server
A WebSphere® Liberty server instance that uses the H2 database. It contains preconfigured versions of the Rule Execution Server console, and the Decision Center web applications. They include populated databases and predefined users.
Note: H2 database is for development only, and not for production purposes.

サンプルとして作成される構成は以下の様なイメージとなります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/7de037d9-b344-0f7a-8226-7b5d3169838c.png)


<details><summary><font color="blue">生成されたLibertyのディレクトリ階層(workareaは除く)</font></summary><div>

```
[root@Test13 /opt/IBM/wlp/usr/servers/odm81100]# tree . -I workarea --charset C
.
|-- apps
|   |-- DecisionRunner.war
|   |-- DecisionService.war
|   |-- decisioncenter-api.war
|   |-- decisioncenter.war
|   |-- decisionmodel.war
|   |-- miniloan-server.war
|   `-- res.war
|-- data
|   `-- h2
|       |-- resdb.mv.db
|       |-- rtsdb-serverextendedbrm.mv.db
|       |-- rtsdb-serverextendedbrm.trace.db
|       |-- rtsdb.mv.db
|       `-- rtsdb.trace.db
|-- dropins
|-- jvm.options
|-- lib
|   |-- h2.jar
|   `-- wlp-anttasks.jar
|-- logs
|   |-- console.log
|   |-- ffdc
|   |   |-- exception_summary_22.01.25_18.00.17.0.log
|   |   |-- ffdc_22.01.25_18.00.17.0.log
|   |   |-- ffdc_22.01.25_18.00.20.0.log
|   |   |-- ffdc_22.01.25_18.00.20.1.log
|   |   `-- ffdc_22.01.25_18.00.20.2.log
|   |-- messages.log
|   `-- state
|       `-- plugin-cfg.xml
|-- res-console0.log
|-- resources
|   `-- security
|       |-- key.p12
|       `-- ltpa.keys
|-- server.env
|-- server.xml
`-- tranlog
    |-- partnerlog
    |   |-- DO NOT DELETE LOG FILES
    |   |-- log1
    |   `-- log2
    `-- tranlog
        |-- DO NOT DELETE LOG FILES
        |-- log1
        `-- log2

13 directories, 34 files
```

</div></details>

<details><summary><font color="blue">生成されたLibertyのserver.xml</font></summary><div>

```xml:/opt/IBM/wlp/usr/servers/odm81100/server.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- Licensed Materials - Property of IBM                           -->
<!-- 5725-B69 5655-Y17 5655-Y31                                     -->
<!-- Copyright IBM Corp. 1987, 2021. All Rights Reserved            -->
<!-- US Government Users Restricted Rights - Use, duplication or    -->
<!-- disclosure restricted by GSA ADP Schedule Contract with        -->
<!-- IBM Corp.                                                      -->

<server description="ODM Sample Server">

        <!-- Enable features -->
        <featureManager>
                <feature>servlet-3.1</feature>
                <feature>jsp-2.3</feature>
                <feature>jdbc-4.1</feature>
                <feature>appSecurity-2.0</feature>
                <feature>jaxrs-2.0</feature>
                <feature>jndi-1.0</feature>
                <feature>ssl-1.0</feature>
                <!-- For Decision Runner -->
                <feature>concurrent-1.0</feature>
                <!-- For secure JMX connection -->
                <feature>restConnector-2.0</feature>
                <feature>localConnector-1.0</feature>
                <!-- For json parsing used in miniloan-server -->
                <feature>jsonp-1.0</feature>
            <feature>ldapRegistry-3.0</feature>
        </featureManager>

        <webAppSecurity  includePathInWASReqURL="true"/>

        <webContainer deferServletLoad="false" enableDefaultIsElIgnoredInTag="true" enableJspMappingOverride="true"/>
        <applicationMonitor updateTrigger="mbean"/>

        <httpSession
                                 securityIntegrationEnabled="false"
                                 idReuse="true"
                                 useContextRootAsCookiePath="true"
                                 invalidateOnUnauthorizedSessionRequestException="true" />

        <!-- To access this server from a remote client add a host attribute to
                the following element, e.g. host="*" -->
        <httpEndpoint id="defaultHttpEndpoint"
                                  host="*"
                                  httpPort="9090"
                                  httpsPort="9443" />

        <!-- Automatically expand WAR files and EAR files -->
        <!-- <applicationManager autoExpand="true"/> -->

        <library id="H2Lib" filesetRef="H2Fileset" />
        <fileset id="H2Fileset"
                         dir="${server.config.dir}/lib"
                         includes="h2.jar" />


        <!-- RES data source -->
        <dataSource id="jdbc/resdatasource"
                                        isolationLevel="TRANSACTION_READ_COMMITTED"
                                        jndiName="jdbc/resdatasource"
                                        type="javax.sql.ConnectionPoolDataSource">
                <jdbcDriver javax.sql.ConnectionPoolDataSource="org.h2.jdbcx.JdbcDataSource"
                                                javax.sql.DataSource="org.h2.jdbcx.JdbcDataSource"
                                                javax.sql.XADataSource="org.h2.jdbcx.JdbcDataSource"
                                                libraryRef="H2Lib"/>
                <properties URL="jdbc:h2:${server.config.dir}/data/h2/resdb;MODE=HSQLDB;auto_server=true"
                                                createDatabase="create"
                                                user="ilog"
                                                password="ilog"/>
        </dataSource>


        <!--  Decision center -->
        <dataSource id="jdbc/ilogDataSource"
                                        isolationLevel="TRANSACTION_READ_COMMITTED"
                                        jndiName="jdbc/ilogDataSource"
                                        type="javax.sql.ConnectionPoolDataSource">
                <jdbcDriver javax.sql.ConnectionPoolDataSource="org.h2.jdbcx.JdbcDataSource"
                                                javax.sql.DataSource="org.h2.jdbcx.JdbcDataSource"
                                                javax.sql.XADataSource="org.h2.jdbcx.JdbcDataSource"
                                                libraryRef="H2Lib"/>
                <properties URL="jdbc:h2:${server.config.dir}/data/h2/rtsdb;MODE=HSQLDB;LOCK_TIMEOUT=20000;auto_server=true"
                                                createDatabase="create"
                                                user="ilog"
                                                password="ilog"/>
        </dataSource>

        <dataSource id="jdbc/serverextendedbrm"
                                        isolationLevel="TRANSACTION_READ_COMMITTED"
                                        jndiName="jdbc/serverextendedbrm"
                                        type="javax.sql.ConnectionPoolDataSource">
                <jdbcDriver javax.sql.ConnectionPoolDataSource="org.h2.jdbcx.JdbcDataSource"
                                                javax.sql.DataSource="org.h2.jdbcx.JdbcDataSource"
                                                javax.sql.XADataSource="org.h2.jdbcx.JdbcDataSource"
                                                libraryRef="H2Lib"/>
                <properties URL="jdbc:h2:${server.config.dir}/data/h2/rtsdb-serverextendedbrm;MODE=HSQLDB;LOCK_TIMEOUT=20000;auto_server=true"
                                                createDatabase="create"
                                                user="ilog"
                                                password="ilog"/>
        </dataSource>

        <!-- Web application security -->
        <basicRegistry id="basic" realm="customRealm">
       <user name="odmAdmin" password="odmAdmin" />
           <user name="resAdmin" password="resAdmin" />
       <user name="resDeploy" password="resDeploy" />
           <user name="resMonitor" password="resMonitor" />

                <group name="resAdministrators">
                        <member name="resAdmin" />
            <member name="odmAdmin" />
                </group>
                <group name="resDeployers">
                        <member name="resAdmin" />
                        <member name="resDeploy" />
            <member name="odmAdmin" />
                </group>
                <group name="resMonitors">
                        <member name="resAdmin" />
                        <member name="resDeploy" />
                        <member name="resMonitor" />
                        <member name="odmAdmin" />
                </group>
                <user name="rtsAdmin" password="rtsAdmin" />
                <user name="rtsConfig" password="rtsConfig" />
                <user name="rtsUser1" password="rtsUser1" />
                <user name="Bea" password="Bea" />
                <user name="Paul" password="Paul" />
                <user name="rmtuser" password="rmtuser" />

                <group name="AdminGroup">
                        <member name="rtsAdmin" />
            <member name="odmAdmin" />
                        <member name="Paul" />
                </group>
                <group name="InstallGroup">
                        <member name="rtsAdmin" />
            <member name="odmAdmin" />
                </group>
                <group name="ConfigGroup">
                        <member name="rtsConfig" />
                </group>

        </basicRegistry>

        <!-- RES console -->
        <application type="war" id="res" name="res"
                location="${server.config.dir}/apps/res.war">
                <application-bnd>
                        <security-role name="resAdministrators">
                                <group name="resAdministrators" />
                        </security-role>
                        <security-role name="resDeployers">
                                <group name="resDeployers" />
                        </security-role>
                        <security-role name="resMonitors">
                                <group name="resMonitors" />
                        </security-role>
                </application-bnd>
        </application>

        <!-- Business console -->
        <application type="war" id="decisioncenter" name="decisioncenter"
                location="${server.config.dir}/apps/decisioncenter.war">
                <classloader delegation="parentLast" />
                <application-bnd>
                        <security-role name="rtsAdministrator">
                                <group name="AdminGroup" />
                        </security-role>
                        <security-role name="rtsInstaller">
                                <group name="InstallGroup" />
                        </security-role>
                        <security-role name="rtsConfigManager">
                                <group name="ConfigGroup" />
                        </security-role>
                        <security-role name="rtsUser">
                                <special-subject type="ALL_AUTHENTICATED_USERS" />
                        </security-role>
                </application-bnd>
        </application>

        <!-- DC REST API -->
        <application type="war" id="decisioncenter-api" name="decisioncenter-api"
                location="${server.config.dir}/apps/decisioncenter-api.war">
                <classloader delegation="parentLast" />
                <application-bnd>
                        <security-role name="rtsAdministrator">
                                <group name="AdminGroup" />
                        </security-role>
                        <security-role name="rtsInstaller">
                                <group name="InstallGroup" />
                        </security-role>
                        <security-role name="rtsConfigManager">
                                <group name="ConfigGroup" />
                        </security-role>
                        <security-role name="rtsUser">
                                <special-subject type="ALL_AUTHENTICATED_USERS" />
                        </security-role>
                </application-bnd>
        </application>

        <!-- Decision Modeling -->
        <application type="war" id="decisionmodel" name="decisionmodel"
                location="${server.config.dir}/apps/decisionmodel.war">
                <classloader delegation="parentLast" />
                <application-bnd>
                        <security-role name="rtsAdministrator">
                                <group name="AdminGroup" />
                        </security-role>
                        <security-role name="rtsInstaller">
                                <group name="InstallGroup" />
                        </security-role>
                        <security-role name="rtsConfigManager">
                                <group name="ConfigGroup" />
                        </security-role>
                        <security-role name="rtsUser">
                                <special-subject type="ALL_AUTHENTICATED_USERS" />
                        </security-role>
                </application-bnd>
        </application>


        <!-- Managed executor service for Decision Runner -->
        <managedExecutorService jndiName="concurrent/drExecutorService" />

        <!-- Decision Runner -->
        <application type="war" id="DecisionRunner" name="DecisionRunner"
                location="${server.config.dir}/apps/DecisionRunner.war">
                <application-bnd>
                        <security-role name="resAdministrators">
                                <group name="resAdministrators" />
                        </security-role>
                        <security-role name="resDeployers">
                                <group name="resDeployers" />
                        </security-role>
                </application-bnd>
        </application>


        <!-- HTDS -->
        <application type="war" id="DecisionService" name="DecisionService"
                location="${server.config.dir}/apps/DecisionService.war">
        </application>

        <!-- JEE rule session sample -->
        <application type="war" id="rulesession" name="rulesession"
                location="${server.config.dir}/apps/miniloan-rest.war">
        </application>
        <!-- Loan Validation Service application -->
        <application type="war" id="loan-server" name="loan-server"
                location="${server.config.dir}/apps/loan-server.war">
        </application>

        <application type="war" id="dcclient" name="dcclient"
                location="${server.config.dir}/apps/dcclient.war">
                <application-bnd>
                        <security-role name="rtsUser">
                                <group name="rtsUser" />
                        </security-role>
                </application-bnd>
        </application>

        <application type="war" id="miniloan-server" name="miniloan-server"
                location="${server.config.dir}/apps/miniloan-server.war">
                <application-bnd>
                        <security-role name="resAdministrators">
                                <group name="resAdministrators" />
                        </security-role>
                </application-bnd>
        </application>
        <keyStore id="defaultKeyStore" password="odmAdmin" />
        <administrator-role> <group>resAdministrators</group> </administrator-role>

        <logging traceFileName="stdout"
        traceFormat="BASIC"
        traceSpecification="*=info:org.apache.solr.*=warning:com.ibm.rules.decisioncenter.webhooks.notification.*=warning"
        consoleLogLevel="INFO"/>

</server>
```

</div></details>

http用のポート:9090, https用のポート:9443 でListenすることになりますので、firewallを使用している場合は必要に応じて穴をあけておきます。

## Sample Server上のRESへのアクセス

ブラウザからRESにアクセスしてみます。
`htttp://xxx:9090/res`にアクセスし、resAdmin/resAdminでサインインします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/5c26128a-0f72-6955-701e-d65485d8f9d8.png)

ログインできました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/a6c0eb40-d8cd-bf17-8126-39665beb3765.png)

## Sample Server上のDecision Centerへのアクセス

ブラウザからDecision Centerにアクセスしてみます。
`htttp://xxx:9090/decisioncenter`にアクセスし、rtsAdmin/rtsAdminでサインインします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/cfa29c65-bf12-c82e-77ea-11de7ed95a88.png)

ログインできました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/bba5984a-08bd-736e-e7d6-521443d07a67.png)

OKそうです。

## Sample Serverの停止
参考: [Stopping the sample server](https://www.ibm.com/docs/ja/odm/8.11.0?topic=server-stopping-sample)

`<InstallDir>/shared/bin/stopserver.sh`で停止しておきます。

```
[root@Test13 ~]# /opt/IBM/ODM8110/shared/bin/stopserver.sh
/usr/bin/which: no xterm in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/opt/IBM/wlp/bin:/opt/IBM/ODM8110/shared/tools/ant/bin/)
Buildfile: /opt/IBM/ODM8110/shared/bin/build.xml

stopserver:

stop.server:

try.stop:
[wlp:server] CWWKM2001I: server.config.dir は /opt/IBM/wlp/usr/servers/odm81100 です。
[wlp:server] CWWKM2001I: server.output.dir は /opt/IBM/wlp/usr/servers/odm81100 です。
[wlp:server] CWWKM2001I: Invoke command は [/opt/IBM/wlp/bin/server, stop, odm81100] です。
[wlp:server]
[wlp:server] サーバー odm81100 を停止中です。
[wlp:server] サーバー odm81100 は停止しました。

BUILD SUCCESSFUL
Total time: 7 seconds
```