Drools官网:http://www.jboss.org/drools/documentation.html
1、Myeclipse6.5下安装Drools插件
在线安装地址:http://download.eclipse.org/tools/gef/updates/releases/
安装后重启eclipse,会看到eclipse的工具条上多了一个人头按钮
这就说明插件已经安装成功!
2、规则语言实例
-->新建rule project
-->finish,下面是建好的工程目录树,里面的DroolsTest.java和sample.drl都是插件自己生成的
下面我们自己写的东西:
代码:
UserVO.java:
package com.drools.demo;
/**
* 类:用户
* @author lisanlai
*
*/
public class UserVO {
/** 姓名 */
private String name;
/** 年龄 */
private int age;
/** 性别 */
private String sex;
/** 体重 */
private float weight;
/** 身高 */
private float height;
public UserVO() {
super();
}
public UserVO(String name, int age, String sex, float weight, float height) {
super();
this.name = name;
this.age = age;
this.sex = sex;
this.weight = weight;
this.height = height;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public float getWeight() {
return weight;
}
public void setWeight(float weight) {
this.weight = weight;
}
public float getHeight() {
return height;
}
public void setHeight(float height) {
this.height = height;
}
}
UserTest.java:
package com.drools.demo;
import java.io.InputStreamReader;
import java.io.Reader;
import org.drools.RuleBase;
import org.drools.RuleBaseFactory;
import org.drools.WorkingMemory;
import org.drools.compiler.PackageBuilder;
import org.drools.rule.Package;
public class UserTest {
public static final void main(String[] args) {
try {
RuleBase ruleBase = readRule();
WorkingMemory workingMemory = ruleBase.newStatefulSession();
UserVO user = new UserVO("张三",10,"男",(float)90.6,(float)140.8);
UserVO user1 = new UserVO("李四",40,"男",(float)130.2,(float)180);
UserVO user2 = new UserVO("西施",8,"女",(float)50,(float)130);
UserVO user3 = new UserVO("貂蝉",24,"女",(float)80,(float)175);
workingMemory.insert( user );
workingMemory.insert( user1 );
workingMemory.insert( user2 );
workingMemory.insert( user3 );
workingMemory.fireAllRules();
} catch (Throwable t) {
t.printStackTrace();
}
}
private static RuleBase readRule() throws Exception {
Reader source = new InputStreamReader( UserTest.class.getResourceAsStream( "/UserTest.drl" ) );
PackageBuilder builder = new PackageBuilder();
builder.addPackageFromDrl( source );
Package pkg = builder.getPackage();
RuleBase ruleBase = RuleBaseFactory.newRuleBase();
ruleBase.addPackage( pkg );
return ruleBase;
}
}
UserTest.drl:
#created by lisanlai
package com.demo
import com.drools.demo.UserVO
#自己定义的方法
function void sayHello(UserVO user,String str) {
System.out.println(user.getName()+" "+str+",你好!");
}
function void printUserInfo(UserVO user) {
System.out.println("个人信息:");
System.out.println("姓名: "+user.getName());
System.out.println("年龄: "+user.getAge());
System.out.println("性别: "+user.getSex());
System.out.println("体重: "+user.getWeight());
System.out.println("身高: "+user.getHeight());
System.out.println("============================================");
}
rule "say hello to boy"
when
user : UserVO( sex=="男",age<18 )
then
sayHello(user,"小帅哥");
printUserInfo(user);
end
rule "say hello to man"
when
user : UserVO( sex=="男",age>18 )
then
sayHello(user,"先生");
printUserInfo(user);
end
rule "say hello to girl"
when
user : UserVO( sex=="女",age<18)
then
sayHello(user,"小美女");
printUserInfo(user);
end
rule "say hello to woman"
when
user : UserVO( sex=="女",age>18 )
then
sayHello(user,"小姐");
printUserInfo(user);
end
看看运行UserTest.java的效果:
3、域语言实例
下面我们把上面的实例换成用域语言来写
-->在src/main/rules下面新建UserTest.dsl文件
--->再新建UserTest.dslr文件:
代码:
DSLUserTest.java:
package com.drools.demo;
import java.io.InputStreamReader;
import java.io.Reader;
import org.drools.RuleBase;
import org.drools.RuleBaseFactory;
import org.drools.WorkingMemory;
import org.drools.compiler.PackageBuilder;
import org.drools.rule.Package;
public class DSLUserTest {
public static final void main(String[] args) {
try {
RuleBase ruleBase = readRule();
WorkingMemory workingMemory = ruleBase.newStatefulSession();
UserVO user = new UserVO("张三",10,"男",(float)90.6,(float)140.8);
UserVO user1 = new UserVO("李四",40,"男",(float)130.2,(float)180);
UserVO user2 = new UserVO("西施",8,"女",(float)50,(float)130);
UserVO user3 = new UserVO("貂蝉",24,"女",(float)80,(float)175);
workingMemory.insert( user );
workingMemory.insert( user1 );
workingMemory.insert( user2 );
workingMemory.insert( user3 );
workingMemory.fireAllRules();
} catch (Throwable t) {
t.printStackTrace();
}
}
private static RuleBase readRule() throws Exception {
Reader source = new InputStreamReader( DSLUserTest.class.getResourceAsStream( "/UserTest.dslr" ) );
Reader dsl = new InputStreamReader(DSLUserTest.class.getResourceAsStream("/UserTest.dsl"));
PackageBuilder builder = new PackageBuilder();
builder.addPackageFromDrl( source,dsl );
Package pkg = builder.getPackage();
RuleBase ruleBase = RuleBaseFactory.newRuleBase();
ruleBase.addPackage( pkg );
return ruleBase;
}
}
UserTest.dsl:
[condition][]有一个用户=user:UserVO()
[condition][]-性别是"{sex}"=sex=="{sex}"
[condition][]-年龄大于{age}=age>{age}
[condition][]-年龄小于{age}=age<{age}
[consequence][]对"{str}"说你好=sayHello(user,"{str}");
[consequence][]打印个人信息=printUserInfo(user);
UserTest.dslr:
#created on: Sep 2, 2010
package com.drools.demo
#list any import classes here.
expander UserTest.dsl
#自己定义的方法
function void sayHello(UserVO user,String str) {
System.out.println(user.getName()+" "+str+",你好!");
}
function void printUserInfo(UserVO user) {
System.out.println("个人信息:");
System.out.println("姓名: "+user.getName());
System.out.println("年龄: "+user.getAge());
System.out.println("性别: "+user.getSex());
System.out.println("体重: "+user.getWeight());
System.out.println("身高: "+user.getHeight());
System.out.println("============================================");
}
#declare any global variables here
rule "say hello to boy"
when
有一个用户
-性别是"男"
-年龄小于18
then
对"小帅哥"说你好
打印个人信息
end
rule "say hello to man"
when
有一个用户
-性别是"男"
-年龄小于18
then
对"小帅哥"说你好
打印个人信息
end
rule "say hello to girl"
when
有一个用户
-性别是"男"
-年龄小于18
then
对"小帅哥"说你好
打印个人信息
end
rule "say hello to woman"
when
有一个用户
-性别是"男"
-年龄小于18
then
对"小帅哥"说你好
打印个人信息
end
运行DSLUserTest.java效果:
跟上面用规则语言的效果一样。
- 大小: 49.4 KB
- 大小: 2.9 KB
- 大小: 21.4 KB
- 大小: 18.1 KB
- 大小: 23.3 KB
- 大小: 7.5 KB
- 大小: 7.3 KB
- 大小: 17.9 KB
- 大小: 39.1 KB
- 大小: 35.5 KB
- 大小: 12.3 KB
- 大小: 7.4 KB
- 大小: 17.3 KB
分享到:
相关推荐
4. **DRL(Drools Rule Language)**:Drools 使用一种特定的规则定义语言DRL,类似于SQL,用于编写规则。 **Drools 工作流程** 1. **加载规则**:首先,你需要将DRL文件加载到Drools的知识库(KieBase)中,这...
### 基于Spring + Drools 6.4规则引擎代码实例详解 #### 知识点一:Drools规则引擎介绍与应用背景 Drools是一款强大的业务规则管理系统(BRMS),它提供了核心的业务规则引擎(BRE)、Web作者和规则管理应用程序...
Drools是一款强大的规则引擎,由Red Hat公司开发并维护,它主要用于实现业务规则的管理和执行。Drools提供了一种声明式的方式来定义业务规则,使得非技术人员也能理解和修改规则,从而降低了业务逻辑与代码的耦合度...
它提供了一个强大的Eclipse插件,允许开发人员使用领域特定语言(DSL)以接近自然语言的方式编写业务规则,使得业务分析人员也能理解和维护规则。 Drools的最新版本Drools 5引入了Guvnor,这是一个基于Web的业务...
Drools支持多种规则语言,如DRL(Drools Rule Language)等,使得业务规则的编写变得直观而简洁。 #### 二、Drools5开发环境搭建 **1. 开发前的准备** - **JDK环境**: 使用Drools5需要确保开发机器上已经安装了JDK...
2. **Drools Query Language (DRL)**:这是一种易于理解和使用的规则语言,支持各种复杂的逻辑操作。 3. **可插拔性**:Drools支持插件架构,可以轻松扩展其功能,例如添加自定义函数。 4. **事件驱动架构**:Drools...
Drools 提供了一个强大的规则语言(DRL - Drools Rule Language)来声明规则,并且集成了工作流引擎,使得业务流程管理成为可能。在 IT 领域,Drools 广泛应用于金融、保险、医疗等行业的决策自动化。 ** 在 IDEA ...
安装完Drools5 IDE后,我们可以通过这个环境编写并运行第一个规则。在Drools中,规则通常以`.drl`文件格式存储,这种文件可以直接在IDE中创建并编辑。 **1.3 规则的编译与运行** 在Drools中,规则的编译与运行主要...
总的来说,Drools 5.4 的完整包和MyEclipse插件结合,为开发者提供了一个高效、便捷的业务规则管理平台。通过深入学习和实践,开发者可以充分利用Drools的强大功能,解决复杂业务逻辑的问题,并通过MyEclipse的集成...
4. **简化复杂规则**:Drools提供Eclipse插件和Guvnor这样的Web界面,使得规则的编写和管理更加直观和便捷。 在Drools信用卡申请实例中,我们可以看到规则引擎如何应用于实际业务场景。用户提交包含个人信息的申请...
Drools 使用DRL(Drools Rule Language)语言来编写规则,同时提供了API和GUI工具支持。 **2. Drools Flow 简介** Drools Flow 扩展了Drools 的功能,引入了流程和任务的概念,支持复杂的业务流程建模。它允许...
- Drools 使用DRL(Drools Rule Language)编写规则,这是一种类似SQL的语言。 - 规则由"when"和"then"两部分组成,"when"定义了触发规则的条件,"then"定义了满足条件后的动作。 - 使用Guvnor,Drools的规则管理...
为了在 MyEclipse 环境中顺利地开发 Drools 规则引擎项目,我们需要完成一系列的基础配置工作,包括但不限于 MyEclipse 的安装与注册、Drools 插件的安装以及 JBoss 和 JDK 的设置。 ##### 1.1 安装与注册 ...
为了测试上述规则,需要编写一个简单的Java程序,该程序负责实例化`Message`对象,并将其插入到Drools规则引擎的Working Memory中。接着,执行规则引擎的`fireAllRules()`方法来触发匹配的规则。 通过以上步骤,...
Drools工作台是一个用于创建、测试和部署规则的集成环境,而IDE插件如Eclipse Drools插件,则可以提供代码编辑器、自动补全和错误检查等功能,极大地提高了开发效率。 在【压缩包子文件的文件名称列表】中提到的...
规则文件使用Drools的规则语言编写,其中包含了IF-THEN语句形式的逻辑。例如: ```drl rule "简单的规则示例" when $customer : Customer(age ) then System.out.println("客户太年轻,无法购买产品。"); end ```...
使用Drools时,开发者首先需要创建规则文件,然后通过KieSession实例加载这些规则。一旦规则被加载,就可以通过KieSession的fireAllRules()方法触发规则的执行。Drools Engine会根据规则的条件自动匹配并执行相应的...
文档中会详细解释Drools的安装和配置,包括Maven依赖、Gradle插件的使用,以及如何在Java项目中引入Drools库。此外,还会介绍Drools的API,如KieServices、KieContainer和KieSession等,这些都是与Drools交互的关键...