Drools:使用JPAWorkingMemoryDbLogger时,processInstanceId始终为1

问题描述 投票:0回答:1

我们一直在内存中为呼叫中心执行 JBPM 决策树。这很好用,但我们真的希望能够在 BusinessCentral 实例中呈现图表。这意味着我们必须添加 JPAWorkingMemoryDbLogger,以便将内容记录到 drools 表中。我们没有使用 kie-server 来执行 JBPM,而是在以下代码中执行它。

我们发现每个流程实例 id 都是

1
,而我们通过 kie-server 执行的其他 JBPM 设法获得递增的 PID。

我们需要在 KieSession 的设置中更改哪些内容,以便增加流程实例 ID?

@ApplicationScoped
@Transactional(TxType.MANDATORY)
public class JbpmService {
    @Inject
    private Logger log;
    @Inject
    @Config(defaultValue = "decision-tree.bpmn")
    private String modelName;
    @Inject
    @Config(defaultValue = "decision-tree.decision-tree")
    private String processName;
    @PersistenceUnit(unitName = "org.jbpm.persistence.jpa")
    private EntityManagerFactory emf;

    private KieHelper kieHelper;
    private KieBase kieBase;

    @PostConstruct
    public void postConstruct() {
        kieHelper = new KieHelper();
        kieBase = kieHelper.addResource(newClassPathResource(modelName)).build();
    }

    public WorkflowProcessInstance runJbpmModel(final Map<String, Object> parameters) {
        log.debug("runJbpmModel() parameters:{}", parameters);
        final KieSession kieSession = kieBase.newKieSession();
        kieSession.addEventListener(new JPAWorkingMemoryDbLogger(emf));
        final ProcessInstance startProcess = kieSession.startProcess(processName, parameters);
        log.info("startProcess:{}", startProcess.getId());
        return (WorkflowProcessInstance) startProcess;
    }
}

每次结果:

startProcess:1
java drools jbpm rule-engine kie
1个回答
1
投票

你可以尝试像这个

@Override
public ProcessInstance startProcess(String processId) {
    if (session == null) {
        // load the process
        KieBase kbase = createKnowledgeBase();
        // create a new session
        Properties properties = new Properties();
        properties.put("drools.processInstanceManagerFactory", "org.jbpm.process.instance.impl.DefaultProcessInstanceManagerFactory");
        properties.put("drools.processSignalManagerFactory", "org.jbpm.process.instance.event.DefaultSignalManagerFactory");
        SessionConfiguration config = SessionConfiguration.newInstance(properties);
        session = kbase.newKieSession(config, createEnvironment(context));
        
        new JPAWorkingMemoryDbLogger(session);
        session.getWorkItemManager().registerWorkItemHandler("Human Task", new SystemOutWorkItemHandler());
    }
    return session.startProcess(processId);
}
© www.soinside.com 2019 - 2024. All rights reserved.