jBPM 6.0 ksession聚类

时间:2014-03-24 12:25:58

标签: jbpm

我的应用程序基于jBPM 5,由于一些群集问题,我正在测试jBPM 6来替换旧版本。我使用了以下示例:https://github.com/jsvitak/jbpm-6-examples/tree/master/rewards-basic

不幸的是,据我测试过,它仍然存在与多个节点共享相同KSession的问题。

RuntimeManager设置为使用单例策略。

  RuntimeEnvironment environment = RuntimeEnvironmentBuilder.Factory.get()
            .newDefaultBuilder()
            .entityManagerFactory(emf)
            .addAsset(ResourceFactory.newClassPathResource("rewards-basic.bpmn"), ResourceType.BPMN2)
            .get();

        environment.getEnvironment().set(EnvironmentName.USE_PESSIMISTIC_LOCKING, true);
    singletonManager = RuntimeManagerFactory.Factory.get().newSingletonRuntimeManager(environment);
    RuntimeEngine runtime = singletonManager.getRuntimeEngine(new Context() {
        @Override
        public Object getContextId() {
            return singletonManager.getIdentifier();
        }
    });

 KieSession ksession = runtime.getKieSession();

        Map<String, Object> params = new HashMap<String, Object>();
        params.put("recipient", recipient);
        ProcessInstance processInstance = ksession.startProcess(
                "com.sample.rewards-basic", params);

测试很简单:

  1. 在节点1上创建第一个进程
  2. 在节点2上创建第二个进程
  3. 在第二步之后,我总是遇到与jBPM 5相同的Hibernate异常:

    引起:org.hibernate.StaleObjectStateException:Row被另一个事务更新或删除(或unsaved-value映射不正确):[org.drools.persistence.info.SessionInfo#1]

    在jBPM 5上我从数据库重新加载KSession,但我将其称为解决方法。

    我的应用程序要求登录到不同节点的不同用户必须可以访问相同的流程实例。流程具有人工任务,是有状态的,并且被认为是长期运行的(几天,几个月)。任务很快就完成了。

    所以,我的问题是:

    1. 我可以在多个节点上使用相同的KSession吗?
    2. 如果没有,jBPM 6在所有节点之间同步进程状态的其他机制是什么?
    3. 如果我使用不同的方法,定时器和事件会在多个节点环境中工作吗?

1 个答案:

答案 0 :(得分:2)

上述问题的一些答案已经写在jbpm论坛:https://community.jboss.org/message/863749#863749