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这个标准改变了,那么只要修改这个规则文件,而不用去修改源代码了