drools如何获取处理(执行)结果?
在Drools的使用过程中,经常会有朋友问到,如何获得返回的结果。通常情况下,我们是通过传入的Fact对象来携带规则中处理之后的结果的。
通常我们会定义个用于返回编码和错误信息的父类Result:
@Data public class Result { /** * 操作编码 */ private String code; /** * 描述信息 */ private String desc; }
然后对应的Fact对象继承自该父类:
@EqualsAndHashCode(callSuper = true) @Data public class User extends Result{ private String username; private BigDecimal amount; }
这样,在规则中的RHS中便可以将结果设置到code和desc字段中:
package com.choupangxia.calculate; import com.choupangxia.entity.User; rule "test-result" when $u : User(); then $u.setCode("success"); $u.setDesc("校验成功"); end
由于Drools工作内存中的Fact对象(上面的User)和业务调用时传递的User是同一个对象,双面都持有该对象的引用,那么在API调用出的User对象中便可直接获得Drools规则引擎中对User对象的修改。
业务根据User对象中的code和desc进行判断,然后进行后续业务逻辑的处理。
关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台
除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接