以下为测试代码-drl部分
package org.drools.learn
import org.drools.learn.ModifyTest.Message;
global java.util.List list
rule "Stateless modify"
// 注意使用了mvel,用java会报status 不是public
dialect "mvel"
when
m : Message( status == Message.HELLO, message : message )
then
System.out.println( message + " in thread " + Thread.currentThread().getId()+","+System.currentTimeMillis());
modify ( m ) { message = "Goodbye cruel world",
status = Message.GOODBYE };
end
rule "Stateless Good Bye"
// 注意使用了mvel
dialect "mvel"
when
o : Message( status == Message.GOODBYE, message : message )
then
System.out.println( " Stateless Good Bye in thread " + Thread.currentThread().getId()+","+System.currentTimeMillis());
// 使用set 不会触发rule执行
o.setMessage("changed by drl");
o.setStatus (100);
// modify ( o ) { message = "100 cruel world",
// status = 100 };
end
rule "Stateless 100 "
dialect "java"
auto-focus true
when
o : Message( status == 100, message : message )
then
System.out.println( " Stateless 100 should not be printed ,but it printed in " + Thread.currentThread().getId()+","+System.currentTimeMillis());
end
测试java代码
package org.drools.learn;
import org.drools.core.io.impl.ClassPathResource;
import org.kie.api.KieBase;
import org.kie.api.KieBaseConfiguration;
import org.kie.api.KieServices;
import org.kie.api.conf.EqualityBehaviorOption;
import org.kie.api.conf.SequentialOption;
import org.kie.api.io.Resource;
import org.kie.api.logger.KieRuntimeLogger;
import org.kie.api.runtime.StatelessKieSession;
import org.kie.internal.conf.ConsequenceExceptionHandlerOption;
import org.kie.internal.conf.MultithreadEvaluationOption;
import org.kie.internal.utils.KieHelper;
import java.util.ArrayList;
import java.util.List;
public class ModifyTest {
private static KieBase kieBase;
private static KieBaseConfiguration kieBaseConf;
// private static KieSessionConfiguration kieBaseConf;
public static final void main(final String[] args) {
// From the kie services, a container is created from the classpath
KieServices ks=KieServices.get();
kieBaseConf= ks.newKieBaseConfiguration();
//设置SequentialOption以提升性能
kieBaseConf.setOption(SequentialOption.YES);
//设置使用对象的equals函数来进行对象比较
kieBaseConf.setOption(EqualityBehaviorOption.EQUALITY);
//设置exception 捕获,不设置为默认使用org.drools.core.runtime.rule.impl.DefaultConsequenceExceptionHandler
kieBaseConf.setOption(ConsequenceExceptionHandlerOption
.get(DroolsConsequenceExceptionHandler.class));
// kieBaseConf.setOption(MultithreadEvaluationOption.YES);
//使用resource模式装载,参考https://zhuanlan.zhihu.com/p/519969197
Resource resource =
new ClassPathResource("org/drools/learn/ModifyTest.drl");
KieBase base=new KieHelper().addResource(resource)
.build(kieBaseConf);
StatelessKieSession ksession = base.newStatelessKieSession();
ArrayList result=new ArrayList<Object>();
ksession.setGlobal( "list", result);
// The application can insert facts into the session
Message message = new Message();
message.setMessage( "Hello World" );
message.setStatus( Message.HELLO );
ksession.execute( message );
System.out.println("message status change to "+message.getStatus());
}
public static class Message {
public static final int HELLO = 0;
public static final int GOODBYE = 1;
private String message;
private int status;
public Message() {
}
public String getMessage() {
return this.message;
}
public void setMessage(final String message) {
this.message = message;
}
public int getStatus() {
return this.status;
}
public void setStatus(final int status) {
this.status = status;
}
public static Message doSomething(Message message) {
return message;
}
public boolean isSomething(String msg,
List<Object> list) {
list.add( this );
return this.message.equals( msg );
}
}
}
原文地址:https://blog.csdn.net/weixin_40455124/article/details/134623611
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_1106.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。