A. drools的.drl文件能通過寫java代碼生成嗎如何實現
一般 drl 不是手工寫好的么?怎麼你是用 Java 生成的?
我知道 JBoss 有一個 Studio (開發工具啦),用來編寫 drools 源文件,有語法格式提示。不過下載起來比較大,幾百個M。
B. 如何通過Maven為Java項目配置Drools依賴
在pom.xml裡面
加入jar依賴
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-core</artifactId>
<version>5.5.0.Final</version>
</dependency>
視情況而定,可能你還需要其他的jar可以去maven倉庫中去查找
C. java 規則引擎哪個好
國內的廠商,旗正,做了十幾年了,性價比可以,研究學習選drools,土豪選ODM。
D. drools開源規則引擎比較難上手,有沒有一款容易上手的規則引擎
Drools是一個基於java的規則引擎,開源的,可以將復雜多變的規則從硬編碼中解放出來,以規則腳本的形式存放在文件中,使得規則的變更不需要修正代碼重啟機器就可以立即在線上環境生效。
本文所使用的demo已上傳 http://download.csdn.net/source/3002213
E. drools版本和jdk有關系嗎
JBossDrools的可視化規則設計工具包在Drools4.0的時候叫drools-jbrms。drools-jbrms需要JDK1.5或以上版本,本文以drools4.0.7的drools-jbrms包在Tomcat6.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目錄(包括很多子目錄),同時會報無法啟動的異常。異常信息為Causedby:javax.jcr.RepositoryException:internalerror:_nodetypes.xml:Prematureendoffile.:Prematureendoffile.(注意,這里我是在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
F. drools 我這邊根據需求需要做到可以在web頁面隨意改動規則..我目前想到的辦法是通過java生成drl文件.
試試Drools Guvnor, http://www.jboss.org/drools/drools-guvnor.html
G. drools 是什麼
Drools(JBoss Rules )具有一個易於訪問企業策略、易於調整以及易於管理的開源業務規則引擎,符合業內標准,速度快、效率高。業務分析師或審核人員可以利用它輕松查看業務規則,從而檢驗是否已編碼的規則執行了所需的業務規則。
JBoss Rules 的前身是Codehaus的一個開源項目叫Drools。最近被納入JBoss門下,更名為JBoss Rules,成為了JBoss應用伺服器的規則引擎。
Drools是為Java量身定製的基於Charles Forgy的RETE演算法的規則引擎的實現。具有了OO介面的RETE,使得商業規則有了更自然的表達
H. java 使用規則引擎drools 出現異常
運行時錯誤。報的類的錯誤!和運算沒有關系。ClassUtils.java:378 ConditionAnalyzer.java:723
ConditionAnalyzer.java:690 等等 先檢查你的ClassUtils類 378行 應該是這里 或以下的類搞錯了 導致報許多錯誤。不要怕。報很多錯誤,有時,其實就是一個錯誤引起的。
I. java實際開發中常用的技術有哪些
RMI: java自身提供的用在分布時對象之間的通信機制。(類似於RPC)
RMI-IIOP: RMI的可移植擴展,可以實現JAVA與CORBA的集成。
JDBC: 用於資料庫訪問的通用介面。
JTA,JTS: 用於提供事務處理的支持。
JMS: java消息服務。可以連接已有的面向消息的中間件,例如:MQSeries,MSMQ。
Java Servlet: 用來擴展Web伺服器功能的網路組件。基於請求/響應機制。
JSP: Java與HTML混合編程,類似於ASP。
JavaIDL: Java對COBRA的實現,允許與其他預言集成。且能讓分布式對象利用CORBA提供的全面服務。所以J2EE與CORBA完全兼容。
Java Mail: 平台無關,協議無關地發送郵件。
J2EE連接器架構: 自動管理現有系統和中間件之間的諸多細節。
JAXP: Java操作XML。
JAAS: Java的用戶認證支持。
EJB: J2EE中最重要的部分,實現組件式開發的基礎。可以在多層的分布式環境中部署的伺服器端軟體組件。
JNI: (Java Native Interface)
聲明Native代碼,用C/C++實現它。可以實現:
1、 使用標准JAVA不支持的功能,例如訪問Win32API。
2、 重用其他語言編寫的庫或應用程序。例如大量的C庫。
3、 需要用低級語言編程時,例如匯編。
Oracle所實現的C底層代碼與Java的無縫集成,就是JNI技術的很好例證。Oracle不單使用Java界面,還支持Java編寫的存儲過程。
JNDI: 用於訪問命令和目錄系統。
JNDI為底層命名或目錄服務提供統一的API。可支持任何伺服器名稱,標准服務有:LDAP,NDS,CORBA,LDAP活動目錄等。
J2EE終,可用JNDI發布下列組件:EJB,數據源(資料庫),JMS消息隊列。
J. 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這個標准改變了,那麼只要修改這個規則文件,而不用去修改源代碼了