導航:首頁 > 源碼編譯 > drools編譯新生成的規則

drools編譯新生成的規則

發布時間:2022-08-10 09:11:09

『壹』 規則引擎drools如何整合spring,drl文件一般放在什麼地方

drl文件可以持久化到資料庫中,然後寫個載入執行的引擎,這樣可以很靈活的結合實際業務。
先寫規則模板,採用velocity解析,通過規則解析後,生產規則文件,規則文件就是drools文件。
規則模板和規則文件統一持久化到資料庫中。

『貳』 drools 怎麼動態配置規則

JBoss Drools的可視化規則設計工具包在Drools 4.0的時候叫drools-jbrms。
drools-jbrms需要JDK1.5或以上版本,本文以drools 4.0.7的drools-jbrms包在Tomcat 6.0下部署為例。

第1步
按照JBoss官方提供的文檔處理
刪除war包中的el-api.jar
刪除Tomcat的lib目錄下的jsf-api.jar和jsf-impl.jar(本來不存在就不用管了)
將下載後的jboss_jsf_libs.zip解壓到Tomcat的lib目錄下
第2步
啟動Tomcat。drools-jbrms會在Tomcat的bin目錄下新建repository目錄(包括很多子目錄),同時會報無法啟動的異常。異常信息為Caused by: javax.jcr.RepositoryException: internal error: failed to read custom node type definitions stored in custom_nodetypes.xml: Premature end of file.: Premature end of file.
(注意,這里我是在Tomcat/bin目錄下用startup.bat啟動的,如果不是這種方式repository的位置可能有所不同)

第3步
將本文提供的custom_nodetypes.xml覆蓋Tomcat下的bin/repository/repository/nodetypes的同名文件。

第4步
重新啟動

原因:drools-jbrms包含的某些功能在Tomcat下有問題,生成custom_nodetypes.xml時沒有生成文件內容,所以報錯。從網上查詢,最遲2007年就有人報這個問題了。看來JBoss的對於非JBoss應用伺服器的兼容問題考慮不多。

『叄』 drools的規則實例到底指的是什麼

InfoQ發布了一個關於規則引擎的介紹Real-World Rule Engines,原文

ONJava上也有兩篇文章:

Give Your Business Logic a Framework with Drools

Using Drools in Your Enterprise Java Application

下面總結一下其中的精華:

大多數web和企業Java應用可以分成三個部分:一個和用戶交互的前台, 一個和後台系統,例如資料庫交互的服務層,以及他們中間的業務邏輯。 現在使用框架構建前台和後台系統已經成為普遍共識(例如, Struts, Cocoon, Spring, Hibernate, JDO, 和 Entity Beans), 但卻沒有一個標準的方法來構建業務邏輯。一些框架,例如 EJB 和 Spring 只在一個高層實現業務邏輯,但對於我們組織邏輯代碼沒有任何幫助,所以,為什麼沒有一個框架來替換冗繁,易錯的if...then語句呢,這個框架應該和其它前台或後台框架一樣,易於配置,具有可讀性和重用性。下面我們將介紹Drools 規則引擎,這個來解決我們問題的框架。

下面是一個典型的Java業務邏輯的代碼

