kogito-operator / kogito CLI 備忘録

https://github.com/kiegroup/kogito-cloud-operator#kogito-cli

Setup OpenShift 4 UPI

Login as kubeadmin (password は quicklab の OpenShift Credentials から)

-> Operators -> OperatorHub -> Search with kogito

Install kogito-operator to a project (e.g. 'default')

oc login --token=... (Command Line Tools)

Download kogito CLI via https://github.com/kiegroup/kogito-cloud-operator/releases

-> Unzip

confirm oc version, kogito version

oc version

kogito --version

サービス作成

kogito use-project default

kogito deploy-service example-quarkus https://github.com/kiegroup/kogito-examples/ --context-dir=drools-quarkus-example
KogitoApp 'example-quarkus' successfully created on namespace 'default'
You can see the deployment status by using 'oc describe kogitoapp example-quarkus -n default'
Your Kogito Runtime Service should be deploying. To see its logs, run 'oc logs -f bc/example-quarkus-builder -n default'

アプリテスト

URL は Routes で確認

curl -X GET http://example-quarkus-default.apps.tkobayas01.lab.pnq2.cee.redhat.com/candrink/john/35

native build

kogito deploy-service example-quarkus https://github.com/kiegroup/kogito-examples/ --context-dir=drools-quarkus-example --native

サービス削除

kogito delete-service example-quarkus

Quarkus 備忘録

  • quarkus:dev で jvmArgs
      <plugin>
        <groupId>io.quarkus</groupId>
        <artifactId>quarkus-maven-plugin</artifactId>
        <executions>
          <execution>
            <goals>
              <goal>build</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <jvmArgs>-XX:+UnlockExperimentalVMOptions -XX:hashCode=0</jvmArgs>
        </configuration>
      </plugin>
  • suspend して debugger 待ち
mvn clean compile quarkus:dev -DskipTests -Dsuspend=true
  • container で native build も簡単
./mvnw package -Pnative -Dquarkus.native.container-build=true
  • できている native image に対してテスト
./mvnw test-compile failsafe:integration-test

Logging

quarkus.log.level=INFO
quarkus.log.category."org.hibernate".level=DEBUG

quarkus-maven-plugin

  • GenerateCodeMojo (mvn debug 18787) QuarkusBootstrap -> CuratedApplication -> QuarkusClassLoader

    CodeGenerator -> List = []

  • DevMojo (mvn debug 18787)

    DevModeRunner

    debug port

    DevModeRunner.run() -> java.lang.ProcessBuilder -> java.lang.ProcessImpl.start()

    DevMojo.execute() loop : check pom.xml changes

live reload (hot swap)

  • RuntimeUpdatesProcessor (quarkus 5005)

    VertxHttpHotReplacementSetup -> RuntimeUpdatesProcessor.doScan() -> restart = true ->

                    if (restart) {
                        routingContext.request().headers().set(HEADER_NAME, "true");
                        VertxHttpRecorder.getRootHandler().handle(routingContext.request());
                    }
RuntimeUpdatesProcessor.doScan(boolean) line: 185    
VertxHttpHotReplacementSetup$2.handle(Promise<Boolean>) line: 61  
VertxHttpHotReplacementSetup$2.handle(Object) line: 51  
EventLoopContext(ContextImpl).lambda$executeBlocking$2(PoolMetrics, Object, Handler, Handler) line: 313 
247875749.run() line: not available 
ThreadPoolExecutor.runWorker(ThreadPoolExecutor$Worker) line: 1128  
ThreadPoolExecutor$Worker.run() line: 628   
FastThreadLocalRunnable.run() line: 30  
VertxThread(Thread).run() line: 834 

Jekyll 備忘録

Jekyll 備忘録

ruby

bash --login
rvm use ruby-2.5.1 --default

bundler のバージョンを Gemfile.lock の BUNDLED WITH に合わせる

