はじめに
ODM(Operational Decision Manager)というIBM製品があります。これはアプリケーションに含まれる"ビジネス・ルール"を外出しにして容易に開発/管理を行う仕組みを提供してくれるものです。
このシリーズではODMを試してみたときのログを記載していきます。
まずはODM概要の整理と、Linux上に各サーバーを立てる想定でインストールするところまで。
関連記事
IBM Operational Decision Manager メモ - (1) 概要、Linuxへのインストール
IBM Operational Decision Manager メモ - (2) ルール開発から実行までの流れ
IBM Operational Decision Manager メモ - (3) Decision Center利用の流れ
IBM Operational Decision Manager メモ - (4) Linux上での環境セットアップ
IBM Operational Decision Manager メモ - (5) z/OS上での環境セットアップ
IBM Operational Decision Manager メモ - (6) z/OS上でのルール呼び出し
IBM Operational Decision Manager メモ - (7) zODM環境補足
ODMの概要/用語の整理
参考:
Decision automation for business agility
Rule Execution Server architecture
"Decision"(意思決定) とか言われると今一つピンと来ない感じがしますが、これはよくある例で言うと、例えば、ローン審査を行う業務において申請者の様々な条件(年齢、職業、現時点での借入金額、etc...)を元にローン可否を判断する、とか、保険料算定業務において申込内容(保険商品、付帯特約、保険対象の各種条件、etc...)を元に保険料を算出する、といったように、条件に応じたなんらかの業務上の判断をすることを指しています。
"Decision automation"(意思決定の自動化)というと何か大仰な表現な気がしますが、これは上のような判断を自動化するということで、大昔からローン判定やら保険料算定というのはアプリケーション中のif文とかcase文の塊として実装され、それにより自動化は行われてきた訳です。ですのでこの概念自体は特別目新しいものではありません。
ただ、業務によってはその条件分岐が非常に複雑になるものがあり、ソースコード中にif文やcase文を駆使して実装すると可読性が悪く、管理やメンテナンスが煩雑になってしまう場合があります。
ODMでは、そのような意思決定に関わるロジック(≒if文の塊)を外出しにして、その意思決定ロジックに特化した開発/実行/管理のための仕組みを提供しています。この、抽出された意思決定ロジック(≒if文の塊)は"ビジネス・ルール"と呼ばれたりします。
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とかパッと見まぎらわしいので注意してください。この辺のネーミングセンスがイマイチですなぁ...。)
基本的な流れは以下の様な感じです。
(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側に構築します。構築したい環境のイメージは以下の通りです。
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
まずは、上のような構成を行うにあたって必要な各種S/Wをインストールしていきます。
各コンポーネントのインストール on Linux
参考: Installing product components
Javaのインストール
※最初IBM Semeru Runtime V11を使おうとしたのだが、ODMのインストール時にうまく認識されなかったので後からV8を入れなおした。
参考:IBM Semeru Runtime 11のインストール
IBM Semeru Runtimeの11の最新を使用することにします。
IBM Semeru Runtime 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)
IBM Semeru Runtimeの8の最新を使用することにします。
IBM Semeru Runtime 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を選択して次へ
これでインストール完了。"Installation Managerの再起動"をクリックするとInstallation Managerが起動します。
※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のメニューからファイル - 設定を選択
参照ボタンから、.../disk1/DecisionServerRules/repository.configを選択してOK
これでDecisionServerRules用のリポジトリが追加されます。
同様に、DecisionCenter用のリポジトリも追加してOK
Installation Managerのトップからインストールを選択
Decision Center、および、Decision Server Rulesを選択して次へ
最初、以下のようにJava(JDK)の場所としてIBM Semeru Runtime 11のディレクトリを示したら警告マークがついた。
仕方無いので IBM Semeru Runtime 8をインストールし直してそのパスを指定したら警告マークが外れた。
Liberty Serverのロケーションに、Libertyを展開したディレクトリを指定
/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)
セットアップウィザードを使用してDb2をインストールします。(要XServer)
[root@Test13 /Inst_Image/ODM811/server_dec]# ./db2setup
DB2バージョン11.5.4.0 Server Editionを選択
カスタムを選択し、"インスタンスを作成する"、"IBMの条項に同意する"にチェックして次へ
ここでは"基本アプリケーション開発ツール"を追加でチェックしています。
インスタンスが作成されるので稼働確認
[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
上の記述にならって、Eclipse 4.16(2020-06R)をダウンロードする。
こちらからWindows 64bit版をダウンロード。
https://www.eclipse.org/downloads/packages/release/2020-06/r
Rule Designerのインストール
事前にWindowsにもInstallation Managerをインストール。ODMに付いているWindows版のインストーラー(install.exe)を使えばよく基本Linuxと同じなので詳細は割愛。
Installation Managerを起動し、Linuxの時と同様にファイル-設定からリポジトリを追加します。今回はDecisionServerRulesのリポジトリのみ追加。
で、インストールに進みます。
確認
Sample Serverの作成/起動
インストールの確認用にサンプルのサーバーを構成/起動するantスクリプトが用意されているので、そちらを実行してみます。
参考: Starting the sample server
<InstallDir>/shared/bin/startserver.sh
を実行します。
startserver.sh実行ログ
[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
これで"odm81100"という名前のLibertyサーバーが作成されて、そこにRESとDecision Center用のアプリがデプロイされることになります。データベースとしてはDb2ではなくJavaベースのH2が使われます(※H2はインストール作業などは不要です)。ちなみにH2は開発目的では使用できますが、本番環境での使用はサポートされていません。
参考: 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.
サンプルとして作成される構成は以下の様なイメージとなります。
生成されたLibertyのディレクトリ階層(workareaは除く)
[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
生成されたLibertyの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>
http用のポート:9090, https用のポート:9443 でListenすることになりますので、firewallを使用している場合は必要に応じて穴をあけておきます。
Sample Server上のRESへのアクセス
ブラウザからRESにアクセスしてみます。
htttp://xxx:9090/res
にアクセスし、resAdmin/resAdminでサインインします。
Sample Server上のDecision Centerへのアクセス
ブラウザからDecision Centerにアクセスしてみます。
htttp://xxx:9090/decisioncenter
にアクセスし、rtsAdmin/rtsAdminでサインインします。
OKそうです。
Sample Serverの停止
参考: Stopping the sample server
<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