当前位置: 首页 > 知识库问答 >
问题:

无法在JBPM中启动和完成任务

周祺
2023-03-14

我在KieWorkbench中创建了业务流程,并按照如下方式构建了jar:业务流程:流程ID:myWorkflow。过程

创建任务-参与者:myUser1

提交任务-Actor: myUser2

GAV:组:com.mycom.app.bpm

神器:myWorkflow

版本:1.0

根据我的要求,我需要在一个模块(Test1.war)中创建任务([First task]start and complete),并在另一个模块(Test2.war)中提交任务[Second task]start and complete)。每个模块都有其单独的UI。

Test1中的代码。war:运行时引擎创建过程:

String deploymentId = "com.sample:example:1.0";
ReleaseId releaseId = new ReleaseIdImpl("com.mycom.app.bpm",  "myWorkflow",  "1.0");
EntityManagerFactory emf = Persistence.createEntityManagerFactory("org.jbpm.domain");
RuntimeEnvironmentBuilder builder = RuntimeEnvironmentBuilder.Factory.get().newDefaultBuilder(releaseId).entityManagerFactory(emf).userGroupCallback(new CustomUserCallBack());
RuntimeEngine runtimeEngine = RuntimeManagerFactory.Factory.get().newSingletonRuntimeManager(builder.get(), deploymentId).getRuntimeEngine(null);
KieSession ksession =runtimeEngine.getKieSession();
ProcessInstance processInstance = ksession.startProcess("myWorkflow.process", null);

TaskService taskService = runtimeEngine.getTaskService();
List<Status> status = new ArrayList<Status>();
status.add(Status.Ready);
status.add(Status.Reserved);

List<TaskSummary> tasks = taskService.getTasksByStatusByProcessInstanceId(processInstance.getId(), status, "en-UK");
taskService.start(tasks.get(0).getId(), "myUser1");
taskService.complete(tasks.get(0).getId(), "myUser1", null);

我正在另一个表中保存processIntanceId。

Test2中的代码。war运行时引擎创建过程:

在这里,我正在检索进程IntanceId并提交任务(业务流程中的第二个任务)

String deploymentId = "com.sample:example:1.0";
ReleaseId releaseId = new ReleaseIdImpl("com.mycom.app.bpm",  "myWorkflow",  "1.0");
EntityManagerFactory emf = Persistence.createEntityManagerFactory("org.jbpm.domain");
RuntimeEnvironmentBuilder builder = RuntimeEnvironmentBuilder.Factory.get().newDefaultBuilder(releaseId).entityManagerFactory(emf).userGroupCallback(new CustomUserCallBack());
RuntimeEngine runtimeEngine = RuntimeManagerFactory.Factory.get().newSingletonRuntimeManager(builder.get(), deploymentId).getRuntimeEngine(null);
KieSession ksession =runtimeEngine.getKieSession();
TaskService taskService = runtimeEngine.getTaskService();

List<Status> status = new ArrayList<Status>();
status.add(Status.Ready);
status.add(Status.Reserved);

List<TaskSummary> tasks = taskService.getTasksByStatusByProcessInstanceId(processInstance.getId(), status, "en-UK");
taskService.start(tasks.get(0).getId(), "myUser2");
taskService.complete(tasks.get(0).getId(), "myUser2", null);

当我在第二个模块(Test2.war)开始任务(提交)时,我得到了以下异常:

[com.arjuna.ats.arjuna](ajp-localhost-127.0.0.1-8009-3)ARJUNA012125: TwoPhaseCoordinator.before完成-同步失败Imple

