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 がリリースされました!

f:id:tokobayashi:20200423143925p:plain

別に切りのいい数字じゃないって? や、そうなんですけど、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枚だけ!

f:id:tokobayashi:20200423144022p:plain

process-script-example

スクリプトタスクのみのシンプルなプロセスサービス。お気づきかもしれませんが、DroolsjBPM といった名前は前面には出していません(実際に依存ライブラリ名には出てきますが)。ルールもプロセスもひっくるめて 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 ファイル一枚のみ。

  • scripts.bpmn : BPMN も VSCode のエクテンションやオンラインエディターで閲覧、編集します。jBPM/BPMN 関連もまた後日詳しく書きたいなあー

f:id:tokobayashi:20200423144037p:plain

その他

ruleunit-quarkus-example のデシジョンテーブル版 decisiontable-quarkus-example や、ルールとプロセスを融合した process-business-rules-quarkus 、プランニングの process-optaplanner-springboot などなどあります。

一番本格的なやつは kogito-travel-agency で、Infinispan による永続化、Kafka によるメッセージ連携、データを GraphQL で取得などさまざまな機能を体験できます。OpenShift にデプロイするにはドキュメントの以下のセクションを参照してください。

https://docs.jboss.org/kogito/release/latest/html_single/#con-kogito-travel-agency_kogito-deploying-on-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 のリンクはこちらです。

https://repo1.maven.org/maven2/org/kie/server/kie-server/7.32.0.Final/kie-server-7.32.0.Final-ee8.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" が見えるはずです。この名前はシステムプロパティで設定したものです。

f:id:tokobayashi:20200305160150p:plain

さて、前回記事でプロジェクト 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」と入力 f:id:tokobayashi:20200305160155p:plain
  • その右のボックスにはデフォルトで「stateless」とあるのでそのままでOK
  • 「完了」をクリック。ポップアップが閉じる
  • 左下の「保存」をクリック

ここまで来たらビルドして Kie Server にデプロイします。右上の「デプロイ」ボタンをクリックしてください。成功すれば「サーバー設定へのデプロイに成功し、コンテナの開始に成功しました。」というポップアップがでます。「helloProject_1.0.0-SNAPSHOT」という名前のデプロイメントユニット(コンテナとも呼ばれます)が作成され、開始されていることも確認できます。

f:id:tokobayashi:20200305160158p:plain

では実行してみましょう!

以下の 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 備忘録

インストール

developers.redhat.com

crc setup

crc config set memory 12000
crc start

eval $(crc oc-env)

crc config は crc start の前にする。すでに作っていたら、一回 crc delete する必要がある(v 1.4.0 現在)

[BUG] The crc start -m option only works the first time the VM is created · Issue #809 · code-ready/crc · GitHub

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