drools

Drools5.0リリース!

http://www.jboss.org/drools コングラッツ!!

amazonで購入できます

Jboss Drools Business Rules作者: Paul Browne出版社/メーカー: Packt Publishing発売日: 2009/03/30メディア: ペーパーバック クリック: 9回この商品を含むブログ (2件) を見る 数少ない本ですし買っときますか。。。contentsみた感じでは俺の方がビギナー…

domain specific flowのつづき

今度はruntime編。独自workitemの振る舞いを指定するには、以下の手順のみ。 1. WorkitemHandlerを実装するクラスを用意 2. statefulesessionからworkitemManager経由で独自workitemをregisterする 以上 例えば public class AutoHandler implements WorkIte…

掟破りの逆ぶりエディタ

往年の藤波辰巳vs長州力の試合で古館さんがこのセリフをいってるところを思い浮かべながらみると感慨深いかもしれません. って感じ。 こういうのがdrools-flowだと簡単にできます。Domain Specific Itemと呼んでいます。フローってBPMNをはじめ画像って固定…

Drools Guvnorにちょこっとコントリビュート

Guvnorというルールを管理するやつがいるんですがちょっとした勢いで日本語対応してMichaelさんに話したらwelcomeということで、あれよこれよでblogでも紹介してもらいました http://blog.athico.com/2009/03/more-translations.html で、jbossianのブログっ…

Drools IDEではじめる

DroolsをやるにはまずはIDEからです。基本的にDroolsを動作させるのにミニマムなセットは以下のところからDrools 5.0.0.CR1 BinariesとDrools 5.0.0.CR1 IDEをダウンロードして、unzipします。 ダウンロードはこちらから. http://www.jboss.org/drools/downl…

RHS (action/then)

then側に何をするか記述するわけですが、drools特有のworkingMemoryに対する操作を書いたりするので書いておく。 method 説明 update(Object obj) workingMemoryに既にinsertしているデータが変わったことを伝える update(Object obj, FactHandle handle) 同…

リファレンス accumulate -1

