浏览 1146 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2016-04-29
缺省调用规则包时,需要一个个通过put方式传入相应的值,然后通过execute方法调用规则包之后,通过get方法获得每个返回的参数值。如果事先系统以及有一个map在维护数据,比如工作流中的数据,本身已经存储在map中,那么就可以使用ruleEngine.executeMap方法直接将map作为所有的传入值。传入后也返回map,但是返回的map本身并不是原先的map,而是根据返回值,生成一个新的map,具体可以参考代码: HashMap<String,Object> map = new HashMap<String,Object>() ; map.put("a", 11) ; map.put("b", 22) ; RuleEngine ruleEngine = RuleEngineFactory.newInstance().getRuleEngine(); try { Map os = ruleEngine.executeMap("test.simpleAdd",map); if ( os != null && !os.isEmpty() ) System.out.println(os.get("c")); } catch (Exception e) { e.printStackTrace(); } 1.6. 批量数据调用规则包 如果需要批量计算一批数据,然后将值再以批量数据的形式返回。目前规则引擎支持通过ruleEngine.executeBatch方法用List<List>方式来存储批量的传入数据。比如第二个List中就是将传入值,按顺序放到指定的位置中。执行后,该方法可以返回一个存储了返回值的List<List>。具体如下: ArrayList<ArrayList> inputs = new ArrayList<ArrayList>() ; for (int i = 1 ; i <= 10 ; i++ ) { ArrayList value = new ArrayList() ; value.add(11*i) ; value.add(22*i) ; inputs.add(value); } RuleEngine ruleEngine = RuleEngineFactory.newInstance().getRuleEngine(); try { List<List> os = ruleEngine.executeBatch("test.simpleAdd",inputs); if ( os != null && os.size() > 0 ) { for ( List val : os ) { System.out.println(StringUtil.stringValue(val)); } } } catch (Exception e) { e.printStackTrace(); } 1.7. 以Java Bean调用规则包 以上的调用方式中,都是需要将参数传递给规则包,最后取相应的参数值。通过ruleEngine.executeBeans方法可以实现直接通过将类传递给规则引擎进行调用。其中规则包对应的传入值和传出值,都直接定义在类的属性中。如下所示: public class BeanExecuteTest { public class BeanInfo { private double a ; private double b ; private double c ; public BeanInfo() { a = 11 ; b = 22 ; } public double getA() { return a; } public void setA(double a) { this.a = a; } public double getB() { return b; } public void setB(double b) { this.b = b; } public double getC() { return c; } public void setC(double c) { this.c = c; } } public static void main(String[] args) { BeanInfo info = new BeanExecuteTest().new BeanInfo() ; HashMap<String,Object> map = new HashMap<String,Object>() ; map.put("a", 11) ; map.put("b", 22) ; RuleEngine ruleEngine = RuleEngineFactory.newInstance().getRuleEngine(); try { ruleEngine.executeBeans("test.simpleAdd",info); System.out.println(info.getC()); } catch (Exception e) { e.printStackTrace(); } } } 采用这种方式,可以和其他的系统对接,直接将多个Bean传给规则引擎进行处理。规则引擎自动将Bean的属性作为传入值传给规则包执行,规则包处理完之后,将传出值,复制给Bean的属性值。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |