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
相关推荐
- **WorkingMemory创建方式变更**:在Drools 4.0中引入了StatefulSession和 StatelessSession两种不同的会话类型,以取代原来的单一WorkingMemory类型。 - **WorkingMemory操作方法变更**:为了避免关键字冲突,部分...
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
Drools是一款强大的规则引擎,由Red ...通过这个"Drools规则引擎使用demo",你可以学习如何配置、加载规则,以及如何在Java应用程序中使用Drools进行规则的执行和事实的管理。这将为你构建智能决策系统提供坚实的基础。
### Drools4.0新特性概览 Drools4.0是继Drools3.0.x...总的来说,Drools4.0的更新为业务规则处理提供了更强大、灵活且高效的工具集,同时也要求开发者在迁移过程中对代码进行适当的调整,以充分利用新版带来的优势。
而在Drools 4.0.x中,则需要使用`rulebase.newStatefulSession()`创建有状态的Rule Session。 - **WorkingMemory操作**:为了避免关键字冲突,部分WorkingMemory的操作方法名称发生了改变,例如`assertObject()`...
如果你在使用过程中遇到任何问题,这个示例项目将为你提供参考,帮助你更好地理解和应用Drools7的功能。通过研究这个示例,你可以学习如何创建、加载和执行规则,以及如何利用Drools7的新特性来解决实际的业务挑战。
在给出的例子中,引入了 `drools-bom`、`drools-compiler` 和 `drools-mvel` 的 jar 包,以及 `logback-classic` 作为日志处理库。`drools-bom` 是 Drools 的 Bill Of Materials(BOM),它定义了所有依赖的版本,而...
在drools 6.0中,你可以使用Java、MVEL或Groovy语法来编写规则。 规则的基本结构包括三个部分:LHS(左-hand side,即事实),RHS(右-hand side,即动作)和条件。LHS定义了规则触发的条件,当这些条件满足时,RHS...
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是一款强大的规则引擎,它允许开发者在Java应用程序中嵌入复杂的业务规则。这个“Drools最小jar包依赖”是指为了启动和运行一个基本的Drools项目,所需要的一些核心库。这些jar包提供了Drools的核心功能,使得...
在 drools 中,事实(Fact)是业务逻辑中的实体或对象,它们被插入到工作内存(Working Memory)中,供规则引擎进行匹配和处理。本文将详细讨论 drools 中的事实平等模式(equality modes),以及如何配置和实现这些...
6. **最佳实践与案例研究**:分享了在不同行业和场景中使用Drools的成功案例,以及推荐的最佳实践。 ### 结论 《Packt.Drools.Developers.Cookbook.Jan.2012》是一本全面而深入的资源,对于希望利用JBoss Drools...
### Drools 4.0 官方使用手册中文版概览 #### 一、Drools 4.0 的新特性介绍 ##### 1.1 语言表达式增强 Drools 4.0 在语言表达式方面进行了大幅度的改进,使得规则编写更加灵活和高效。以下是一些显著的变化: - ...
使用 `import` 命令引入需要在规则中使用的类,如 `import com.sample.DroolsTest.Message;`。这使得你可以在规则中直接使用这些类的实例和方法,而无需全限定名。 3. **全局变量(Global)**: `global` 关键字...
为了在规则执行过程中使用全局变量,需要在工作内存中设置相应的值: ```java List list = new ArrayList(); WorkingMemory wm = rulebase.newStatefulSession(); wm.setGlobal("myGlobalList", list); ``` #### ...