问题描述
我正在使用具有基于弹簧的配置的ACTIVITI 7。 因此,我们知道ACTIVITI内部使用mybatis框架,因此我们要求批量执行操作,即批量创建和删除实例。 Activiti使用的默认ExecutorType为SIMPLE。我们正在寻找性能,因此我们尝试在ACTIVITI中设置defaultExecutorType = Batch(如mybatis https://mybatis.org/mybatis-3/configuration.html#settings所建议)。
我正在尝试在mappings.xml文件(org.activiti.db.mapping)的activiti-engine-7.0.0 jar中设置此配置。
<settings>
<setting name="lazyLoadingEnabled" value="false" />
<setting name="defaultFetchSize" value="1000" />
<setting name="defaultExecutorType" value="BATCH" />
</settings>
但是将defaultExecutorType设置为BATCH后,它没有提交数据库中的数据。
注意:如果我将StandaloneProcessEngineConfiguration与defaultExecutorType = Batch一起使用,则它工作正常。
我要添加我的类文件,进程定义,pom.xml和activiti配置文件。
请建议我。
最好的问候
工件:
activiti.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@localhost:1521:xe" />
<property name="username" value="username" />
<property name="password" value="password" />
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionfactorybean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
<property name="dataSource" ref="dataSource" />
<property name="transactionManager" ref="transactionManager" />
<property name="databaseSchemaUpdate" value="true" />
</bean>
<bean id="processEngine" class="org.activiti.spring.ProcessEnginefactorybean">
<property name="processEngineConfiguration" ref="processEngineConfiguration" />
</bean>
<bean id="runtimeService" factory-bean="processEngine"
factory-method="getRuntimeService" />
<bean id="taskService" factory-bean="processEngine"
factory-method="getTaskService" />
<bean id="repositoryService" factory-bean="processEngine"
factory-method="getRepositoryService" />
</beans>
TestClient.java
/*
* To change this license header,choose License Headers in Project Properties.
* To change this template file,choose Tools | Templates
* and open the template in the editor.
*/
package com.mycompany.onlyactiviti;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngineConfiguration;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration;
import org.activiti.engine.runtime.Execution;
import org.activiti.engine.runtime.ProcessInstance;
/**
*
* @author developer
*/
public class TestClient {
public static ProcessEngine processEngine;
private static RuntimeService runtimeService;
static String currentActiveNode;
static String transitionName;
static String transitionDecision = null;
public static void main(String[] args) {
System.out.println("******************************************************************************** ");
System.out.println("Starting Process Engine .............. ");
//processEngine = getProcessConfiguration().buildProcessEngine();//Working properly if we use standalone mode
processEngine = ProcessEngines.getDefaultProcessEngine();//Not committing data if we use SpringbasedConfiguration
runtimeService = processEngine.getRuntimeService();
System.out.println("Process Engine Started.............. ");
System.out.println("******************************************************************************** ");
System.out.println("******************************************************************************** ");
System.out.println(" deploying process deFinition ....");
RepositoryService repositoryService = processEngine.getRepositoryService();
repositoryService.createDeployment().addClassPathResource("State_Machine.bpmn").deploy();
System.out.println("Process DeFinition Deployed Successfully");
System.out.println("******************************************************************************** ");
String pdName = "State_Machine";
String instancekey = "MyKey2";
Map transientvars = new HashMap();
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(pdName,instancekey,transientvars);
System.out.println(" Process Defintion Name :" + processInstance.getProcessDeFinitionName());
System.out.println(" Created Process Instance :" + processInstance.getId());
System.out.println(" ProcessInstance.getActivityId() " + processInstance.getActivityId());
System.out.println("******************************************************************************** ");
System.out.println(" List Available Executions : ");
List<Execution> executions = runtimeService.createExecutionQuery().processInstanceId(processInstance.getId()).list();
System.out.println("size of executions::" + executions.size());//If spring based configuration is used then it return 0 and if standalone configuration is used it return 2
for (Execution ex : executions) {
if (ex.getActivityId() != null) {
List<String> activities = runtimeService.getActiveActivityIds(ex.getId());
System.out.println("\tPrinting activities for execution with id " + ex.getId() + ",ex.isEnded()=" + ex.isEnded() + ",ex.getActivityId()='" + ex.getActivityId() + "'");
for (String activity : activities) {
System.out.println("\t\tFound activity:" + activity);
currentActiveNode = activity;
}
} else {
System.out.println("execution activiti id is null - " + ex.getName());
}
}
System.out.println("******************************************************************************** ");
System.out.println("******************************************************************************** ");
System.out.println("Performing Transition to next state ");
transitionName = "Step2";
List<Execution> executions1 = runtimeService.createExecutionQuery().processInstanceId(processInstance.getId()).processInstanceBusinessKey(instancekey,true).activityId(currentActiveNode).list();
if (executions1.size() > 0) {
Execution execution = executions1.get(0);
Map processVariablesForTrigger = new HashMap();
processVariablesForTrigger.put("transition",transitionName);
runtimeService.trigger(execution.getId(),processVariablesForTrigger);
System.out.println("\n Execute Transition Sucessfully.");
} else {
System.out.println("\n Execution Size is ." + executions1.size());
}
System.out.println("******************************************************************************** ");
System.out.println(" List Available Executions : ");
executions = runtimeService.createExecutionQuery().processInstanceId(processInstance.getId()).list();
System.out.println("size of executions::" + executions.size());//If spring based configuration is used then it return 0 and if standalone configuration is used it return 2
for (Execution ex : executions) {
if (ex.getActivityId() != null) {//Not sure what such records represent,but one execution is found per instance like this!
List<String> activities = runtimeService.getActiveActivityIds(ex.getId());
System.out.println("\tPrinting activities for execution with id " + ex.getId() + ",ex.getActivityId()='" + ex.getActivityId() + "'");
for (String activity : activities) {
System.out.println("\t\tFound activity:" + activity);
currentActiveNode = activity;
}
} else {
System.out.println("execution activiti id is null - " + ex.getName());
}
}
System.out.println("******************************************************************************** ");
System.out.println("******************************************************************************** ");
transitionName = "End";
System.out.println("Performing Transition to next state ");
executions1 = runtimeService.createExecutionQuery().processInstanceId(processInstance.getId()).processInstanceBusinessKey(instancekey,processVariablesForTrigger);
System.out.println("\n Execute Transition Sucessfully.");
} else {
System.out.println("\n Execution Size is ." + executions1.size());
}
processEngine.close();
}
public static ProcessEngineConfiguration getProcessConfiguration() {
ProcessEngineConfiguration cfg = new StandaloneProcessEngineConfiguration()
.setJdbcUrl("jdbc:oracle:thin:@(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = xe)))")
.setJdbcUsername("username")
.setJdbcPassword("password")
.setJdbcDriver("oracle.jdbc.OracleDriver")
.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
return cfg;
}
}
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>ActivitiDeveloperQuickStart</groupId>
<artifactId>ActivitiDeveloperQuickStart</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!-- ... other configurations may exist,such as a build stanza,depending your environment ... -->
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-engine</artifactId>
<version>7.0.0.GA</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.21</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.21</version>
</dependency>
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>19.7.0.0</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.3.8.Final</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>4.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
</project>
State_Machine.bpmn
<?xml version="1.0" encoding="UTF-8"?>
<deFinitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test">
<process id="State_Machine" name="State Machine" isExecutable="true">
<startEvent id="startevent1" name="Start"></startEvent>
<receiveTask id="step1" name="Step1_Success"></receiveTask>
<receiveTask id="step2" name="Step2_Success"></receiveTask>
<endEvent id="endevent1" name="End"></endEvent>
<sequenceFlow id="flow1" sourceRef="startevent1" targetRef="step1"></sequenceFlow>
<sequenceFlow id="flow2" sourceRef="step1" targetRef="step2">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[#{"Step2".equals(transition)}]]></conditionExpression>
</sequenceFlow>
<sequenceFlow id="flow3" sourceRef="step2" targetRef="endevent1">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[#{"End".equals(transition)}]]></conditionExpression>
</sequenceFlow>
</process>
</deFinitions>
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)