:javax。坚持不懈乐观锁例外:org。冬眠StaleObjectStateException:行被另一个事务更新或删除(或未保存的值映射不正确):[org.drools.persistence.info.SessionInfo#11629]位于org。冬眠ejb。AbstractEntityManagerImpl。org上的wrapStaleStateException(AbstractEntityManagerImpl.java:1390)。冬眠ejb。AbstractEntityManagerImpl。在org上转换(AbstractEntityManagerImpl.java:1308)。冬眠ejb。AbstractEntityManagerImpl。在org上转换(AbstractEntityManagerImpl.java:1289)。冬眠ejb。AbstractEntityManagerImpl。在org上转换(AbstractEntityManagerImpl.java:1295)。冬眠ejb。AbstractEntityManagerImpl$CallbackExceptionApprimpl。组织中的mapManagedFlushFailure(AbstractEntityManagerImpl.java:1481)。冬眠发动机交易同步。内部的SynchronizationCallbackCoordinatorImpl。在org上完成之前(SynchronizationCallbackCoordinatorImpl.java:109)。冬眠发动机交易同步。内部的注册同步。在com上完成之前(RegisteredSynchronization.java:53)。阿诸那。安非他明类兴奋剂。内部的jta。资源。阿诸那古尔。同步简单。在完成之前(SynchronizationImple.java:76)[jbossjts-4.16.2.Final.jar:]在com上。阿诸那。安非他明类兴奋剂。阿诸那。协调员两相协调器。在完成之前(TwoPhaseCoordinator.java:273)[jbossjts-4.16.2.Final.jar:]。阿诸那。安非他明类兴奋剂。阿诸那。协调员两相协调器。end(TwoPhaseCoordinator.java:93)[jbossjts-4.16.2.Final.jar:]位于com。阿诸那。安非他明类兴奋剂。阿诸那。原子作用。commit(AtomicAction.java:164)[jbossjts-4.16.2.Final.jar:]位于com。阿诸那。安非他明类兴奋剂。内部的jta。交易阿诸那古尔。交易简单。commissanddisassociate(TransactionImple.java:1165)[jbossjts-4.16.2.Final.jar:]位于com。阿诸那。安非他明类兴奋剂。内部的jta。交易阿诸那古尔。基本事务。commit(BaseTransaction.java:117)[jbossjts-4.16.2.Final.jar:]位于com。阿诸那。安非他明类兴奋剂。jbossatx。BaseTransactionManagerDelegate。提交(BaseTransactionManagerDelegate.java:75)[jbossjts-integration-4.16.2.Final.jar:]。jboss。tm。usertx。客户ServerVMClientUserTransaction。在org提交(ServerVMClientUserTransaction.java:167)[jboss-transaction-spi-7.0.0.Final.jar:7.0.0.Final]。流口水。坚持不懈jta。JtaTransactionManager。提交(JtaTransactionManager.java:226)[drools-persistence-jpa-6.2.0.Final.jar:6.2.0.Final]。jbpm。服务。任务坚持不懈TaskTransactionInterceptor。在org上执行(TaskTransactionInterceptor.java:56)[jbpm-human-task-jpa-6.2.0.Final.jar:6.2.0.Final]。流口水。果心命令impl。抽象拦截器。executeNext(AbstractInterceptor.java:41)[drools-core-6.2.0.Final.jar:6.2.0.Final]位于org。流口水。坚持不懈jta。TransactionLockInterceptor。在org上执行(TransactionLockInterceptor.java:79)[drools-persistence-jpa-6.2.0.Final.jar:6.2.0.Final]。jbpm。服务。任务命令。TaskCommandExecutorImpl。在org上执行(taskCommandExecuteImpl.java:40)[jbpm-human-task-core-6.2.0.Final.jar:6.2.0.Final]。jbpm。服务。任务impl。命令CommandBasedTaskService。在org上完成(CommandBasedTaskService.java:156)[jbpm-human-task-core-6.2.0.Final.jar:6.2.0.Final]。jbpm。运行时。经理impl。任务同步的taskservice。完成(SynchronizedTaskService.java:130)[jbpm-runtime-manager-6.2.0.Final.jar:6.2.0.Final]有人能告诉我我在这里犯了什么错误吗。。。

共有1个答案

邵兴文
2023-03-14

不要使用单例运行时管理器方法,而是尝试切换到每个流程实例。并且还要确保在请求结束时将运行时引擎放回runtimeManager。

原因是,通过使用单例,您在两个战争中实例化了相同会话(相同会话ID)的两个实例(因为会话ID可以存储在jboss数据目录中,所以两个战争将拾取相同的)。

 类似资料:
  • 问题内容: 我试图导入各种我不记得它们确切名称的库。不幸的是, Xcode 6(使用)不能像使用Objective-c 在 Xcode 5中那样自动完成它们。 例如: 等等 我被迫向Google输入确切的框架名称,然后返回并复制粘贴。 通常,自动完成功能的效果非常差。我在Xcode 6中做错了吗? 我是否应该在设置中设置任何标志以使其正常工作? 问题答案: apple dev论坛中的此修复程序对我

  • 启动jboss服务器时,出现错误,无法启动服务jboss.deployment.unit.“jbpm console.war”。但是当我使用start.demo运行jbpm6演示时,它工作得很好。

  • Eclipse不支持javaScript自动完成和代码高亮,不想使用像codemix这样的付费插件,tabIX有没有其他选择,而不使用其他Ide像Vscode ??

  • 本文向大家介绍tomcat启动完成执行 某个方法 定时任务(Spring)操作,包括了tomcat启动完成执行 某个方法 定时任务(Spring)操作的使用技巧和注意事项,需要的朋友参考一下 第一步引入接口: ServletContextListener 如下图: 第二步:在web.xml文件中配置监听 以上这篇tomcat启动完成执行 某个方法 定时任务(Spring)操作就是小编分享给大家的全

  • 顺便说一句,我用本地的测试了上面的代码,结果一切都运行得很好-在任务完成后立即退出。 任何帮助或想法都是感激的。

  •  说明 调用方法1: $.f2eAct.task(el,options); 函数说明: 该方法完成主要调用joinAndFinish完成任务,会根据接口返回的奖品类型显示不同文案,如卡玛、实物、谢谢参与等。 当获取的奖品数量大于1时,会默认触发 $(".js-package").click(); 事件,所以需要在JS里定义.js-package点击方法。 使用的时候需要在相应dom元素添加 da