提交 59356bb1 编写于 作者: J Joram Barrez

ACT-2096: Deadlock while concurrently finishing process instances on MSSQL

Delete operations optimization is now disabled by default and can be enabled in config
上级 7bd1a594
......@@ -104,6 +104,7 @@ import org.activiti.engine.impl.calendar.DurationBusinessCalendar;
import org.activiti.engine.impl.calendar.MapBusinessCalendarManager;
import org.activiti.engine.impl.cfg.standalone.StandaloneMybatisTransactionContextFactory;
import org.activiti.engine.impl.db.DbIdGenerator;
import org.activiti.engine.impl.db.DbSqlSession;
import org.activiti.engine.impl.db.DbSqlSessionFactory;
import org.activiti.engine.impl.db.IbatisVariableTypeHandler;
import org.activiti.engine.impl.delegate.DefaultDelegateInterceptor;
......@@ -381,6 +382,16 @@ public abstract class ProcessEngineConfigurationImpl extends ProcessEngineConfig
protected int batchSizeProcessInstances = 25;
protected int batchSizeTasks = 25;
/**
* Experimental setting. Default is false.
*
* If set to true, in the {@link DbSqlSession} during the handling of delete operations,
* those operations of the same type are merged together.
* (eg if you have two 'DELETE from X where id=Y' and 'DELETE from X where id=W', it will be merged
* into one delete statement 'DELETE from X where id=Y or id=W'.
*/
protected boolean isOptimizeDeleteOperationsEnabled;
protected boolean enableEventDispatcher = true;
protected ActivitiEventDispatcher eventDispatcher;
protected List<ActivitiEventListener> eventListeners;
......@@ -755,6 +766,7 @@ public abstract class ProcessEngineConfigurationImpl extends ProcessEngineConfig
dbSqlSessionFactory.setTablePrefixIsSchema(tablePrefixIsSchema);
dbSqlSessionFactory.setDatabaseCatalog(databaseCatalog);
dbSqlSessionFactory.setDatabaseSchema(databaseSchema);
dbSqlSessionFactory.setOptimizeDeleteOperationsEnabled(isOptimizeDeleteOperationsEnabled);
addSessionFactory(dbSqlSessionFactory);
addSessionFactory(new GenericManagerFactory(AttachmentEntityManager.class));
......
......@@ -120,9 +120,12 @@ public class DbSqlSession implements Session {
protected List<DeserializedObject> deserializedObjects = new ArrayList<DeserializedObject>();
protected String connectionMetadataDefaultCatalog;
protected String connectionMetadataDefaultSchema;
protected boolean isOptimizeDeleteOperationsEnabled;
public DbSqlSession(DbSqlSessionFactory dbSqlSessionFactory) {
this.dbSqlSessionFactory = dbSqlSessionFactory;
this.isOptimizeDeleteOperationsEnabled = dbSqlSessionFactory.isOptimizeDeleteOperationsEnabled();
this.sqlSession = dbSqlSessionFactory
.getSqlSessionFactory()
.openSession();
......@@ -634,7 +637,7 @@ public class DbSqlSession implements Session {
protected List<DeleteOperation> optimizeDeleteOperations(List<DeleteOperation> deleteOperations) {
// No optimization possible for 0 or 1 operations
if (deleteOperations.size() <= 1) {
if (!isOptimizeDeleteOperationsEnabled || deleteOperations.size() <= 1) {
return deleteOperations;
}
......@@ -1436,5 +1439,12 @@ public class DbSqlSession implements Session {
return dbSqlSessionFactory;
}
public boolean isOptimizeDeleteOperationsEnabled() {
return isOptimizeDeleteOperationsEnabled;
}
public void setOptimizeDeleteOperationsEnabled(boolean isOptimizeDeleteOperationsEnabled) {
this.isOptimizeDeleteOperationsEnabled = isOptimizeDeleteOperationsEnabled;
}
}
......@@ -176,6 +176,7 @@ public class DbSqlSessionFactory implements SessionFactory {
protected Map<Class<?>,String> selectStatements = new ConcurrentHashMap<Class<?>, String>();
protected boolean isDbIdentityUsed = true;
protected boolean isDbHistoryUsed = true;
protected boolean isOptimizeDeleteOperationsEnabled;
public Class< ? > getSessionType() {
......@@ -373,5 +374,13 @@ public class DbSqlSessionFactory implements SessionFactory {
public boolean isTablePrefixIsSchema() {
return tablePrefixIsSchema;
}
public boolean isOptimizeDeleteOperationsEnabled() {
return isOptimizeDeleteOperationsEnabled;
}
public void setOptimizeDeleteOperationsEnabled(boolean isOptimizeDeleteOperationsEnabled) {
this.isOptimizeDeleteOperationsEnabled = isOptimizeDeleteOperationsEnabled;
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册