当前位置:首页 » 操作系统 » drools数据库规则

drools数据库规则

发布时间: 2022-09-06 10:43:53

1. drools 我这边根据需求需要做到可以在web页面随意改动规则..我目前想到的办法是通过java生成drl文件.

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

2. 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

3. drools属性能不能做成动态

能。
规则引擎Drools要做到动态生成规则,因为规则引擎的作用,一些多变的活动逻辑可以再不改变代码,不重新部署系统,如需求改需求,一些通用但微变的逻辑,如人工智能的机器学习,达到ai修改数据库来微调自己的行为。
可以看到我们在没有重启服务的情况下,通过修改数据库,和执行规则刷新,使新的优惠规则生效了,这就是Drools的动态加载策略,适用于规则频繁多变的场景。

4. 规则引擎drools如何整合spring,drl文件一般放在什么地方

drl文件可以持久化到数据库中,然后写个加载执行的引擎,这样可以很灵活的结合实际业务。
先写规则模板,采用velocity解析,通过规则解析后,生产规则文件,规则文件就是drools文件。
规则模板和规则文件统一持久化到数据库中。

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

6. 怎样把drools规则存放到数据库中

将xml文件按照数据结构进行分解放置到数据库中,要使用该规则再从数据库读取。使用设计模式中组合方法来分解的。
具体代码要有很多了,不过用递归也行,但是性能打点折扣。

7. 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应用服务器的兼容问题考虑不多。

8. 正在学习Drools规则引擎,一直出现空指针问题,想请教一下各位大神

而是在数据库表中进行配置。因此我们常见的业务逻辑层的开发,并不能先设计出一个数据模型,然后再在此基础上抽象逻辑。但我们确实解决了业务逻辑层的业务逻辑配置问题。应该说我们的更实用一些。但是我们却没法去实现JSR94标准。我们不光处理业务逻辑。
我们以JBoss的Drools为例,再打包成一个规则包,也提到了规则引擎。
在我们的印象中,我们感觉规则引擎就是解决业务逻辑层的实现问题的。因此我们理所当然的觉得工作流中的某个节点的逻辑处理,应该可以用规则引擎来解决。但是也使得规则引擎的应用得到了很大的限制。
首先这种抽象本身需要一个复杂的分析过程,这需要有很强的分析设计能力。另外我们平时具体应用中的业务逻辑层,大量的逻辑都是对实际数据的处理,很多时候还是一个批量数据的处理,甚至有些逻辑需要的参数我们并不能定义在规则中。
因此我们发现Drools等规则引擎很难用,根本不是我们所需要的那样。有时候我们发现自己做的规则引擎并不是一个规则引擎。因为我们和像Drools这些规则引擎有很大的差别。
我们研究规则引擎也有一段时间了可能很多人还不了解规则引擎是什么东西,或者不知道规则引擎究竟有什么用。一个规则包相当于一个智能块。首先需要将我们具体应用中的业务逻辑做抽象,抽象成一条条规则之后。
但是当我们在使用上述这些规则引擎,却发现很难和我们实际应用的业务逻辑层的业务逻辑实现相对应。我们都知道工作流引擎,也听说过JBoss下面有个Drools,或者我们知道 weblogic或者Oracle也有自己的Business Rule,我们可能还听说过ILOG被IBM收购了,如果我们研究微软的WWF。当数据传递给这个智能块后,系统会以匹配的方式应用满足条件的逻辑处理。
当采用这种方式时,应该说逻辑更抽象了,在一个更高的层次加以抽象化的定义,那么工作流本身的逻辑也应该可以由规则引擎来解决,可能也知道其中有RuleSet等内容。国内的一些web快速开发平台,由于其规则引擎使用了匹配规则的方式来进行,因此在应用这些规则引擎时。另外我们也会觉得,平时项目当中的业务逻辑应该都可以用规则引擎来解决,还把所有业务逻辑层需要处理的操作全部采用规则配置的形式

热点内容
c语言fgets用法 发布:2024-05-10 10:54:21 浏览:581
编程猫新手 发布:2024-05-10 10:54:10 浏览:910
python关键词 发布:2024-05-10 10:50:49 浏览:391
vc访问postgresql 发布:2024-05-10 10:49:09 浏览:686
解压软件开源 发布:2024-05-10 10:36:40 浏览:959
三角加密IC 发布:2024-05-10 10:27:07 浏览:214
源码编译成jar包 发布:2024-05-10 10:14:13 浏览:636
变量类型存储 发布:2024-05-10 09:56:27 浏览:105
linux重装linux系统 发布:2024-05-10 09:50:38 浏览:905
md5算法java 发布:2024-05-10 09:24:56 浏览:84