/home/tkobayas/.rvm/rubies/ruby-2.5.1/lib/ruby/2.5.0/rubygems.rb:289:in `find_spec_for_exe': can't find gem bundler (>= 0.a) with executable bundle (Gem::GemNotFoundException)
gem install bundler -v 1.16.4

Could not find XXX

Run `bundle install` to install missing gems.
bundle install

Gemfile の環境で実行するには

bundle exec jekyll serve

画像が見えないなど

_config.yml の

baseurl: "/"

から

baseurl: ""

に変更して bundle exec jekyll serve

Jekyll-Image-Size

まだいまいちよくわからん

https://github.com/generalui/jekyll-image-size/blob/master/README.md

https://rubygems.org/gems/jekyll-image-size

Droolsブログ : 09 Executable Model

09 Executable Model

この記事は 赤帽エンジニア Advent Calendar 2019 18 日目の記事です。

07 MVEL で書いたように、Drools 7 から Executable Model というオプションが利用可能となっています。これは kjar のビルド時点で DRL を Java クラス化し、実行時の性能を良くしよう、というものです。最新バージョンでは多数のバグがフィックスされ、安定して使えるようになってきました。

利用方法は簡単です。-DgenerateModel=YES というオプションを mvn に付けるだけです。

$ mvn clean install -DgenerateModel=YES

これで Executable Model を使用した kjar がビルドされます。 kjar の利用方法については 05 KJAR を参照ください。

ではサンプルでやってみましょう。

git clone https://github.com/tkobayas/drools-blog.git

今日のエントリはその中の 09_executable-model です。

kjar のプロジェクトはその中の drools-hello-kjar 、実行するテストクライアントのプロジェクトは drools-hello-client です。

drools-hello-kjar の Sample.drl の中には単純なルールが 1000 個入っています。

rule "rule0"
  when
    $p : Person( age >= 0 && age < 5 )
  then
    resultList.add( kcontext.getRule().getName() + " : " + $p );
end

rule "rule1"
  when
    $p : Person( age >= 5 && age < 10 )
  then
    resultList.add( kcontext.getRule().getName() + " : " + $p );
end
...

まずは普通にビルドしてみましょう。

$ cd drools-hello-kjar
$ mvn clean install

そしてテストします。こちらは 1000 個のファクトを投入して逐一 fireAllRules します。

$ cd drools-hello-client
$ mvn test
...
elapsed time for load  = 4828ms
elapsed time for execution = 1272ms

次は executable-model でビルドします。

$ cd drools-hello-kjar
$ mvn clean install -DgenerateModel=YES

"target/generated-sources" ディレクトリを覗いてみると分かりますが、大量の Java コードが生成されています。

$ tree target/generated-sources/
target/generated-sources/
└── drools-model-compiler
    └── main
        └── java
            ├── org
            │   └── example
            │       ├── LambdaPredicate00B17E09F368ECC48D2C9D8501927757.java
            │       ├── LambdaPredicate00BE0AF256D7A54ACF309C5375D52A02.java
            │       ├── LambdaPredicate00CD93B16506F18C96F2AF35D0A99C82.java
            │       ├── LambdaPredicate00E858E9381395E6402284C160581DD8.java
            │       ├── LambdaPredicate011DF5425A3D14FE82E6277403412AAF.java
            │       ├── LambdaPredicate012F668EF4CBE53CC643A6161D4CDFC9.java
            ...

もう一度テストしてみましょう。

$ cd drools-hello-client
$ mvn test
...
elapsed time for load  = 3979ms
elapsed time for execution = 632ms

速くなってますね!

ただし、あくまでこれは人工的なルールでの人工的なテストです。ルールのパフォーマンスは様々な条件が影響しますので、測定時には実際に使うルール、テストシナリオで計測するようにしてください。

「Drools 入門」 at 2019 日本 JBoss ユーザ・グループ勉強会

2019/12/11, 日本 JBoss ユーザ・グループ勉強会 で Drools 入門のプレゼンをしました。

結構 Drools を知ってる方も多く、懇親会でもいろいろ話せてよかったです。「Drools 使ってみようかな」と仰られていた方々が適切な適用領域を把握されているのが印象的でした。

twitter の様子。

#jjbug - Twitter Search

スライドはこちら。

speakerdeck.com

内容的には Drools ブログの 01 から 03 に相当します。興味を持っていただけたらこちらもご覧ください。

Droolsブログ カテゴリーの記事一覧 - tokobayashi’s blog