`

Drools插件安装、规则语言实例、域语言实例

阅读更多

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
0
0
分享到:
评论
2 楼 山脚下的农民 2011-03-01  
很不错,感谢楼主分享,不多见的完整例子。
1 楼 blueram 2010-09-02  
这个东西在那些地方可以用到呀

相关推荐

    基于Drools的规则引擎实例(完整、可运行eclipse工程)

    4. **DRL(Drools Rule Language)**:Drools 使用一种特定的规则定义语言DRL,类似于SQL,用于编写规则。 **Drools 工作流程** 1. **加载规则**:首先,你需要将DRL文件加载到Drools的知识库(KieBase)中,这...

    基于Spring + Drools6.4规则引擎代码实例.

    ### 基于Spring + Drools 6.4规则引擎代码实例详解 #### 知识点一:Drools规则引擎介绍与应用背景 Drools是一款强大的业务规则管理系统(BRMS),它提供了核心的业务规则引擎(BRE)、Web作者和规则管理应用程序...

    Drools规则引擎使用demo

    Drools是一款强大的规则引擎,由Red Hat公司开发并维护,它主要用于实现业务规则的管理和执行。Drools提供了一种声明式的方式来定义业务规则,使得非技术人员也能理解和修改规则,从而降低了业务逻辑与代码的耦合度...

    Drools规则引擎介绍.ppt

    它提供了一个强大的Eclipse插件,允许开发人员使用领域特定语言(DSL)以接近自然语言的方式编写业务规则,使得业务分析人员也能理解和维护规则。 Drools的最新版本Drools 5引入了Guvnor,这是一个基于Web的业务...

    Drools5规则引擎开发文档

    Drools支持多种规则语言,如DRL(Drools Rule Language)等,使得业务规则的编写变得直观而简洁。 #### 二、Drools5开发环境搭建 **1. 开发前的准备** - **JDK环境**: 使用Drools5需要确保开发机器上已经安装了JDK...

    Drools 规则引擎的介绍及应用

    2. **Drools Query Language (DRL)**:这是一种易于理解和使用的规则语言,支持各种复杂的逻辑操作。 3. **可插拔性**:Drools支持插件架构,可以轻松扩展其功能,例如添加自定义函数。 4. **事件驱动架构**:Drools...

    idea开发drools的设置文件

    Drools 提供了一个强大的规则语言(DRL - Drools Rule Language)来声明规则,并且集成了工作流引擎,使得业务流程管理成为可能。在 IT 领域,Drools 广泛应用于金融、保险、医疗等行业的决策自动化。 ** 在 IDEA ...

    Drools5规则引擎开发教程

    安装完Drools5 IDE后,我们可以通过这个环境编写并运行第一个规则。在Drools中,规则通常以`.drl`文件格式存储,这种文件可以直接在IDE中创建并编辑。 **1.3 规则的编译与运行** 在Drools中,规则的编译与运行主要...

    drools-5.4-完整包以及myeclipse插件

    总的来说,Drools 5.4 的完整包和MyEclipse插件结合,为开发者提供了一个高效、便捷的业务规则管理平台。通过深入学习和实践,开发者可以充分利用Drools的强大功能,解决复杂业务逻辑的问题,并通过MyEclipse的集成...

    Drools规则引擎介绍.pptx

    4. **简化复杂规则**:Drools提供Eclipse插件和Guvnor这样的Web界面,使得规则的编写和管理更加直观和便捷。 在Drools信用卡申请实例中,我们可以看到规则引擎如何应用于实际业务场景。用户提交包含个人信息的申请...

    drools flow分析报告

    Drools 使用DRL(Drools Rule Language)语言来编写规则,同时提供了API和GUI工具支持。 **2. Drools Flow 简介** Drools Flow 扩展了Drools 的功能,引入了流程和任务的概念,支持复杂的业务流程建模。它允许...

    drools6的demo

    - Drools 使用DRL(Drools Rule Language)编写规则,这是一种类似SQL的语言。 - 规则由"when"和"then"两部分组成,"when"定义了触发规则的条件,"then"定义了满足条件后的动作。 - 使用Guvnor,Drools的规则管理...

    Myeclipse下drools开发手册

    为了在 MyEclipse 环境中顺利地开发 Drools 规则引擎项目,我们需要完成一系列的基础配置工作,包括但不限于 MyEclipse 的安装与注册、Drools 插件的安装以及 JBoss 和 JDK 的设置。 ##### 1.1 安装与注册 ...

    drools入门指南(基于drools6.2).pdf

    为了测试上述规则,需要编写一个简单的Java程序,该程序负责实例化`Message`对象,并将其插入到Drools规则引擎的Working Memory中。接着,执行规则引擎的`fireAllRules()`方法来触发匹配的规则。 通过以上步骤,...

    JBoss Rules 初学实例

    Drools工作台是一个用于创建、测试和部署规则的集成环境,而IDE插件如Eclipse Drools插件,则可以提供代码编辑器、自动补全和错误检查等功能,极大地提高了开发效率。 在【压缩包子文件的文件名称列表】中提到的...

    drools的简单例子

    规则文件使用Drools的规则语言编写,其中包含了IF-THEN语句形式的逻辑。例如: ```drl rule "简单的规则示例" when $customer : Customer(age ) then System.out.println("客户太年轻,无法购买产品。"); end ```...

    drools runtime所需zip包

    使用Drools时,开发者首先需要创建规则文件,然后通过KieSession实例加载这些规则。一旦规则被加载,就可以通过KieSession的fireAllRules()方法触发规则的执行。Drools Engine会根据规则的条件自动匹配并执行相应的...

    Drool最新 中文文档

    文档中会详细解释Drools的安装和配置,包括Maven依赖、Gradle插件的使用,以及如何在Java项目中引入Drools库。此外,还会介绍Drools的API,如KieServices、KieContainer和KieSession等,这些都是与Drools交互的关键...

Global site tag (gtag.js) - Google Analytics