JBPM整合Drools(JBossRule)
来源:优易学  2011-9-18 12:53:08   【优易学:中国教育考试门户网】   资料下载   IT书店

  protected void initRuleContextData(ExecutionContext executionContext, WorkingMemory workingMemory) {
  ContextInstance ci = executionContext.getContextInstance();
  Map vars = ci.getVariables();
  workingMemory.insert(ci);
  workingMemory.insert(vars);
  }
  public void assign(Assignable assignable, ExecutionContext executionContext) throws Exception {
  RuleBase ruleBase = readRule(ruleName);
  WorkingMemory workingMemory = ruleBase.newStatefulSession();
  // 为了简便操作,我只是拿了放入 ExecuteContext 中的 variable 进行逻辑处理
  initRuleContextData(executionContext, workingMemory);
  workingMemory.insert(assignable);
  workingMemory.fireAllRules();
  }
  }
  对应的 AgentAssignmentRule.drl 文件内容如下,假定 ExecutionContext 中有 price 这个 variable,我们判定当这个值 > 5000 的时候,我们将此任务分配给 senior_agent 来处理。
  package org.agilejava.workflow
  import java.util.Map
  import org.jbpm.taskmgmt.exe.Assignable
  rule "Assign Agent"
  when
  a : Assignable()
  Map(this[’price’] >= 5000)
  then
  a.setActorId("senior_agent");
  end
  就这样,我们就完成了最为简单的 jBPM 和 Drools 的整合,当然这种方式只是简单的利用了 jBPM 的一些特性来做的,我们每次都得指定这个 RulesAssignmentHandler,还是很麻烦的,更好的方式就是我们改写 ProcessDefinition.xml 的 parser,让 Drools 的规则定义成为和 swimlane, actor-id, expression 这样的分配方式同样级别的,让 Drools 成为 jBPM 的一等公民,这个以后研究好了再来和大家分享。

上一页  [1] [2] 

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训