- root のパスワードはー
https://fedoraproject.org/wiki/Changes/ReduceInitialSetupRedundancy#User_Account
- CapsLock を Ctrl に
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
kogito deploy-service example-quarkus https://github.com/kiegroup/kogito-examples/ --context-dir=drools-quarkus-example --native
kogito delete-service example-quarkus
<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>
mvn clean compile quarkus:dev -DskipTests -Dsuspend=true
./mvnw package -Pnative -Dquarkus.native.container-build=true
./mvnw test-compile failsafe:integration-test
quarkus.log.level=INFO quarkus.log.category."org.hibernate".level=DEBUG
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
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
mvn clean package spring-boot:run -Dspring-boot.run.jvmArguments="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005"
bash --login rvm use ruby-2.5.1 --default
/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
Run `bundle install` to install missing gems.
bundle install
bundle exec jekyll serve
_config.yml の
baseurl: "/"
から
baseurl: ""
に変更して bundle exec jekyll serve
まだいまいちよくわからん
https://github.com/generalui/jekyll-image-size/blob/master/README.md
この記事は 赤帽エンジニア 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
速くなってますね!
ただし、あくまでこれは人工的なルールでの人工的なテストです。ルールのパフォーマンスは様々な条件が影響しますので、測定時には実際に使うルール、テストシナリオで計測するようにしてください。