2012-10-01 12:24:17| 分类: ​​ drools​​​ | 标签:​​jbpm3​​​ ​​ drools5​​ |字号大中小 订阅




jbpm版本是3,drools版本是5



思路:在jbpm的action处理代码使用Drools.把值塞给规则引擎,规则引擎使用相应规则domething,把值回写返回给JBPM





1.在工作流的节点处理使用drools





流程节点配置node的action和增加field



<node name="TransFormNode">



<action class="demo.frist.nodb. TodoActionHandler" name="TODO">



< ruleFile>nodb/test.drl</ ruleFile> <!--action的字段名,调用的规则-->



</action>



<transition to="end-state1"></transition>



</node>





流程节点action类,在action类处理调用drools规则



TodoActionHandler implements ActionHandler {





private static final long serialVersionUID = 1L;





private String ruleFile;





public String getRuleFile() {



return ruleFile;



}





public void setRuleFile(String ruleFile) {



this.ruleFile = ruleFile;



}





@Override



public void execute(ExecutionContext arg0) throws Exception {



//drools 环境



KnowledgeBuilder kbuilder = KnowledgeBuilderFactory



.newKnowledgeBuilder();



kbuilder.add(ResourceFactory.newClassPathResource(ruleFile),



ResourceType.DRL);





KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();



kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());



StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();






//把数据交给drools 进行规则运算



Calendar cal = Calendar.getInstance();



cal.setTime(new Date());





ksession.insert(cal);



ksession.fireAllRules();



ksession.dispose();



}



}





2.规则文件处理



方法1:运算结果回写可以通过规则引擎的gloab保存结果,规则引擎运行后在action和其它地方取出结果使用



方法2:运算结果写到你传入对象,规则运行完传入对象结果就是规则运行结果。





示例:



package demo.first.nodb





import java.util.Calendar;





rule "isWorkDay"



when



$cal:Calendar();



eval($cal.get(Calendar.DAY_OF_WEEK) > 1 && $cal.get(Calendar.DAY_OF_WEEK) < 7);



then



System.out.println("今天是工作天");



end;





rule "isRestDay"



when



$cal:Calendar();



eval($cal.get(Calendar.DAY_OF_WEEK) == 1 || $cal.get(Calendar.DAY_OF_WEEK) == 7);



then



System.out.println("今天是休息天");



end;






文推荐阅读: