是否可以将activiti与hibernate一起使用而不是mybatis?情况是我们的实际项目使用hibernate作为持久性框架,我们使用jbpm 3进行处理.在jbpm 3中,可以使用单个hibernate会话,因此我们可以获得一些好处.现在我们考虑迁移到activiti,因为架构非常好(春天,服务等),但在研究中我发现activiti使用mybatis来实现持久性.
对于持久性问题,我们是否可以使用与jbpm 3相同的活动来执行相同的操作?如果有可能,我需要做什么,让它工作.
编辑:我解决了我的需求,并在活动论坛上发布我的解决方案,为每个遇到同样问题的人发布.简而言之:共享会话是不可能的,但您可以使用相同的事务管理器,它可以帮助您在发生错误时回滚.
Greetz cookie-exploit
我正在尝试为我的项目选择一个开放的BPMN工具,我发现了Eclipse和Activiti的Infinity/Stardust.
这些BPMN工具之间有什么区别/优势?
我们正在使用Activiti框架构造分离的业务流程,以处理特定的消息。
BPMN有一个表示法Parallel Gateway,它使我们能够创建“并行”执行的任务流。但是,是否有一种机制(网关)启动并行流,但是一旦并行流之一完成,该机制就会杀死其他流?
例如:
StartEvent -> ParallelGateway (fork) -> {FlowA, FlowB, FlowC} -> ParallelGateway (join) -> EndEvent
Run Code Online (Sandbox Code Playgroud)
如果FlowB首先完成,则加入网关一定不要等待其他对象完成,将它们停止(这样就不必执行到最后)并继续进行下一个流程(在示例中为EndEvent)。
有什么想法要实现吗?
编辑
找到了这个线程,但是不幸的是,该解决方案并没有阻止其他流程。
例如,我有一个可以立即启动或延迟(startTime变量)的工作流程.
在startEvent我有一个exclusiveGateway地方,我检查流程应该继续或等到startTime.
<exclusiveGateway id="startGateway" default="startSequenceFlow3"/>
<sequenceFlow id="startSequenceFlow1" sourceRef="startGateway" targetRef="startTimer">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${startTime != null}]]></conditionExpression>
</sequenceFlow>
Run Code Online (Sandbox Code Playgroud)
启动传递变量的工作流startTime可以正常工作,但不传递startTime抛出异常:
无法解析标识符'startTime'
什么是检查是否startTime设置的最佳方法,因为startTime != null不起作用?我宁愿不传球startTime(不是startTime=null).
我使用的代码包括变量:
variables.put("startTime", startTime);
ProcessInstance instance = runtimeService.startProcessInstanceByKey(processKey, variables);
Run Code Online (Sandbox Code Playgroud)
或没有:
ProcessInstance instance = runtimeService.startProcessInstanceByKey(processKey, variables);
Run Code Online (Sandbox Code Playgroud) 我试图安装Activiti的插件,但似乎它不再可用,因为我尝试将其添加为Eclipse Kepler SR2中的新软件,链接http://activiti.org/designer/update但它失败了.我在网上看了但没找到解决办法.
任何的想法?
我在我的项目中使用'Activiti'.几天前,我将IDE从Eclipse更改为IntelliJ IDEA.'Activiti'有一个非常有用且友好的Eclipse插件,名为'Activiti Designer'.但是我发现使用'Activiti'时Intellij的插件'actiBPM'非常难以使用,而且根本不友好.那么,在使用'Activiti'时,有没有更好的插件可以用于IntelliJ?谢谢.
我正在尝试使用一个简单的Spring示例来使用Activiti 5.5,并遇到一些麻烦.我正在使用在%activiti_home%/ apps/apache-tomcat-6.0.32/webapps/activiti-rest下配置了activiti的流程引擎.
我修改了spring配置文件,以便它执行我的自定义spring配置文件的include:
<import resource="classpath*:applicationContext*.xml"/>
Run Code Online (Sandbox Code Playgroud)
我将applicationContext.xml文件部署到activiti-rest/WEB-INF/classes文件夹.Activiti启动正常,我在我的bean构造函数中看到System.out.println,所以我知道正在读取我的spring配置并且正在构造bean.我为实现JavaDelegate的类创建了一个spring bean,并将bean注入其中,并且它总是为null.
这是我的Spring配置:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
<bean id="myBean" class="org.bpmn.examples.MyBean"/>
<bean id="taskBean" class="org.bpmn.examples.GetBeanTest">
<property name="myBean" ref="myBean"/>
</bean>
</beans>
Run Code Online (Sandbox Code Playgroud)
这是我的豆子:
package org.bpmn.examples;
import java.io.Serializable;
public class MyBean implements Serializable {
public MyBean() {
super();
System.out.println("<========================== myBean ===========================>");
System.out.println("<========================== myBean ===========================>");
System.out.println("<========================== myBean ===========================>");
}
/**
*
*/
private static final long serialVersionUID = -2867207654072787909L;
Long id;
String description;
public Long getId() {
return id; …Run Code Online (Sandbox Code Playgroud) 是否可以使用TaskService获取所有进程或任务变量:
processEngine.getTaskService.createTaskQuery().list();
我知道有机会通过变量获取变量
processEngine.getTaskService().getVariable()
要么
processEngine.getRuntimeService().getVariable()
但上面的每个操作都进入数据库.如果我有100个任务的列表,我将向DB提出100个查询.我不想使用这种方法.有没有其他方法来获取任务或过程相关的变量?
我是activiti的新手,刚刚开始探索它提供的东西.我正在尝试配置activiti以使用我在我的机器上安装的mysql数据库.我试着按照这个教程,但在这里有一些困惑.
我从这个链接下载了activiti:http://activiti.org/download.html
当前版本的activiti是5.17
在步骤01中按照本教程操作时,我在下载的zip中找不到文件夹"setup".我也找不到build.db.properties文件.{Activiti的家庭} /setup/build.db.properties
在将war文件部署到tomact后,我确实有这个文件{activiti-home} /WEB-INF/db.properties.修改此文件是否足以将数据库更改为mysql而不是默认的内存中的h2数据库?
任何有关这方面的帮助将非常感激.
今天花了一些时间才了解如何使用Activiti的skipExpression功能。我希望我能找到这样的问题,所以我会把它放在这里并自己回答。
我尝试在 UserTask 中使用 activiti:skipExpression ,如下所示:
<userTask id="usertask1" name="Order Book" activiti:assignee="myTestUser1"
activiti:skipExpression="${skip == 1}">
</userTask>
Run Code Online (Sandbox Code Playgroud)
根据https://activiti.atlassian.net/browse/ACT-2176,从 5.18 开始这应该是可能的。但我无法让它发挥作用。
我希望跳过该任务并创建下一个任务,但流程的行为就像不存在跳过表达式一样(创建了任务 1,未创建任务 2)。