`
Mr-zhang
  • 浏览: 18459 次
  • 性别: Icon_minigender_1
文章分类
社区版块
存档分类
最新评论

规则引擎开发规范--程序开发类规范<连载3>

VRS 
阅读更多
1.5   直接将传入值以map方式传入调用规则包
缺省调用规则包时,需要一个个通过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的属性值。

分享到:
评论

相关推荐

    Struts原理、开发及项目实施

    Struts原理、开发及项目实施&lt;br/&gt; Holen 2002-9-12&lt;br/&gt;&lt;br/&gt;1、 摘要&lt;br/&gt;2、 关键词&lt;br/&gt;3、 Framework&lt;br/&gt;4、 Struts的起源&lt;br/&gt;5、 Struts工作原理&lt;br/&gt;6、 Struts安装&lt;br/&gt;7、 一个实例&lt;br/&gt;8、 Struts优缺点...

    FlowChartX控件

    &lt;br&gt;&lt;br&gt; FlowChartX控件 很多开发环境下和很多编程语言下测试过,也可用于全世界各地公司用Visual C++, Visual Basic, C#或VB.NET, Visual FoxPro, Borland Delphi, VBA, PowerBuilder, Advantage Gen, Progress 4...

    框架设计学习资料 连载 连载不断更新

    - **标签**: `&lt;h1&gt;`至`&lt;h6&gt;`,分别表示不同级别的标题。 - **示例**: ```html &lt;h1&gt;一级标题&lt;/h1&gt; &lt;h2&gt;二级标题&lt;/h2&gt; ``` ##### 3. HTML段落 - **标签**: `&lt;p&gt;`,用于定义一个段落。 - **示例**: ```html &lt;p&gt;...

    PHP实例开发源码-php读怪小说连载系统.zip

    5. **模板引擎**:为了方便页面布局和样式,项目可能使用了如Twig或Smarty这样的模板引擎,将视图与控制器逻辑分离。 6. **错误处理和日志记录**:良好的错误处理和日志记录机制对于调试和维护至关重要,PHP的错误...

    Litelog - WCF 项目应用连载[6] - 升级Lig服务 - 设计ILigger 构建一个完善的Lig版本

    WCF 项目应用连载[5] - 自定义配置 扩展ChannelFactory&lt;T&gt; WCF 项目应用连载[6] - 升级Lig服务 - 设计ILigger 构建一个完善的Lig版本 WCF 项目应用连载[7] - 绑定、服务、行为 大数据传输与限流 - 上 WCF 项目应用...

    PHP实例开发源码-杰奇php小说连载系统.zip

    杰奇PHP小说连载系统是一个基于PHP编程语言的开源软件,专为在线小说网站设计和开发。这个系统提供了全面的功能,包括小说的发布、管理、分类、搜索以及用户互动等,旨在帮助站长快速搭建一个高效、易用的小说阅读...

    Java学习资料入门的所有类容连载--01

    Java学习资料入门的所有类容连载--01

    FPGA Verilog HDL 设计实例系列连载--------有限状态机设计

    ### FPGA Verilog HDL 设计实例系列连载——有限状态机设计 #### 1. 有限状态机(FSM)概述 有限状态机(Finite State Machine,FSM)是数字系统设计中非常重要的概念之一,它被广泛应用于各种数字系统的控制逻辑中...

    HTML详解连载(1)

    在实际应用中,我们还会学习如何创建标题(`&lt;h1&gt;`到`&lt;h6&gt;`)、段落(`&lt;p&gt;`)、列表(无序`&lt;ul&gt;`和有序`&lt;ol&gt;`,以及列表项`&lt;li&gt;`)、链接(`&lt;a&gt;`)、图像(`&lt;img&gt;`)以及区块(`&lt;div&gt;`)等基本元素。此外,还将讨论...

    ESRI Flex GIS开发连载(1) ---环境搭建

    **ESRI Flex GIS开发连载(1) - 环境搭建** 在ESRI Flex GIS开发中,环境搭建是首要步骤,它确保了开发者有一个稳定且兼容的平台来创建GIS应用程序。Flex是Adobe开发的一种用于构建富互联网应用(RIA)的编程语言,...

    Litelog - WCF 项目应用连载[2] - 创建Lig日志系统 C# 源代码

    WCF 项目应用连载[5] - 自定义配置 扩展ChannelFactory&lt;T&gt; WCF 项目应用连载[6] - 升级Lig服务 - 设计ILigger 构建一个完善的Lig版本 WCF 项目应用连载[7] - 绑定、服务、行为 大数据传输与限流 - 上 WCF 项目...

Global site tag (gtag.js) - Google Analytics