Droolsrule语法之全局变量(globalvariables)

更新时间:2023-05-22 05:45:20 阅读: 评论:0

Droolsrule语法之全局变量(globalvariables)
Drools rule语法之全局变量(global variables)
Drools规则⽂件中的全局变量(global variables)是规则⽂件代码与java代码之间相互交互的桥梁,我们可以利⽤全局变量让规则⽂件中的程序使⽤java代码中的基本变量、缓存信息或接⼝服务等等。
基本语法:
global  类型 变量名
例如:
global java.util.List list
java设置全局变量:
public void tGlobal(final String identifier,final Object value)
例如:
在java代码中设置全局变量list值:
List<UUID> list = new ArrayList<>();
statelessKieSession.tGlobal("list", list);
java中对list设值后,规则⽂件代码就可以访问list中的数据了。
java中获取全局变量:
public Object getGlobal(final String identifier)
public Globals getGlobals()
全局变量与fact不⼀样:
2020年小学什么时候开学对规则引擎中的fact修改,规则引擎根据算法会动态更新决策树,重新激活某些规则的执⾏,⽽全局变量不会对规则引擎的决策树有任何影响。
全局变量的⼀般⽤法:
国土安全第三季全局变量在规则⽂件中的作⽤和java代码中的作⽤差不多,我们可以让它承担规则⽂件代码和java代码之间沟通的桥梁。在规则⽂件中,我们可以⽤全局变量表⽰规则⽂件中的不变的魔数:
例如:
package com.ample.fact
import java.util.UUID
import com.del.RuleResult
global Integer MAX_AGE
rule "GlobalVariableMagicNumberExample"
when
$p : Person(age > MAX_AGE)
then
$p.getRuleResultDetail().add(RuleResult.REJECT,"age > "+ MAX_AGE);
end
package com.ample.start;
import com.ample.fact.Person;
import com.beaver.drools.util.KieSessionUtil;
import org.kie.api.runtime.StatelessKieSession;
import java.nio.chart.StandardCharts;
/**
* Created by beaver on 2017/3/27.
*/
public class GlobalVariableMagicNumberExample {
private static final int MAX_AGE = 88;
public static void main(String[] args) {
KieSessionUtil kieSessionUtil = new KieSessionUtil();
kieSessionUtil.addFromClassPath("/rules/test/GlobalVariableMagicNumberExample.drl", StandardCharts.UTF_8.name());        StatelessKieSession statelessKieSession = kieSessionUtil.build().newStatelessKieSession();
statelessKieSession.tGlobal("MAX_AGE",MAX_AGE );
服务生的英文Person person = new Person();
person.tAge(89);
System.out.println(person);
System.out.println(person);
浑家是什么意思
}
}
iata
java代码中:
private static final int MAX_AGE = 88;
statelessKieSession.tGlobal("MAX_AGE",MAX_AGE );
规则⽂件代码:
$p : Person(age > MAX_AGE)
规则⽂件可以使⽤java中提供的信息,同样,规则⽂件也可以向java程序提供的变量写⼊信息: 例如:
package com.ample.fact
import java.util.UUID
global java.util.List list
global com.ample.rvice.impl.EmailServiceImpl emailService
rule "GlobalVariablesExample"
when
eval(true)
then
list.add(UUID.randomUUID());
emailService.ndSMS("nd ");
end
规则⽂件中代码对list写⼊了某些值,看java代码中的执⾏结果:
public class GlobalVariableExample {
private static EmailServiceImpl emailService = new EmailServiceImpl();
public static void main(String[] args) {
KieSessionUtil kieSessionUtil = new KieSessionUtil();
kieSessionUtil.addFromClassPath("/rules/test/GlobalVariablesExample.drl", StandardCharts.UTF_8.name());        StatelessKieSession statelessKieSession = kieSessionUtil.build().newStatelessKieSession();
List<UUID> list = new ArrayList<>();
statelessKieSession.tGlobal("list", list);
statelessKieSession.tGlobal("emailService", emailService);
System.out.println(list);
System.out.println(list);
}
}
执⾏结果:
[]
ndSms:nd
ndSms:nd
[62e765d2-4924-46ec-89b3-83819a1cd22a, f64b0685-9b32-4493-9e13-41c53a8805b3]
输出了[62e765d2-4924-46ec-89b3-83819a1cd22a, f64b0685-9b32-4493-9e13-41c53a8805b3] Process finished with exit code 0
全局变量可以设置为java代码中的接⼝变量,以让规则⽂件调⽤java中的服务:
在规则⽂件代码中,我们可以利⽤全局变量调⽤java服务接⼝实现。 例如java接⼝实现(远程RPC⼀样可以):
package com.ample.rvice.impl;
import com.ample.fact.Person;
import java.util.ArrayList;
import java.util.List;
/**
* Created by beaver on 2017/3/27.
*/
public class PersonServiceImpl {
public List<Person> queryPersons() {
List<Person> personList = new ArrayList<>();
Person person = new Person();
person.tAge(55);
personList.add(person);
Person person2 = new Person();
person2.tAge(30);
return personList;
}
public int savePerson(List<Person> personList) {
System.out.println("save persons" + personList);
return personList.size();
}
}法语字典
规则⽂件:
package com.ample.fact
import com.ample.rvice.impl.PersonServiceImpl
import java.util.Arrays
import java.util.List
global PersonServiceImpl personService
rule "GlobalVariableJavaServiceExample"
when
Object()
$p : Person(age > 44) from personService.queryPersons()
then
personService.savePerson(Arrays.asList( $p));
end
使⽤的java服务见:
java代码:
英语教育机构package com.ample.start;
import com.ample.rvice.impl.PersonServiceImpl;
import com.beaver.drools.util.KieSessionUtil;
芳草地小学怎么样
import org.kie.api.runtime.StatelessKieSession;
import java.nio.chart.StandardCharts;
/**
英语6级听力* Created by beaver on 2017/3/27.
*/
public class GlobalVariableJavaServiceExample {
rpc
private static PersonServiceImpl personService = new PersonServiceImpl();
public static void main(String[] args) {
KieSessionUtil kieSessionUtil = new KieSessionUtil();
kieSessionUtil.addFromClassPath("/rules/test/GlobalVariableJavaServiceExample.drl", StandardCharts.UTF_8.name());        StatelessKieSession statelessKieSession = kieSessionUtil.build().newStatelessKieSession();
statelessKieSession.tGlobal("personService", personService);
}
}
控制台输出:
save persons[Person{name='null', age=55, address=null, exGirlfriend=null, message='null', ruleResu
ltDetail=RuleResultDetail{ruleResultDetailInfo={}}}]
Process finished with exit code 0
java服务提供了两个⼈,但满⾜条件的就⼀个,所以save 信息之输出⼀个。

本文发布于:2023-05-22 05:45:20,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/78/728385.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:规则   代码   全局变量   信息   引擎   变量   小学   实现
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图