これも同様にfromとあわせて使います、accumulate(蓄積)してその結果を使って何かをするときに便利です。標準のaccumulate用のfunctionも用意されているので簡単なsum functionを使ったサンプルをば.エレベータの体重制限のルール例です(デブネタばかりです…

リファレンス collect

昨日のfromとあわせて利用します、文字通り集める(抽出)という宣言になります。例を見た方がわかりやすいので以下に例をば。 when ArrayList( $total : size > 0 ) from collect( Person( weight > 99 ) ) then results.add($total); とルールを書いてJava…

リファレンス from

リファレンスの参照を指定する場合に利用します。例えば、あるクラスのフィールドがListをもち、「その」Listの中である条件を満たしていたら、といったルールがあった場合に「その」をfromで実現します。以下の例ではHealthList(健康リスト)というクラスの…

リファレンス forall

forallはworkingMemory上に存在するすべてのものが条件にマッチする場合、という願いをこめるときに使います。たとえば rule "vote" when forall( Vote( result == 'OK' ) ) $s : State(); then System.out.println("満場一致"); $s.moveTo('end'); end ファ…

リファレンス exists

これはワーキングメモリに存在しているか、ということなんだけど正確には「ひとつでもあるか」となります。まずは豚もおだてりゃ木に登るのシンプルな例。 rule "climbtree" when $person : Person(action == 'おだてる') exists Tree() $pig : Pig() then $…

Drools5.0.0.CR1リリース

http://blog.athico.com/2009/03/drools-50-cr1-new-and-noteworthy.html に細かいこと載ってます。目標は3/19にGA目標らしい、でドキュメントまとめにフォーカスするといってるけど、結構ボリュームあるし大丈夫なんかなぁ。。CRなのでそうここからズレはな…

リファレンス restriction

ルール用語でrestrictionとよく用いられていますが、単純に条件のことね、whenのTypeの()の中で記述する部分。指定の仕方として今までのようなもの以外にも細かく分類するとこういう書き方もできるよ、というのが以下の3つ。 1.return Value Restriction …

リファレンス dateとboolean

また小物を確認。Date型のフィールドを記述する例はこちら。 rule "you are born now!!" when $p : Person(birthDay >= "20090310") then System.out.println("うまれたー"); end で、実はこの書式でリテラルで記述するにはおまじないが必要です。 System.se…

リファレンス memberOf/contains/soundslike

確定申告 is over!!わあい\(^▽^\)(/^▽^)/わあいっ.やっと奥さんのピリピリがとれてホッと一息。というわけで小物を確認していく。まずは日本人としては使いどころがわからない、soundslike!です。英語でよく聞く言葉なんだけど、Soundexにもとづく条件チェ…

リファレンス matches

Java 正規表現のように条件判定も可能です。たとえばJumperクラスにnameフィールドを持たせて"Waki7"だとマッチするルールの記述例です。 when jumper : Jumper(name matches "[Ww]aki[0-9]" ) 逆にnot matchesというのもありやんす。

リファレンス conjuction

今までのno-loop, agenda-groupなどはルール属性といわれる宣言でした。他にもdurationなどあるけど、必要に応じて書く。ここからはLHSの中(Whenの中)での記述についてまとめてく。既に今までのサンプルで $p : Jumper(step == 1) といったものがあり、コロ…

リファレンス global

globalの宣言でJavaからdroolsに変数を渡すことができます。globalでわたすとworkingMemoryにはinsertされないです。staticな変数やルールのthenの中のアクションで必要な変数をわたす、何かルールでの処理結果の戻しとかが主な目的です。よく見かけるのはhi…

リファレンス activation-group

各ルールにactivation-groupというグループ名を宣言できます。同名が宣言されたルールの間で実行時に何が行われるかというと、ほとんどXORです。2つのルールで同名のグループ名を宣言して実行し、まず片方がマッチングして処理されるとします。次にもう片方…

リファレンス agenda-groupとauto-focus

agendaというのはルールのマッチングなど実行制御をおこなう中心人物で、agenda-groupはその実行のパーティション的なものになります。今までのサンプルでは特に記述してませんでしたがその場合は"Main"というagenda-groupの上で実行されていたのです。Main…

リファレンス salience

ルールを複数定義上記すると同じ条件でマッチするときがあります。デフォルトはLIFO方式なのでルール定義を下に宣言したものからマッチングされます。たとえば rule "rule-1" when Person() then System.out.println("rule-1"); end rule "rule-2" when Pers…

リファレンス no-loop

no-loopは、そのルール自身を回帰的に連続して処理されないようにするときに宣言します。たとえば package org.drools.test; import com.sample.Jumper; rule "ループ" when jumper : Jumper( ) #エンジンにassertされたファクトの型がJumperの場合、という…

記述したルールの確認

前に書いたルールを1個抜き出したのが以下のものになります。 で、ルールエンジン、ルールエンジンといわれていますが、中身の中枢にあるのはreteエンジンで基本的にはパターンマッチングエンジンです。reteエンジンで如何に効率よいアルゴリズムでマッチン…

whenとthen

まずはシンプルに動かしてみます。Jumperというクラスにstepというintのフィールドを持たせます。意味合いとしては0:start,1:hop,2:step,3:jumpにします。0で始めたらhopしなさい、hopしたらstepにしなさい、stepしたらjumpやろー!というのを簡単にJavaで書…

ルールファイル上の予約語

他のプログラム言語同様に予約語があります。 ・絶対つかっちゃだめ編 rule,query,when,then,end,null,and,or,not,exists,collect,accumulate,from,forall,true,false,eval・できれば避けてほしい、でもだいたい問題なく動くはずだけど編(こうやってドキュ…

Drools5でコンパイラをJANINOにする方法

Droolsのルールをコンパイルするのにコンパイラを指定する必要があります。デフォルトはEclipseJDTになっています。で、プログラム実行時に以下のようなExceptionが出ることがあります。 The Eclipse JDT Core jar is not in the classpath. 回避策は2つ 1.…

Droolsのruleファイルの宣言構造

droolsではルールは基本的にdrlファイルに書いていきます。when+then以外に目をむけるとサンプルみても、何この構文?ってなっちゃいます。でも大きい構造をふまえてちょっと分解するだけで少し読みやすくなります。大きくはこういう構造です。 package pack…

業務ロジックとアプリケーションロジック

ってわけて僕は表現してます。ユーザグループを作った勢いで試そうとしているのが、jBPMとDroolsで業務の状態と業務ルールをアプリからとことん追い出そすとどうなるかやろうとしています。でも、Droolsルールでは英語というのは差し引いてもやっぱりDrools…

jBPMとDroolsのユーザグループつくりました

jBPMユーザグループ http://groups.google.co.jp/group/jbpmug Droolsユーザグループ http://groups.google.co.jp/group/jdug ともに来年の頭には新しいversion(jBPM jPDLは4.0.0.α版, Droolsは5.0.0.GA)のリリースが控えています。JBoss Compass2008でいろ…