https://hub.docker.com/r/jboss/business-central-workbench-showcase/
CodeReady Workspace 備忘録
Failure in creating/running a workspace
Failed to pull image "registry.redhat.io/codeready-workspaces/theia-rhel8 nvalid username/password: unauthorized:
-> change tag via plugins / editor etc.
plugin
Introduction to Eclipse Che | Eclipse Che Documentation
F1 -> plugin で補完 -> Plugin Manager: Add Registry -> 名前(適当)、vsixのURI 入れる
Using a Visual Studio Code extension in Che https://docs.google.com/document/d/1gZHKXe1GEduY48RgntMUrqjSs9llq8WpCmgqssY5Ikw/edit#heading=h.s7tesxgcl8k3
How to add extensions and plugins to Eclipse Theia - EclipseSource
Kafka備忘録
bin/zookeeper-server-start.sh -daemon config/zookeeper.properties
bin/kafka-server-start.sh -daemon config/server.properties
tail -f logs/server.log
bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic alerts
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic alerts
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic alerts
bin/kafka-server-stop.sh
bin/zookeeper-server-stop.sh
dmn-event-driven-quarkus の場合
$ docker-compose up -d
$ mvn clean compile quarkus:dev
$ cd /home/tkobayas/usr/local/Kafka/230/kafka_2.12-2.3.0
$ bin/kafka-console-producer.sh --broker-list localhost:9092 --topic dmn-event-driven-requests < sample2.json
http://localhost:9000 で topic の中身を確認
$ jq -rc . ./src/test/resources/events/evaluate_all/full_result/all/input.json | /home/tkobayas/usr/local/Kafka/230/kafka_2.12-2.3.0/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic dmn-event-driven-requests
もいける。
1行で渡すように
終了は
$ docker-compose down
Droolsブログ : 12 Kogito Examples
12 Kogito Examples
Kogito 0.9.1 がリリースされました!
別に切りのいい数字じゃないって? や、そうなんですけど、0.9.1 はドキュメントや examples を整備して「いい感じに仕上げました」マイルストーンリリースなのです。今後もバージョン自体はどんどん上がっていくのですが(0.10.0 もう出た)、今まで様子見だったひともここらで手を出してみては?というところです。
ドキュメントはこちら。英語だけど https://www.deepl.com/translator にぶっこめば OK!
https://docs.jboss.org/kogito/release/latest/html_single/
今回は Kogito がどんなものか体験するため kogito-examples をざっと紹介します。
まず clone します。デフォルトで stable ブランチになっています。このブランチが最新安定バージョン(現時点で 0.9.1)です。
git clone https://github.com/kiegroup/kogito-examples.git cd kogito-examples
中にはたくさんのサンプルがあります。どのサンプルにも README.md があり、実行コマンド、テスト用の curl コマンドが記載されています。
Quarkus 用のサンプルを紹介しますが、それぞれ対になる Spring Boot 用のサンプルもあります。内容はほとんど同じで、起動コマンドが違うだけです。
ruleunit-quarkus-example
基本的なルール実行サービスです。ローン申請ファクト(LoanApplication)を POST すると、承認された申請が返ってきます。
mvn clean compile quarkus:dev
で、起動。起動したら次の curl コマンドでテストできます。
curl -X POST -H 'Accept: application/json' -H 'Content-Type: application/json' -d '{"maxAmount":5000,"loanApplications":[{"id":"ABC10001","amount":2000,"deposit":100,"applicant":{"age":45,"name":"John"}}, {"id":"ABC10002","amount":5000,"deposit":100,"applicant":{"age":25,"name":"Paul"}}, {"id":"ABC10015","amount":1000,"deposit":100,"applicant":{"age":12,"name":"George"}}]}' http://localhost:8080/find-approved
ソースコードを説明すると
- RuleUnitQuery.drl : ルールを記述する DRL。ポイントは「unit LoanUnit;」という宣言です。これで LoanUnit クラスと組み合わせて、サービス全体を生成できるようにします。ルールの「/loanApplications[]」という記法は LoanUnit クラスの DataStore loanApplications からファクトを評価するということですが、通常の DRL での「LoanApplication()」パターンと同じだと思っていいです。また DRL に「query」も記述されています。これが上記テストで使用した REST エンドポイントを生成します。
- LoanApplication.java : ローン申請ファクト
- Applicant.java : 申請者情報。LoanApplication のただのプロパティです
- LoanUnit.java : RuleUnitData を implements します。今までの Drools では使われていなかった(実際には存在していましたが)ルールユニットという仕組みです。仕組みといっても簡単にいうとルールとファクトを結び付けるもので、 DataStore というクラスでファクトをラップするだけです。「maxAmount」は DRL で global として扱われます。この情報を DRL 側に書いて、このクラスを不要にする記法もあります。
その他の必要なコードは quarkus:dev で生成されます。target/ の下を見てみると面白いでしょう。
README.md には dev じゃない実行や GraalVM による native ビルドについても記載されています。
OpenShift/Red Hat CodeReady Container 上での実行についてもまた後日書くつもりですが、手順のみならこちら(https://tkobayas.wordpress.com/2020/03/23/simple-steps-to-run-kogito-on-red-hat-codeready-containers/)を参照ください
dmn-quarkus-example
DRL の代わりに DMN を使ったサービスです。DMN についてはまた後日ブログを書く予定ですが、とりあえず実行してみましょう。交通違反情報を POST すると罰金や免許停止かどうかが返ってきます。
mvn clean compile quarkus:dev
起動したら
curl -X POST -H 'Accept: application/json' -H 'Content-Type: application/json' -d '{"Driver":{"Points":2},"Violation":{"Type":"speed","Actual Speed":120,"Speed Limit":100}}' http://localhost:8080/Traffic%20Violation
ソースコードは dmn ファイル1枚だけ!
- Traffic Violation.dmn : DMN はエディターで閲覧、編集します。VSCode のエクテンションがおすすめです(https://docs.jboss.org/kogito/release/latest/html_single/#con-kogito-modelers_kogito-creating-running)。オンラインエディターもあります(https://kiegroup.github.io/kogito-online/#/)。開くとルールの構成が簡単に分かりますね。他のクラスが必要無いのは DMN 自体に型情報が定義されていること、また入出力は Map ベースで行っており、カスタム Java クラスが必要無いからです(カスタム Java クラスを用いた入出力も開発中)。
process-script-example
スクリプトタスクのみのシンプルなプロセスサービス。お気づきかもしれませんが、Drools や jBPM といった名前は前面には出していません(実際に依存ライブラリ名には出てきますが)。ルールもプロセスもひっくるめて Kogito という考え方です。
mvn clean compile quarkus:dev
起動したら
curl -X POST -H 'Content-Type:application/json' -H 'Accept:application/json' -d '{"name" : "john"}' http://localhost:8080/scripts
簡単過ぎですかね。これをベースにプロセスを拡張していってもいいでしょう。こちらもソースは bpmn ファイル一枚のみ。
その他
ruleunit-quarkus-example のデシジョンテーブル版 decisiontable-quarkus-example や、ルールとプロセスを融合した process-business-rules-quarkus 、プランニングの process-optaplanner-springboot などなどあります。
一番本格的なやつは kogito-travel-agency で、Infinispan による永続化、Kafka によるメッセージ連携、データを GraphQL で取得などさまざまな機能を体験できます。OpenShift にデプロイするにはドキュメントの以下のセクションを参照してください。
Droolsブログ : 11 Kie Server
11 Kie Server
ここまでルールエンジンを実行するために直接 Java コードを書いてましたが、REST API での実行も可能です。その場合 REST エンドポイントを公開するための Web アプリが必要です。そのために Kie Server という Web アプリが提供されています。Kie Server は以下のようなことができます。
- KJAR のデプロイ、アンデプロイ、スタート、ストップ(Business Central または REST API で管理)
- KJAR のリモート実行(ルール、プロセス、ソルバー)
- REST または JMS に対応
- ペイロードは JAXB, JSON, XSTREAM に対応
- 上記プロトコルをラップした Java クライアント API を提供
などなど。
Kie Server はアプリケーションサーバーにデプロイすることで、ルールエンジンサーバーとして動作します。クライアントは REST API でファクトをインサート、ルール実行、結果の取得を行います。ルールエンジンを Kie Server 側にすることでクライアントは CPU/メモリ消費を分離、軽量化することができます。
Kie Server は単独でも利用可能ですが、Business Central により GUI 管理することができます。Kie Server と Business Central は異なるサーバーで運用可能で、本番稼動時にはそのほうがおすすめですが、開発時には同一サーバーで利用もできます。
では使ってみましょう。
前回 10 Business Central で使った WildFly に Kie Server をデプロイしていきます。WildFly + Business Central のセットアップは前回記事を参照してください!
こちらのリンクの「KIE Server WARS」から「ee7, ee8, webc WAR」をクリックし、kie-server-7.XX.0.Final-ee8.war をダウンロードします。
https://www.drools.org/download/download.html
2020年3月現在で 7.33.0.Final が最新バージョンですが、前回記事で 7.32.0.Final を使って進めているのでここでは 7.32.0.Final の WAR をダウンロードします(が、後からこのブログを読んだ人は最新バージョンを使ってね!)。 7.32.0.Final の WAR のリンクはこちらです。
wildfly-14.0.1.Final/standalone/deployments の下に WAR をコピーします。
さて、WildFly を起動する前に2つやることがあります。
1) WAR名変更
アクセス時の URL を簡単にするために WAR 名を変更します。必須ではないですが、変更しない場合、以下の説明の URL は適宜読み替えて下さい。
- business-central-7.32.0.Final-wildfly14.war -> business-central.war
- kie-server-7.32.0.Final-ee8.war -> kie-server.war
2) システムプロパティ
以下のシステムプロパティを standalone-full.xml に追加してください。ユーザは前回記事で作成したとおりです。ロール kie-server を持たせておくのを忘れないように。パスワードはサンプルなので平文ですが、もちろん隠すことも出来ます。詳しくは WildFly のドキュメントを参照ください。
<system-properties> <property name="org.kie.server.controller" value="http://localhost:8080/business-central/rest/controller"/> <property name="org.kie.server.controller.user" value="rhdmAdmin"/> <property name="org.kie.server.controller.pwd" value="password1!"/> <property name="org.kie.server.id" value="default-kieserver"/> <property name="org.kie.server.location" value="http://localhost:8080/kie-server/services/rest/server"/> <property name="org.kie.server.user" value="rhdmAdmin"/> <property name="org.kie.server.pwd" value="password1!"/> </system-properties>
では WildFly を起動します。Kie Server が MDB を使用するので、今回は standalone-full.xml を使います。
$ ./standalone.sh -c standalone-full.xml
起動には少々時間がかかります。。。Kie Server デプロイ後もごにょごにょログがでます。
17:51:25,241 INFO [org.jboss.as.server] (ServerService Thread Pool -- 45) WFLYSRV0010: Deployed "kie-server.war" (runtime-name : "kie-server.war") ...
まずは Business Central が Kie Server を認識しているか確認してみましょう。
http://localhost:8080/business-central/
[メニュー]->[デプロイ]->[実行サーバー] で確認できます。"default-kieserver" が見えるはずです。この名前はシステムプロパティで設定したものです。
さて、前回記事でプロジェクト helloProject を作っていたのでそれをデプロイします。プロジェクトが無い人は前回記事を参考に作ってください(テストシナリオは不要です)。
そしてデプロイ前に1点、プロジェクトに追加することがあります。それはステートレス ksession を設定することです。「実行して結果を受け取って終了」というユースケースではステートレス ksession のほうが適切です。また Kie Server ではそのような使い方が推奨です。Kie Server でステートフル ksession を使うことも可能ですが、障害時のハンドリングなどが困難になります。ステートレス ksession については 04 ステートレス ksession をご覧ください。
さてステートレス ksession の設定ですが、Business Central で以下のように進めます。
- プロジェクトの [設定]タブ -> [KIE bases] から「KIE ベースの追加」をクリック
- 名前に「mykbase」と入力
- その kbase 設定の右のほうに「KIE sessions」というリンクがあるのでそれをクリック
- ポップアップが出るので、「KIE session を追加」をクリック
- 名前に「myksession」と入力
- その右のボックスにはデフォルトで「stateless」とあるのでそのままでOK
- 「完了」をクリック。ポップアップが閉じる
- 左下の「保存」をクリック
ここまで来たらビルドして Kie Server にデプロイします。右上の「デプロイ」ボタンをクリックしてください。成功すれば「サーバー設定へのデプロイに成功し、コンテナの開始に成功しました。」というポップアップがでます。「helloProject_1.0.0-SNAPSHOT」という名前のデプロイメントユニット(コンテナとも呼ばれます)が作成され、開始されていることも確認できます。
では実行してみましょう!
以下の curl コマンドで、Person オブジェクトを insert します。明示的に fireAllRules と言っていませんが、ステートレスの場合、自動的に fireAllRules もやってくれます。
curl -u rhdmAdmin:password1! -X POST -H 'Content-Type: application/json' http://localhost:8080/kie-server/services/rest/server/containers/instances/helloProject_1.0.0-SNAPSHOT -d '{"lookup":"myksession","commands":[{"insert":{"object":{"com.myspace.helloproject.Person":{"name":"太郎","age":30,"adult":false}},"out-identifier":"fact-1"}}]}'
次のようなレスポンスが返ってきます。
{ "type" : "SUCCESS", "msg" : "Container helloProject_1.0.0-SNAPSHOT successfully called.", "result" : { "execution-results" : { "results" : [ { "value" : {"com.myspace.helloproject.Person":{ "name" : "太郎", "age" : 30, "adult" : true }}, "key" : "fact-1" } ], "facts" : [ { "value" : {"org.drools.core.common.DefaultFactHandle":{ "external-form" : "0:1:155540311:155540311:1:DEFAULT:NON_TRAIT:com.myspace.helloproject.Person" }}, "key" : "fact-1" } ] } } }
ルールが実行されて adult が true になってますね。
Red Hat CodeReady Containers 備忘録
インストール
crc setup crc config set memory 12000 crc start eval $(crc oc-env)
crc config は crc start の前にする。すでに作っていたら、一回 crc delete する必要がある(v 1.4.0 現在)
version up
ERRO Error creating host: Error creating the VM: Error creating machine: Error in driver during machine creation: virError(Code=9, Domain=20, Message='operation failed: domain 'crc' already exists with uuid 2fecb995-b740-4b38-9c10-cf7c50087fc1')
sudo virsh undefine crc
trouble shooting
FATAL Failed to check if libvirtd service is active $ sudo systemctl restart libvirtd
FATAL Bundle 'crc_libvirt_4.3.0.crcbundle' was requested, but the existing VM is using 'crc_libvirt_4.3.8.crcbundle' $ crc delete
コンソール
crc console
kube:admin をクリック -> kubeadmin でログイン
htpasswd_provider をクリック -> developer でログイン
リモートアクセス
How to access CRC or apps deployed on CRC remotely · Issue #705 · code-ready/crc · GitHub