`
shift8
  • 浏览: 150416 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

在Drools中使用MVEL

阅读更多

dialect设置规则当中要使用的语言类型 ,默认除了java还有mevl。本文简单介绍mvel。 
mvel是一种嵌入式脚本语言,在规则文件上可以用这种语言建立他们的断言、返回值、Eval和推论。mvel分解析模式(Interpreted Mode)和编译模式(Compiled Mode) 


mvel语法: 
表示对象的属性 

user.name   相当于java代码 user.getName() 
user.manager.name  相当于java代码 user.getManager().getName() 
比较 
user.name == 'John Doe' 
(user.name == 'John Doe') && ((x * 2) - 1) > 20 


返回值 
a = 10; 
b = (a = a * 2) + 10; 相当于java代码  a=10; a= a*2; b=  a + 10; 
return a; 


数组和list访问:user[5]   相当于java代码 user.get(5); 
Map访问:user["foobar"]   相当于java代码 user.get("foobar") 


创建对象: 
new String("foo") 


对一个对象,多个属性赋值 
with (user = new User()) { 
       name = "John Doe", 
       age = 28, 
       sex = Sex.MALE, 
       admin = true 
    } 




脚本: 
note: 
语法跟一些函数语言或脚本语言差不多,如scala 


调用某些方法 
String test = "Hello"; 
Object result = MVEL.eval("toUpperCase()", test); 


获取pojo的属性值 
User user = new User(); 
user.setName("Bob"); 
user.setPassword("Despot"); 
user.setAge(30); 


String name = (String) MVEL.eval("name", user); 


比较 
public class Person { 
    private String name; 
    public void setName(String name) { this.name = name; } 
    public String getName() { return this.name; } 



Person 
personInst = new Person(); 
personInst.setName("Mr. Foo"); 


Object result = MVEL.eval("name == 'Mr. Foo' ", personInst); 


赋值 
Map vars = new HashMap(); 
vars.put("x", new Integer(5)); 
vars.put("y", new Integer(10)); 


Integer result = (Integer) MVEL.eval("x * y", vars); 
相当于java代码 Integer  result =  (Integer)vars.get("x") *  (Integer)vars.get(" y ") 
assert result.intValue() == 50;  // Mind the JDK 1.4 compatible code 


规则文件使用mvel示例 



示例1: 

package com.demo.mvel 


import com.demo.* 


rule "rule1" 
dialect "mvel" 
when 
#设是规则引擎语法 
$a : Applicant( age < 18 ) 
then   
#mvel 语法 
$a.valid = false; 
end 

 


示例2: 

package com.demo.mvel 


import com.demo.* 
import java.util.List; 


rule "rule1" 
    salience 2 
     dialect "java" 
     when 
  eval(true); 
     then 
  Applicant app = new Applicant("依晨",20); 
  insert(app); 
end 


rule "rule2" 
    salience 1 
    dialect "mvel" 
    #no-loop true 不会循环 
    when 
       $app:Applicant(name == "依晨",age<30) 
    then 
       #update方法2 
      #$app.age + 1是mvel语法 
       Applicant app = new Applicant("依晨",$app.age + 1); 
       update(drools.getWorkingMemory().getFactHandleByIdentity($app),app); 
    
       #update方法1 
       #$app.setAge($app.getAge() + 1); 
       #update($app); 
       System.out.println("------" + $app.name+"("+ $app.age + ")"); 
end

 

分享到:
评论

相关推荐

    规则引擎Drools使用手册(中文)

    - **WorkingMemory创建方式变更**:在Drools 4.0中引入了StatefulSession和 StatelessSession两种不同的会话类型,以取代原来的单一WorkingMemory类型。 - **WorkingMemory操作方法变更**:为了避免关键字冲突,部分...

    drools使用的jar包

    drools使用的jar包,运行官方drools-distribution-7.7.0.Final drools使用的jar包,运行官方drools-distribution-7.7.0.Final drools使用的jar包,运行官方drools-distribution-7.7.0.Final drools使用的jar包,运行...

    mvel2-2.1.0.drools16.jar

    mvel2-2.1.0.drools16.jar mvel2-2.1.0.drools16.jar

    Drools4.0使用手册中文

    1. **WorkingMemory 创建**:在 Drools 4.0 中,需要明确创建有状态或无状态的 Rule Session。例如,将原有的 `WorkingMemory wm = rulebase.newWorkingMemory();` 更改为 `StatefulSession wm = rulebase....

    Drools规则引擎使用demo

    Drools是一款强大的规则引擎,由Red ...通过这个"Drools规则引擎使用demo",你可以学习如何配置、加载规则,以及如何在Java应用程序中使用Drools进行规则的执行和事实的管理。这将为你构建智能决策系统提供坚实的基础。

    Drools4.0官方使用手册(中文).pdf

    ### Drools4.0新特性概览 Drools4.0是继Drools3.0.x...总的来说,Drools4.0的更新为业务规则处理提供了更强大、灵活且高效的工具集,同时也要求开发者在迁移过程中对代码进行适当的调整,以充分利用新版带来的优势。

    drools规则引擎4.0中文使用手册

    而在Drools 4.0.x中,则需要使用`rulebase.newStatefulSession()`创建有状态的Rule Session。 - **WorkingMemory操作**:为了避免关键字冲突,部分WorkingMemory的操作方法名称发生了改变,例如`assertObject()`...

    Drools7 demo

    如果你在使用过程中遇到任何问题,这个示例项目将为你提供参考,帮助你更好地理解和应用Drools7的功能。通过研究这个示例,你可以学习如何创建、加载和执行规则,以及如何利用Drools7的新特性来解决实际的业务挑战。

    drools的简单入门案例.doc

    在给出的例子中,引入了 `drools-bom`、`drools-compiler` 和 `drools-mvel` 的 jar 包,以及 `logback-classic` 作为日志处理库。`drools-bom` 是 Drools 的 Bill Of Materials(BOM),它定义了所有依赖的版本,而...

    drools6.0的实例

    在drools 6.0中,你可以使用Java、MVEL或Groovy语法来编写规则。 规则的基本结构包括三个部分:LHS(左-hand side,即事实),RHS(右-hand side,即动作)和条件。LHS定义了规则触发的条件,当这些条件满足时,RHS...

    drools4.0 使用相关的jar包

    antlr-runtime.jar drools-compiler.jar drools-core.jar drools-decisiontables.jar drools-jsr94.jar droolsService.jar jsr94.jar jxl.jar mvel.jar xpp3.jar

    Drools最小jar包依赖

    Drools是一款强大的规则引擎,它允许开发者在Java应用程序中嵌入复杂的业务规则。这个“Drools最小jar包依赖”是指为了启动和运行一个基本的Drools项目,所需要的一些核心库。这些jar包提供了Drools的核心功能,使得...

    drools中Fact的equality modes.doc

    在 drools 中,事实(Fact)是业务逻辑中的实体或对象,它们被插入到工作内存(Working Memory)中,供规则引擎进行匹配和处理。本文将详细讨论 drools 中的事实平等模式(equality modes),以及如何配置和实现这些...

    Packt.Drools.Developers.Cookbook.Jan.2012

    6. **最佳实践与案例研究**:分享了在不同行业和场景中使用Drools的成功案例,以及推荐的最佳实践。 ### 结论 《Packt.Drools.Developers.Cookbook.Jan.2012》是一本全面而深入的资源,对于希望利用JBoss Drools...

    Drools4.0官方使用手册中文

    ### Drools 4.0 官方使用手册中文版概览 #### 一、Drools 4.0 的新特性介绍 ##### 1.1 语言表达式增强 Drools 4.0 在语言表达式方面进行了大幅度的改进,使得规则编写更加灵活和高效。以下是一些显著的变化: - ...

    drools语法详解.doc

    使用 `import` 命令引入需要在规则中使用的类,如 `import com.sample.DroolsTest.Message;`。这使得你可以在规则中直接使用这些类的实例和方法,而无需全限定名。 3. **全局变量(Global)**: `global` 关键字...

    DROOLS语法详解.txt

    为了在规则执行过程中使用全局变量,需要在工作内存中设置相应的值: ```java List list = new ArrayList(); WorkingMemory wm = rulebase.newStatefulSession(); wm.setGlobal("myGlobalList", list); ``` #### ...

Global site tag (gtag.js) - Google Analytics