差沙的密碼 -- SSHWSFC's code
閱讀本Blog請自備塑料袋一只
BlogJava
首頁
新文章
新隨筆
聚合
管理
posts - 14, comments - 59, trackbacks - 0
關(guān)于Drools的初步,迷醉狀態(tài)認識
這兩天在
springside
受白衣的影響開始關(guān)注drools。說他是平民的腳本引擎一點都不假,使用起來極為方便,本來以為網(wǎng)上應(yīng)該有不少的講解了,但是發(fā)現(xiàn)幾乎全是針對2.0版本講解的。而drools加入jboss后有了質(zhì)的變化,下面來看一下最新的3.0使用起來有什么不同:
首先我們要取得rule,規(guī)則引擎、規(guī)則引擎,取得規(guī)則是必要的。
private
?
static
?RuleBase?readRule()?
throws
?Exception?
{
????????
//
read?in?the?source
????????Reader?source?
=
?
new
?InputStreamReader(?DroolsTest.
class
.getResourceAsStream(?
"
/aclcreat.drl
"
?)?);
????????
????????
//
optionally?read?in?the?DSL?(if?you?are?using?it).
????????Reader?dsl?
=
?
new
?InputStreamReader(?DroolsTest.
class
.getResourceAsStream(?
"
/mylang.dsl
"
?)?);
????????
//
Use?package?builder?to?build?up?a?rule?package.
????????
//
An?alternative?lower?level?class?called?"DrlParser"?can?also?be?used
????????
????????PackageBuilder?builder?
=
?
new
?PackageBuilder();
????????
//
this?wil?parse?and?compile?in?one?step
????????
//
NOTE:?There?are?2?methods?here,?the?one?argument?one?is?for?normal?DRL.
????????
//
builder.addPackageFromDrl(?source?);
????????
//
Use?the?following?instead?of?above?if?you?are?using?a?DSL:
????????builder.addPackageFromDrl(?source,?dsl?);
????????
????????
//
get?the?compiled?package?(which?is?serializable)
????????Package?pkg?
=
?builder.getPackage();
????????
????????
//
add?the?package?to?a?rulebase?(deploy?the?rule?package).
????????RuleBase?ruleBase?
=
?RuleBaseFactory.newRuleBase();
????????ruleBase.addPackage(?pkg?);
????????
return
?ruleBase;
????}
這里在官方的例子基礎(chǔ)上做了自己的實現(xiàn)(其實什么都沒改)。
可以看到,第一步是取得文件IO,這個文件就是我們要寫得規(guī)則腳本,這個等下再說,大家可以假象一下腳本是個什么樣子,現(xiàn)在只說怎么在程序中取得Rule。
接下來,是使用Builder取得一個package,既然builder都上來了說明能輸入的腳本不止一個了。用addPackageFromDrl向這個builder壓縮機里面輸入腳本,當然還有另外一個文件dsl,這個后面再說。利用builder取得package。
最后構(gòu)造一個BaseRule,利用Factory取得的時候是有選擇的,RuleBaseFactory.newRuleBase(int type)其中的type可以為不同的Algorithm,有RETE和Leaps 兩種。對這兩種Algorithm的具體解釋可以參看
http://citeseer.ist.psu.edu/context/505087/0
?或是 drools的文檔,其實我也不太懂。
把剛才的package添到ruleBase里面一個Rule就大功告成了。
接下來看看怎么執(zhí)行它:
????????????WorkingMemory?workingMemory?
=
?ruleBase.newWorkingMemory();
????????????
????????????
//
go?!
????????????Order?order?
=
?
new
?Order();
????????????order.setId(
1
);
????????????order.setName(
"
testOrder
"
);
????????????order.setTotlePrice(
10
);
????????????????????????
????????????User?user?
=
?
new
?User();
????????????user.setName(
"
testAdmin
"
);
????????????user.setAuth(
"
USER_ADMIN
"
);
????????????List
<
String
>
?roles?
=
?
new
?ArrayList
<
String
>
();
????????????roles.add(
"
ADMIN
"
);
????????????user.setRoles(roles);
????????????
????????????User?user1?
=
?
new
?User();
????????????user1.setName(
"
testUser
"
);
????????????user1.setAuth(
"
USER_USER
"
);
????????????List
<
String
>
?roles1?
=
?
new
?ArrayList
<
String
>
();
????????????roles1.add(
"
USER
"
);
????????????user1.setRoles(roles1);
????????????
????????????workingMemory.assertObject(order);
????????????workingMemory.assertObject(user);
????????????workingMemory.assertObject(user1);
????????????
????????????workingMemory.fireAllRules();????????
????????????
????????????List
<
AclEntry
>
?acls?
=
?workingMemory.getObjects(AclEntry.
class
);
用ruleBase生成一個WorkingMemory,WorkingMemory是Rule的執(zhí)行引擎,裝載rule和事實(很重要的概念),并統(tǒng)一執(zhí)行他們。接下來我就在寫我的事實,事實是什么,事實就是今天是什么天?訂單總價多少?就是要告訴腳本的java對象。然后把事實一一壓入WorkingMemory這個大壓縮機。就瞧好吧。
OK可以執(zhí)行了,fireAllRules!(真TM,COOL的名字)。當然有全部執(zhí)行就有部分執(zhí)行。你可以把規(guī)則分組,然后按組執(zhí)行,或是指定rule的名字來執(zhí)行(這里還是大家自己看看吧)。
???究竟執(zhí)行了什么。當然是執(zhí)行了我們的腳本,腳本在這里、看看它可不是xml了:
#created?on:?
2006
-
5
-
19
package
?com.sample;
#list?any?
import
?classes?here.
import
?com.sample.domain.Order;
import
?com.sample.domain.User;
import
?com.sample.AclEntry;
#expander?mylang.dsl
#declare?any?global?variables?here
rule?
"
Order?TotlePrice?more?than?$1000
"
????
????when
????????#conditions
????????$order?:?Order(?totlePrice?
>
?
1000
?)
????????$user?:?User(?roles?contains?
"
ADMIN
"
?,?$userName?:?name)
????then?
????????#actions
????????System.out.println(
"
More?Than
"
);
????????
assert
(
new
?AclEntry($order,?$user,?
1
));
end
rule?
"
Order?TotlePrice?less?or?equl?than?$1000
"
????
????when
????????#conditions
????????$order?:?Order(?totlePrice?
<=
?
1000
?)
????????$user?:?User(?$userName?:?name?)
????then?
????????#actions
????????System.out.println(
"
Less?Than
"
);
????????
assert
(
new
?AclEntry($order,?$user,?
2
));
end
每一個rule就是一個規(guī)則,所有的事實要一一過一遍這些規(guī)則。when是規(guī)則提出的條件,如果哪個事實符合這個條件,就進入then的環(huán)節(jié),進行相應(yīng)的處理。
分析一下條件:$order?:?Order(?totlePrice?
>
?
1000
?)。一看就知道是總價超過1000的訂單。$order是把這個訂單邦定,后面可以使用。
分析一下then:?System.out.println就不解釋了。
assert
(
new
?AclEntry($order,?$user,?
2
)); 這里的assert的意義就是告訴WorkingMemory一個事實,其實跟前面的加入事實一個道理。打個比方,如果有閃電,那么就有雷。
這樣走完一個rule后大家很容易發(fā)現(xiàn),其實是根據(jù)訂單和用戶的角色不同產(chǎn)生了不同的acl,然后我要拿到這些由事實得到的事實。
List
<
AclEntry
>
?acls?
=
?workingMemory.getObjects(AclEntry.
class
);
這樣就能在workingMemory里面掏出我們需要的事實來,新鮮出爐的哦。
相當粗略的講了一下drools,目的是希望大家都來了解一下,共同學習。
posted on 2006-05-28 20:53
差沙
閱讀(2842)
評論(9)
編輯
收藏
所屬分類:
avaj
FeedBack:
#
re: 關(guān)于Drools的初步,迷醉狀態(tài)認識
2006-05-28 22:46 |
艾塵
開始接觸Drools。一起學習! :)
回復
更多評論
#
re: 關(guān)于Drools的初步,迷醉狀態(tài)認識
2006-05-28 23:54 |
差沙
我是剛剛開始,以后多交流。對了,你要用在什么場合?
回復
更多評論
#
re: 關(guān)于Drools的初步,迷醉狀態(tài)認識
2006-05-29 21:20 |
C[ETI]O@quaffsoft
$userName : name
表示什么意思?把user的name屬性值賦給userName變量?
回復
更多評論
#
re: 關(guān)于Drools的初步,迷醉狀態(tài)認識
2006-05-29 21:34 |
C[ETI]O@quaffsoft
@C[ETI]O@quaffsoft
$userName是變量
System.out.println("More Than 50,userName"+$userName);
System.out.println("More Than 50,userName"+$user.getName());
回復
更多評論
#
re: 關(guān)于Drools的初步,迷醉狀態(tài)認識
2006-05-29 22:28 |
差沙
@C[ETI]O@quaffsoft
正解
回復
更多評論
#
re: 關(guān)于Drools的初步,迷醉狀態(tài)認識
2006-05-30 22:15 |
C[ETI]O@quaffsoft
如何判斷一個Integer?比如要判斷一個大于10的Integer
$integer:Integer(),括號里面怎么寫,,目前的做法是寫一個類弄個Integer類型屬性
回復
更多評論
#
xuxqqhyo
2007-06-15 05:35 |
xuxqqhyo
dbdwwyon
http://lvunjlvs.com
llokaulb gtskgzvt
回復
更多評論
#
re: 關(guān)于Drools的初步,迷醉狀態(tài)認識
2008-04-22 14:02 |
javapon
你好~最近正學Drools呢~可網(wǎng)上的資料并不是很多,特別是.dsl文件網(wǎng)上大部分多是XML文件格式的那種~~~~你有相關(guān)的資料嗎?或關(guān)于Drools的小編程~~~~望能發(fā)一份給我~~~謝謝了。郵箱 javapon@163.com
回復
更多評論
#
re: 關(guān)于Drools的初步,迷醉狀態(tài)認識
2008-04-22 14:05 |
javapon
@@本來以為網(wǎng)上應(yīng)該有不少的講解了,但是發(fā)現(xiàn)幾乎全是針對2.0版本講解的.
恩對找了老半天也找不到新版本的講解~~~~
回復
更多評論
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發(fā)表評論。
網(wǎng)站導航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
相關(guān)文章:
Google Developer Day 收獲
Android上的MSN初見成效~~!!
Android發(fā)布, Android中國網(wǎng)站正式成立, 歡迎訪問
JBPM的Token路徑問題
秀逗的JBPM
在Acegi中使用ACL
關(guān)于Drools的初步,迷醉狀態(tài)認識
這家伙很懶,但起碼還是寫了一句話。
<
2006年5月
>
日
一
二
三
四
五
六
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
常用鏈接
我的隨筆
我的評論
我的參與
最新評論
留言簿
(8)
給我留言
查看公開留言
查看私人留言
隨筆分類
avaj(10)
bew(3)
nohtyp(1)
ROR(2)
ten.
tfil(1)
xunil(2)
隨筆檔案
2008年6月 (1)
2008年3月 (1)
2008年2月 (2)
2007年11月 (1)
2007年10月 (1)
2007年4月 (1)
2006年11月 (2)
2006年8月 (1)
2006年6月 (2)
2006年5月 (2)
文章分類
avaj
bew
nohtyp
php
ten.
xunil
搜索
最新評論
1.?re: Ext的組件結(jié)構(gòu)分析,附Ext組件結(jié)構(gòu)圖
附件在哪里呀?
--haha.
2.?re: Ext的組件結(jié)構(gòu)分析,附Ext組件結(jié)構(gòu)圖
真的很不錯哦
--zds
3.?re: Ext的組件結(jié)構(gòu)分析,附Ext組件結(jié)構(gòu)圖
組件呢
--alian
4.?re: Air+Ext小試一下
Ext,sqlite怎么處理事務(wù)呢?
--cow
5.?您好,我想問問Android里的IM是使用SIP協(xié)議么?
您好,我想問問Android里的IM是使用SIP協(xié)議么?
非常感謝
我的郵箱是dongzhiming@hisense.com
--董智明
閱讀排行榜
1.? Ext的組件結(jié)構(gòu)分析,附Ext組件結(jié)構(gòu)圖(7724)
2.?秀逗的JBPM(5746)
3.?Air+Ext小試一下(4811)
4.?說說Rails吧,啟動開始。(4573)
5.?Android上的MSN初見成效~~!!(4218)
評論排行榜
1.? Ext的組件結(jié)構(gòu)分析,附Ext組件結(jié)構(gòu)圖(25)
2.?關(guān)于Drools的初步,迷醉狀態(tài)認識(9)
3.?秀逗的JBPM(7)
4.?在Acegi中使用ACL(4)
5.?Google Developer Day 收獲(4)
Copyright ©2025 差沙 Powered By
博客園
模板提供:
滬江博客
主站蜘蛛池模板:
久久乐国产精品亚洲综合
|
九九全国免费视频
|
亚洲精品无码mv在线观看网站
|
国产在线19禁免费观看国产
|
久操视频免费观看
|
久青草国产免费观看
|
亚洲人成网站色7799
|
亚洲视频免费在线播放
|
亚洲熟妇无码AV在线播放
|
免费a级黄色毛片
|
拨牐拨牐x8免费
|
h视频在线免费看
|
日本高清免费观看
|
福利免费在线观看
|
免费一级特黄特色大片
|
亚洲国产av玩弄放荡人妇
|
67194在线午夜亚洲
|
亚洲色欲或者高潮影院
|
亚洲va中文字幕无码久久不卡
|
亚洲精品无码久久毛片
|
xvideos亚洲永久网址
|
日韩一级在线播放免费观看
|
噼里啪啦电影在线观看免费高清
|
91av免费观看
|
国产精品免费高清在线观看
|
国产自国产自愉自愉免费24区
|
国产99视频精品免费视频76
|
阿v免费在线观看
|
美女视频黄视大全视频免费的
|
色偷偷噜噜噜亚洲男人
|
亚洲人av高清无码
|
亚洲国产精品无码第一区二区三区
|
亚洲sss综合天堂久久久
|
亚洲一区免费在线观看
|
国产精品久久亚洲不卡动漫
|
狠狠色香婷婷久久亚洲精品
|
亚洲AV无码久久久久网站蜜桃
|
日本亚洲精品色婷婷在线影院
|
亚洲日韩AV一区二区三区中文
|
亚洲hairy多毛pics大全
|
激情小说亚洲色图
|