Skip to content

Commit e4eb8bf

Browse files
committed
Do not compute persistent state for immutable entities and do not do dirty check
1 parent baba466 commit e4eb8bf

File tree

14 files changed

+58
-95
lines changed

14 files changed

+58
-95
lines changed

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
@@ -1357,7 +1357,7 @@ public InputStream getMyBatisXmlConfigurationStream() {
13571357

13581358
@Override
13591359
protected void initDbSqlSessionFactoryEntitySettings() {
1360-
defaultInitDbSqlSessionFactoryEntitySettings(EntityDependencyOrder.INSERT_ORDER, EntityDependencyOrder.DELETE_ORDER);
1360+
defaultInitDbSqlSessionFactoryEntitySettings(EntityDependencyOrder.INSERT_ORDER, EntityDependencyOrder.DELETE_ORDER, EntityDependencyOrder.IMMUTABLE_ENTITIES);
13611361

13621362
// Oracle doesn't support bulk inserting for historic task log entries
13631363
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
@@ -752,6 +752,10 @@ public DbSqlSessionFactory createDbSqlSessionFactory() {
752752
protected abstract void initDbSqlSessionFactoryEntitySettings();
753753

754754
protected void defaultInitDbSqlSessionFactoryEntitySettings(List<Class<? extends Entity>> insertOrder, List<Class<? extends Entity>> deleteOrder) {
755+
defaultInitDbSqlSessionFactoryEntitySettings(insertOrder, deleteOrder, Collections.emptyList());
756+
}
757+
758+
protected void defaultInitDbSqlSessionFactoryEntitySettings(List<Class<? extends Entity>> insertOrder, List<Class<? extends Entity>> deleteOrder, Collection<Class<? extends Entity>> immutableEntities) {
755759
if (insertOrder != null) {
756760
for (Class<? extends Entity> clazz : insertOrder) {
757761
dbSqlSessionFactory.getInsertionOrder().add(clazz);
@@ -767,6 +771,10 @@ protected void defaultInitDbSqlSessionFactoryEntitySettings(List<Class<? extends
767771
dbSqlSessionFactory.getDeletionOrder().add(clazz);
768772
}
769773
}
774+
775+
if (immutableEntities != null && !immutableEntities.isEmpty()) {
776+
dbSqlSessionFactory.getImmutableEntities().addAll(immutableEntities);
777+
}
770778
}
771779

772780
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
@@ -413,7 +413,15 @@ protected void removeUnnecessaryOperations() {
413413
public void determineUpdatedObjects() {
414414
updatedObjects = new ArrayList<>();
415415
Map<Class<?>, Map<String, CachedEntity>> cachedObjects = entityCache.getAllCachedEntities();
416+
if (cachedObjects.isEmpty()) {
417+
return;
418+
}
419+
420+
Collection<Class<? extends Entity>> immutableEntities = dbSqlSessionFactory.getImmutableEntities();
416421
for (Class<?> clazz : cachedObjects.keySet()) {
422+
if (immutableEntities.contains(clazz)) {
423+
continue;
424+
}
417425

418426
Map<String, CachedEntity> classCache = cachedObjects.get(clazz);
419427
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
@@ -1301,7 +1301,7 @@ public void initSessionFactories() {
13011301

13021302
@Override
13031303
protected void initDbSqlSessionFactoryEntitySettings() {
1304-
defaultInitDbSqlSessionFactoryEntitySettings(EntityDependencyOrder.INSERT_ORDER, EntityDependencyOrder.DELETE_ORDER);
1304+
defaultInitDbSqlSessionFactoryEntitySettings(EntityDependencyOrder.INSERT_ORDER, EntityDependencyOrder.DELETE_ORDER, EntityDependencyOrder.IMMUTABLE_ENTITIES);
13051305

13061306
// Oracle doesn't support bulk inserting for event log entries and historic task log entries
13071307
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

modules/flowable-idm-engine/src/main/java/org/flowable/idm/engine/IdmEngineConfiguration.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -316,7 +316,7 @@ public DbSqlSessionFactory createDbSqlSessionFactory() {
316316

317317
@Override
318318
protected void initDbSqlSessionFactoryEntitySettings() {
319-
defaultInitDbSqlSessionFactoryEntitySettings(EntityDependencyOrder.INSERT_ORDER, EntityDependencyOrder.DELETE_ORDER);
319+
defaultInitDbSqlSessionFactoryEntitySettings(EntityDependencyOrder.INSERT_ORDER, EntityDependencyOrder.DELETE_ORDER, EntityDependencyOrder.IMMUTABLE_ENTITIES);
320320
}
321321

322322
public void initPasswordEncoder() {

modules/flowable-idm-engine/src/main/java/org/flowable/idm/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.idm.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

@@ -32,6 +33,7 @@ public class EntityDependencyOrder {
3233

3334
public static List<Class<? extends Entity>> DELETE_ORDER = new ArrayList<>();
3435
public static List<Class<? extends Entity>> INSERT_ORDER = new ArrayList<>();
36+
public static Collection<Class<? extends Entity>> IMMUTABLE_ENTITIES = new ArrayList<>();
3537

3638
static {
3739

@@ -49,6 +51,10 @@ public class EntityDependencyOrder {
4951
INSERT_ORDER = new ArrayList<>(DELETE_ORDER);
5052
Collections.reverse(INSERT_ORDER);
5153

54+
IMMUTABLE_ENTITIES.add(MembershipEntityImpl.class);
55+
IMMUTABLE_ENTITIES.add(PrivilegeEntityImpl.class);
56+
IMMUTABLE_ENTITIES.add(PrivilegeMappingEntityImpl.class);
57+
5258
}
5359

5460
}

modules/flowable-idm-engine/src/main/java/org/flowable/idm/engine/impl/persistence/entity/PrivilegeEntityImpl.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,19 +12,14 @@
1212
*/
1313
package org.flowable.idm.engine.impl.persistence.entity;
1414

15-
import java.util.HashMap;
16-
import java.util.Map;
17-
1815
public class PrivilegeEntityImpl extends AbstractIdmEngineEntity implements PrivilegeEntity {
1916

2017
protected String name;
2118

2219
@Override
2320
public Object getPersistentState() {
24-
Map<String, String> state = new HashMap<>();
25-
state.put("id", id);
26-
state.put("name", name);
27-
return state;
21+
// Privilege is immutable
22+
return PrivilegeEntityImpl.class;
2823
}
2924

3025
@Override

modules/flowable-idm-engine/src/main/java/org/flowable/idm/engine/impl/persistence/entity/PrivilegeMappingEntityImpl.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,8 @@ public class PrivilegeMappingEntityImpl extends AbstractIdmEngineEntity implemen
2323

2424
@Override
2525
public Object getPersistentState() {
26-
Map<String, String> state = new HashMap<>();
27-
state.put("id", id);
28-
state.put("privilegeId", privilegeId);
29-
state.put("userId", userId);
30-
state.put("groupId", groupId);
31-
return state;
26+
// Privilege mapping is immutable
27+
return PrivilegeMappingEntityImpl.class;
3228
}
3329

3430
@Override

0 commit comments

Comments
 (0)