Skip to content

Commit 9f6bf08

Browse files
committed
Do not compute persistent state for immutable entities and do not do dirty check
1 parent 6c85938 commit 9f6bf08

14 files changed

Lines changed: 58 additions & 95 deletions

File tree

modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/CmmnEngineConfiguration.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1435,7 +1435,7 @@ public InputStream getMyBatisXmlConfigurationStream() {
14351435

14361436
@Override
14371437
protected void initDbSqlSessionFactoryEntitySettings() {
1438-
defaultInitDbSqlSessionFactoryEntitySettings(EntityDependencyOrder.INSERT_ORDER, EntityDependencyOrder.DELETE_ORDER);
1438+
defaultInitDbSqlSessionFactoryEntitySettings(EntityDependencyOrder.INSERT_ORDER, EntityDependencyOrder.DELETE_ORDER, EntityDependencyOrder.IMMUTABLE_ENTITIES);
14391439

14401440
// Oracle doesn't support bulk inserting for historic task log entries
14411441
if (isBulkInsertEnabled && "oracle".equals(databaseType)) {

modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/db/EntityDependencyOrder.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
package org.flowable.cmmn.engine.impl.db;
1414

1515
import java.util.ArrayList;
16+
import java.util.Collection;
1617
import java.util.Collections;
1718
import java.util.List;
1819

@@ -59,6 +60,7 @@ public class EntityDependencyOrder {
5960

6061
public static List<Class<? extends Entity>> DELETE_ORDER = new ArrayList<>();
6162
public static List<Class<? extends Entity>> INSERT_ORDER;
63+
public static Collection<Class<? extends Entity>> IMMUTABLE_ENTITIES = new ArrayList<>();
6264

6365
static {
6466

@@ -100,6 +102,10 @@ public class EntityDependencyOrder {
100102
INSERT_ORDER = new ArrayList<>(DELETE_ORDER);
101103
Collections.reverse(INSERT_ORDER);
102104

105+
IMMUTABLE_ENTITIES.add(EntityLinkEntityImpl.class);
106+
IMMUTABLE_ENTITIES.add(HistoricEntityLinkEntityImpl.class);
107+
IMMUTABLE_ENTITIES.add(HistoricIdentityLinkEntityImpl.class);
108+
103109
}
104110

105111
}

modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/AbstractEngineConfiguration.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -802,6 +802,10 @@ public DbSqlSessionFactory createDbSqlSessionFactory() {
802802
protected abstract void initDbSqlSessionFactoryEntitySettings();
803803

804804
protected void defaultInitDbSqlSessionFactoryEntitySettings(List<Class<? extends Entity>> insertOrder, List<Class<? extends Entity>> deleteOrder) {
805+
defaultInitDbSqlSessionFactoryEntitySettings(insertOrder, deleteOrder, Collections.emptyList());
806+
}
807+
808+
protected void defaultInitDbSqlSessionFactoryEntitySettings(List<Class<? extends Entity>> insertOrder, List<Class<? extends Entity>> deleteOrder, Collection<Class<? extends Entity>> immutableEntities) {
805809
if (insertOrder != null) {
806810
for (Class<? extends Entity> clazz : insertOrder) {
807811
dbSqlSessionFactory.getInsertionOrder().add(clazz);
@@ -817,6 +821,10 @@ protected void defaultInitDbSqlSessionFactoryEntitySettings(List<Class<? extends
817821
dbSqlSessionFactory.getDeletionOrder().add(clazz);
818822
}
819823
}
824+
825+
if (immutableEntities != null && !immutableEntities.isEmpty()) {
826+
dbSqlSessionFactory.getImmutableEntities().addAll(immutableEntities);
827+
}
820828
}
821829

822830
public void initTransactionFactory() {

modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/db/DbSqlSession.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -405,7 +405,15 @@ protected void removeUnnecessaryOperations() {
405405
public void determineUpdatedObjects() {
406406
updatedObjects = new ArrayList<>();
407407
Map<Class<?>, Map<String, CachedEntity>> cachedObjects = entityCache.getAllCachedEntities();
408+
if (cachedObjects.isEmpty()) {
409+
return;
410+
}
411+
412+
Collection<Class<? extends Entity>> immutableEntities = dbSqlSessionFactory.getImmutableEntities();
408413
for (Class<?> clazz : cachedObjects.keySet()) {
414+
if (immutableEntities.contains(clazz)) {
415+
continue;
416+
}
409417

410418
Map<String, CachedEntity> classCache = cachedObjects.get(clazz);
411419
for (CachedEntity cachedObject : classCache.values()) {

modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/db/DbSqlSessionFactory.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
import java.sql.SQLException;
1717
import java.util.ArrayList;
18+
import java.util.Collection;
1819
import java.util.HashMap;
1920
import java.util.HashSet;
2021
import java.util.List;
@@ -55,6 +56,7 @@ public class DbSqlSessionFactory implements SessionFactory {
5556

5657
protected List<Class<? extends Entity>> insertionOrder = new ArrayList<>();
5758
protected List<Class<? extends Entity>> deletionOrder = new ArrayList<>();
59+
protected Collection<Class<? extends Entity>> immutableEntities = new HashSet<>();
5860

5961
protected boolean isDbHistoryUsed = true;
6062

@@ -327,6 +329,15 @@ public List<Class<? extends Entity>> getDeletionOrder() {
327329
public void setDeletionOrder(List<Class<? extends Entity>> deletionOrder) {
328330
this.deletionOrder = deletionOrder;
329331
}
332+
333+
public Collection<Class<? extends Entity>> getImmutableEntities() {
334+
return immutableEntities;
335+
}
336+
337+
public void setImmutableEntities(Collection<Class<? extends Entity>> immutableEntities) {
338+
this.immutableEntities = immutableEntities;
339+
}
340+
330341
public void addLogicalEntityClassMapping(String logicalName, Class<?> entityClass) {
331342
logicalNameToClassMapping.put(logicalName, entityClass);
332343
}

modules/flowable-engine/src/main/java/org/flowable/engine/impl/cfg/ProcessEngineConfigurationImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1392,7 +1392,7 @@ public void initSessionFactories() {
13921392

13931393
@Override
13941394
protected void initDbSqlSessionFactoryEntitySettings() {
1395-
defaultInitDbSqlSessionFactoryEntitySettings(EntityDependencyOrder.INSERT_ORDER, EntityDependencyOrder.DELETE_ORDER);
1395+
defaultInitDbSqlSessionFactoryEntitySettings(EntityDependencyOrder.INSERT_ORDER, EntityDependencyOrder.DELETE_ORDER, EntityDependencyOrder.IMMUTABLE_ENTITIES);
13961396

13971397
// Oracle doesn't support bulk inserting for event log entries and historic task log entries
13981398
if (isBulkInsertEnabled && "oracle".equals(databaseType)) {

modules/flowable-engine/src/main/java/org/flowable/engine/impl/db/EntityDependencyOrder.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
package org.flowable.engine.impl.db;
1414

1515
import java.util.ArrayList;
16+
import java.util.Collection;
1617
import java.util.Collections;
1718
import java.util.List;
1819

@@ -66,6 +67,7 @@ public class EntityDependencyOrder {
6667

6768
public static List<Class<? extends Entity>> DELETE_ORDER = new ArrayList<>();
6869
public static List<Class<? extends Entity>> INSERT_ORDER;
70+
public static Collection<Class<? extends Entity>> IMMUTABLE_ENTITIES = new ArrayList<>();
6971

7072
static {
7173

@@ -222,6 +224,10 @@ public class EntityDependencyOrder {
222224
INSERT_ORDER = new ArrayList<>(DELETE_ORDER);
223225
Collections.reverse(INSERT_ORDER);
224226

227+
IMMUTABLE_ENTITIES.add(EntityLinkEntityImpl.class);
228+
IMMUTABLE_ENTITIES.add(HistoricEntityLinkEntityImpl.class);
229+
IMMUTABLE_ENTITIES.add(HistoricIdentityLinkEntityImpl.class);
230+
225231
}
226232

227233
}

modules/flowable-entitylink-service/src/main/java/org/flowable/entitylink/service/impl/persistence/entity/EntityLinkEntityImpl.java

Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@
1414

1515
import java.io.Serializable;
1616
import java.util.Date;
17-
import java.util.HashMap;
18-
import java.util.Map;
1917

2018
/**
2119
* @author Tijs Rademakers
@@ -44,21 +42,8 @@ public EntityLinkEntityImpl() {
4442

4543
@Override
4644
public Object getPersistentState() {
47-
Map<String, Object> persistentState = new HashMap<>();
48-
persistentState.put("linkType", this.linkType);
49-
persistentState.put("scopeId", this.scopeId);
50-
persistentState.put("subScopeId", this.subScopeId);
51-
persistentState.put("scopeType", this.scopeType);
52-
persistentState.put("scopeDefinitionId", this.scopeDefinitionId);
53-
persistentState.put("parentElementId", this.parentElementId);
54-
persistentState.put("referenceScopeId", this.referenceScopeId);
55-
persistentState.put("referenceScopeType", this.referenceScopeType);
56-
persistentState.put("referenceScopeDefinitionId", this.referenceScopeDefinitionId);
57-
persistentState.put("rootScopeId", this.rootScopeId);
58-
persistentState.put("rootScopeType", this.rootScopeType);
59-
persistentState.put("hierarchyType", this.hierarchyType);
60-
61-
return persistentState;
45+
// Entity link is immutable
46+
return EntityLinkEntityImpl.class;
6247
}
6348

6449
@Override

modules/flowable-entitylink-service/src/main/java/org/flowable/entitylink/service/impl/persistence/entity/HistoricEntityLinkEntityImpl.java

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@
1414

1515
import java.io.Serializable;
1616
import java.util.Date;
17-
import java.util.HashMap;
18-
import java.util.Map;
1917

2018
/**
2119
* @author Tijs Rademakers
@@ -44,23 +42,8 @@ public HistoricEntityLinkEntityImpl() {
4442

4543
@Override
4644
public Object getPersistentState() {
47-
Map<String, Object> persistentState = new HashMap<>();
48-
persistentState.put("id", this.id);
49-
persistentState.put("linkType", this.linkType);
50-
persistentState.put("scopeId", this.scopeId);
51-
persistentState.put("subScopeId", this.subScopeId);
52-
persistentState.put("scopeType", this.scopeType);
53-
persistentState.put("scopeDefinitionId", this.scopeDefinitionId);
54-
persistentState.put("parentElementId", this.parentElementId);
55-
persistentState.put("referenceScopeId", this.referenceScopeId);
56-
persistentState.put("referenceScopeType", this.referenceScopeType);
57-
persistentState.put("referenceScopeDefinitionId", this.referenceScopeDefinitionId);
58-
persistentState.put("rootScopeId", this.rootScopeId);
59-
persistentState.put("rootScopeType", this.rootScopeType);
60-
persistentState.put("hierarchyType", this.hierarchyType);
61-
persistentState.put("createTime", this.createTime);
62-
63-
return persistentState;
45+
// Historic entity link is immutable
46+
return HistoricEntityLinkEntityImpl.class;
6447
}
6548

6649
@Override

modules/flowable-identitylink-service/src/main/java/org/flowable/identitylink/service/impl/persistence/entity/HistoricIdentityLinkEntityImpl.java

Lines changed: 2 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@
1414

1515
import java.io.Serializable;
1616
import java.util.Date;
17-
import java.util.HashMap;
18-
import java.util.Map;
1917

2018
import org.flowable.common.engine.api.FlowableException;
2119

@@ -43,47 +41,8 @@ public HistoricIdentityLinkEntityImpl() {
4341

4442
@Override
4543
public Object getPersistentState() {
46-
Map<String, Object> persistentState = new HashMap<>();
47-
persistentState.put("id", this.id);
48-
persistentState.put("type", this.type);
49-
50-
if (this.userId != null) {
51-
persistentState.put("userId", this.userId);
52-
}
53-
54-
if (this.groupId != null) {
55-
persistentState.put("groupId", this.groupId);
56-
}
57-
58-
if (this.taskId != null) {
59-
persistentState.put("taskId", this.taskId);
60-
}
61-
62-
if (this.processInstanceId != null) {
63-
persistentState.put("processInstanceId", this.processInstanceId);
64-
}
65-
66-
if (this.scopeId != null) {
67-
persistentState.put("scopeId", this.scopeId);
68-
}
69-
70-
if (this.subScopeId != null) {
71-
persistentState.put("subScopeId", this.subScopeId);
72-
}
73-
74-
if (this.scopeType!= null) {
75-
persistentState.put("scopeType", this.scopeType);
76-
}
77-
78-
if (this.scopeDefinitionId != null) {
79-
persistentState.put("scopeDefinitionId", this.scopeDefinitionId);
80-
}
81-
82-
if (this.createTime != null) {
83-
persistentState.put("createTime", this.createTime);
84-
}
85-
86-
return persistentState;
44+
// Historic identity link is immutable
45+
return HistoricIdentityLinkEntityImpl.class;
8746
}
8847

8948
@Override

0 commit comments

Comments
 (0)