use of org.activiti.engine.impl.persistence.entity.Entity in project Activiti by Activiti.
the class DbSqlSession method cacheLoadOrStore.
// internal session cache
// ///////////////////////////////////////////////////
@SuppressWarnings("rawtypes")
protected List cacheLoadOrStore(List<Object> loadedObjects) {
if (loadedObjects.isEmpty()) {
return loadedObjects;
}
if (!(loadedObjects.get(0) instanceof Entity)) {
return loadedObjects;
}
List<Entity> filteredObjects = new ArrayList<Entity>(loadedObjects.size());
for (Object loadedObject : loadedObjects) {
Entity cachedEntity = cacheLoadOrStore((Entity) loadedObject);
filteredObjects.add(cachedEntity);
}
return filteredObjects;
}
use of org.activiti.engine.impl.persistence.entity.Entity in project Activiti by Activiti.
the class DbSqlSession method flushUpdates.
protected void flushUpdates() {
for (Entity updatedObject : updatedObjects) {
String updateStatement = dbSqlSessionFactory.getUpdateStatement(updatedObject);
updateStatement = dbSqlSessionFactory.mapStatement(updateStatement);
if (updateStatement == null) {
throw new ActivitiException("no update statement for " + updatedObject.getClass() + " in the ibatis mapping files");
}
log.debug("updating: {}", updatedObject);
int updatedRecords = sqlSession.update(updateStatement, updatedObject);
if (updatedRecords == 0) {
throw new ActivitiOptimisticLockingException(updatedObject + " was updated by another transaction concurrently");
}
// See https://activiti.atlassian.net/browse/ACT-1290
if (updatedObject instanceof HasRevision) {
((HasRevision) updatedObject).setRevision(((HasRevision) updatedObject).getRevisionNext());
}
}
updatedObjects.clear();
}
use of org.activiti.engine.impl.persistence.entity.Entity in project Activiti by Activiti.
the class DbSqlSession method flushBulkInsert.
protected void flushBulkInsert(Collection<Entity> entities, Class<? extends Entity> clazz) {
String insertStatement = dbSqlSessionFactory.getBulkInsertStatement(clazz);
insertStatement = dbSqlSessionFactory.mapStatement(insertStatement);
if (insertStatement == null) {
throw new ActivitiException("no insert statement for " + entities.iterator().next().getClass() + " in the ibatis mapping files");
}
Iterator<Entity> entityIterator = entities.iterator();
Boolean hasRevision = null;
while (entityIterator.hasNext()) {
List<Entity> subList = new ArrayList<Entity>();
int index = 0;
while (entityIterator.hasNext() && index < dbSqlSessionFactory.getMaxNrOfStatementsInBulkInsert()) {
Entity entity = entityIterator.next();
subList.add(entity);
if (hasRevision == null) {
hasRevision = entity instanceof HasRevision;
}
index++;
}
sqlSession.insert(insertStatement, subList);
}
if (hasRevision != null && hasRevision) {
entityIterator = entities.iterator();
while (entityIterator.hasNext()) {
incrementRevision(entityIterator.next());
}
}
}
use of org.activiti.engine.impl.persistence.entity.Entity in project Activiti by Activiti.
the class DbSqlSession method orderExecutionEntities.
protected Collection<Entity> orderExecutionEntities(Map<String, Entity> executionEntities, boolean parentBeforeChildExecution) {
// For insertion: parent executions should go before child executions
List<Entity> result = new ArrayList<Entity>(executionEntities.size());
// Gather parent-child relationships
Map<String, String> childToParentExecutionMapping = new HashMap<String, String>();
Map<String, List<ExecutionEntity>> parentToChildrenMapping = new HashMap<String, List<ExecutionEntity>>();
Collection<Entity> executionCollection = executionEntities.values();
Iterator<Entity> executionIterator = executionCollection.iterator();
while (executionIterator.hasNext()) {
ExecutionEntity currentExecutionEntity = (ExecutionEntity) executionIterator.next();
String parentId = currentExecutionEntity.getParentId();
String superExecutionId = currentExecutionEntity.getSuperExecutionId();
String parentKey = parentId != null ? parentId : superExecutionId;
childToParentExecutionMapping.put(currentExecutionEntity.getId(), parentKey);
if (!parentToChildrenMapping.containsKey(parentKey)) {
parentToChildrenMapping.put(parentKey, new ArrayList<ExecutionEntity>());
}
parentToChildrenMapping.get(parentKey).add(currentExecutionEntity);
}
// Loop over all entities, and insert in the correct order
Set<String> handledExecutionIds = new HashSet<String>(executionEntities.size());
executionIterator = executionCollection.iterator();
while (executionIterator.hasNext()) {
ExecutionEntity currentExecutionEntity = (ExecutionEntity) executionIterator.next();
String executionId = currentExecutionEntity.getId();
if (!handledExecutionIds.contains(executionId)) {
String parentId = childToParentExecutionMapping.get(executionId);
if (parentId != null) {
while (parentId != null) {
String newParentId = childToParentExecutionMapping.get(parentId);
if (newParentId == null) {
break;
}
parentId = newParentId;
}
}
if (parentId == null) {
parentId = executionId;
}
if (executionEntities.containsKey(parentId) && !handledExecutionIds.contains(parentId)) {
handledExecutionIds.add(parentId);
if (parentBeforeChildExecution) {
result.add(executionEntities.get(parentId));
} else {
result.add(0, executionEntities.get(parentId));
}
}
collectChildExecutionsForInsertion(result, parentToChildrenMapping, handledExecutionIds, parentId, parentBeforeChildExecution);
}
}
return result;
}
use of org.activiti.engine.impl.persistence.entity.Entity in project Activiti by Activiti.
the class DbSqlSession method cacheLoadOrStore.
/**
* Returns the object in the cache. If this object was loaded before, then the original object is returned (the cached version is more recent).
* If this is the first time this object is loaded, then the loadedObject is added to the cache.
*/
protected Entity cacheLoadOrStore(Entity entity) {
Entity cachedEntity = entityCache.findInCache(entity.getClass(), entity.getId());
if (cachedEntity != null) {
return cachedEntity;
}
entityCache.put(entity, true);
return entity;
}
Aggregations