if ((user.isMemberOf(AdministratorGroup)
&& user.isMemberOf(teleworkerGroup))
|| user.isSuperUser(){

// more checks for specific cases
if((expenseRequest.code().equals("B203")
||(expenseRequest.code().equals("A903")
&&(totalExpenses<200)
&&(bossSignOff> totalExpenses))
&&(deptBudget.notExceeded)) {
//issue payments
} else if {
//check lots of other conditions
}
} else {
// even more business logic
}

這是大多數程序員寫業務邏輯的方法,但是有以下的問題:

如果用戶有另一個選項,例如("C987") ,那麼需要修改上面的代碼,當代碼很長的時候,修改代碼是難於維護的
我們如何保證代碼的正確性,這個代碼只有程序員能夠看到,真正的使用者,業務人員無法看到這個代碼
很多應用程序有相同的業務邏輯,如果某個業務改變了,如何保證其他業務邏輯的一致性
業務邏輯能否不合java語言綁定?
業務邏輯能否用其他的腳本語言。
Java下的規則引擎標准就是JSR94,它的實現主要有Jess Jena Drools

Drools中,一個典型的業務邏輯的配置,如下

<?xml version="1.0"?>
<rule-set name="BusinessRulesSample"
xmlns=""
xmlns:java=""
xmlns:xs
=""
xs:schemaLocation
=" rules.xsd
java.xsd">
<!-- Import the Java Objects that we refer
to in our rules -->
<java:import>
java.lang.Object
</java:import>
<java:import>
java.lang.String
</java:import>
<java:import>
net.firstpartners.rp.StockOffer
</java:import>
<!-- A Java (Utility) function we reference
in our rules-->
<java:functions>
public void printStock(
net.firstpartners.rp.StockOffer stock)
{
System.out.println("Name:"
+stock.getStockName()
+" Price: "+stock.getStockPrice()
+" BUY:"
+stock.getRecommendPurchase());
}
</java:functions>
<rule-set>
<!-- Ensure stock price is not too high-->
<rule name="Stock Price Low Enough">
<!-- Params to pass to business rule -->
<parameter identifier="stockOffer">
<class>StockOffer</class>
</parameter>
<!-- Conditions or 'Left Hand Side'
(LHS) that must be met for
business rule to fire -->
<!-- note markup -->
<java:condition>
stockOffer.getRecommendPurchase() == null
</java:condition>
<java:condition>
stockOffer.getStockPrice() < 100
</java:condition>
<!-- What happens when the business
rule is activated -->
<java:consequence>
stockOffer.setRecommendPurchase(
StockOffer.YES);
printStock(stockOffer);
</java:consequence>
</rule>
</rule-set>

一條規則就是rule-set中的rule,如果有很多規則,就要寫很多的rule。

上面規則的意思是判斷股票價格是否小於100,如果100這個標准改變了,那麼只要修改這個規則文件,而不用去修改源代碼了

『肆』 求一條Drools的校驗規則

親 這個不如用正則表達式呢
如果非要用規則估計你得自己寫符合方法,然後用規則引擎調用。麻煩,不建議用。
Drools自己好像不帶字元校驗,這個我忘了,好久沒玩了,你可以查查文檔

『伍』 drools 我這邊根據需求需要做到可以在web頁面隨意改動規則..我目前想到的辦法是通過java生成drl文件.

試試Drools Guvnor, http://www.jboss.org/drools/drools-guvnor.html

『陸』 drools規則的性能跟if else比較哪個好

1.一樣的If--Then 句式與Rete引擎
三者都會把原來混亂不堪的if---else---elseif----else謎團,
拆成N條帶優先順序的"If 條件語句 then 執行語句" 的句式。

三者都主要使用foreward-chaining的Rete引擎,按優先順序匹配條件語句,執行規則語句。
規則執行後會引發事實的變化,引擎又會重新進行條件匹配,直到不能再匹配為止,Rete的演算法保證了效率的最高。
2.開發人員使用的規則語言
2.1 Drools的XML框架+Java/Groovy/Python嵌入語言
Drools的用XML的<Conditons>、<Consequence> 節點表達If--Then句式,而裡面可以嵌入上述語言的代碼作為判斷語句和執行語句。
其中Java代碼會使用Antlr進行解釋,而Groovy和Python本身就是腳本語言,可以直接調用。
Drools的聰明之處在於,用XML節點來規范If--Then句式和事實的定義,使引擎干起活來很舒服。
而使用Java,Groovy等原生語言來做判斷和執行語句,讓程序員很容易過渡、移植,學習曲線很低。

『柒』 drools在drl中規則怎麼調用另一條規則

when部分在調用外部方法時要加eval。 你drl中的rule改成: rule "規則_15" salience 65521 when eval( IsNow( "* * 4 * * ?")) then //wode代碼 System.out.println(「ok」);end

『捌』 drools當一個目錄下有多個規則文件時

JBoss Drools的可視化規則設計工具包在Drools 4.0的時候叫drools-jbrms。
drools-jbrms需要JDK1.5或以上版本,本文以drools 4.0.7的drools-jbrms包在Tomcat 6.0下部署為例。

第1步
按照JBoss官方提供的文檔處理
刪除war包中的el-api.jar
刪除Tomcat的lib目錄下的jsf-api.jar和jsf-impl.jar(本來不存在就不用管了)
將下載後的jboss_jsf_libs.zip解壓到Tomcat的lib目錄下
第2步
啟動Tomcat。drools-jbrms會在Tomcat的bin目錄下新建repository目錄(包括很多子目錄),同時會報無法啟動的異常。異常信息為Caused by: javax.jcr.RepositoryException: internal error: failed to read custom node type definitions stored in custom_nodetypes.xml: Premature end of file.: Premature end of file.
(注意,這里我是在Tomcat/bin目錄下用startup.bat啟動的,如果不是這種方式repository的位置可能有所不同)

第3步
將本文提供的custom_nodetypes.xml覆蓋Tomcat下的bin/repository/repository/nodetypes的同名文件。

第4步
重新啟動

原因:drools-jbrms包含的某些功能在Tomcat下有問題,生成custom_nodetypes.xml時沒有生成文件內容,所以報錯。從網上查詢,最遲2007年就有人報這個問題了。看來JBoss的對於非JBoss應用伺服器的兼容問題考慮不多。

註:本文提供的custom_nodetypes.xml為drools-jbrms在JBoss應用伺服器部署時生成的,內容如下:
mix:referenceablent:hierarchyNodedrools:categoryNodeTypedrools:versionableNodeTypent:folderfalsedrools:versionableAssetFolderdrools:versionableNodeTypedrools:categoryNodeTypefalsemix:versionablent:folderdrools:versionableNodeTypemix:versionablent:hierarchyNodedrools:stateNodeTypemix:referenceablent:hierarchyNode

『玖』 drools屬性能不能做成動態

能。
規則引擎Drools要做到動態生成規則,因為規則引擎的作用,一些多變的活動邏輯可以再不改變代碼,不重新部署系統,如需求改需求,一些通用但微變的邏輯,如人工智慧的機器學習,達到ai修改資料庫來微調自己的行為。
可以看到我們在沒有重啟服務的情況下,通過修改資料庫,和執行規則刷新,使新的優惠規則生效了,這就是Drools的動態載入策略,適用於規則頻繁多變的場景。

閱讀全文

與drools編譯新生成的規則相關的資料

熱點內容
如何理解php面向對象 瀏覽:96
macword轉pdf 瀏覽:848
python列表求交集 瀏覽:872
解壓包如何轉音頻 瀏覽:447
機明自動編程軟體源碼 瀏覽:325
php埠號設置 瀏覽:541
phperegreplace 瀏覽:320
androidgridview翻頁 瀏覽:537
ssh協議編程 瀏覽:634
如何開我的世界電腦伺服器地址 瀏覽:861
玄關pdf 瀏覽:609
程序員學習論壇 瀏覽:940
程序員的毒雞湯怎麼做 瀏覽:548
安卓怎麼降級軟體到手機 瀏覽:281
雲與伺服器入門書籍推薦產品 瀏覽:636
delphi編程助手 瀏覽:762
電腦遇到伺服器問題怎麼辦 瀏覽:515
加工中心編程結束方法 瀏覽:296
了解什麼是web伺服器 瀏覽:140
面向對象的編程的基本特徵 瀏覽:718