Search in sources :

Example 1 with Entity

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;
}
Also used : CachedEntity(org.activiti.engine.impl.persistence.cache.CachedEntity) ExecutionEntity(org.activiti.engine.impl.persistence.entity.ExecutionEntity) Entity(org.activiti.engine.impl.persistence.entity.Entity) PropertyEntity(org.activiti.engine.impl.persistence.entity.PropertyEntity) ArrayList(java.util.ArrayList)

Example 2 with Entity

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();
}
Also used : CachedEntity(org.activiti.engine.impl.persistence.cache.CachedEntity) ExecutionEntity(org.activiti.engine.impl.persistence.entity.ExecutionEntity) Entity(org.activiti.engine.impl.persistence.entity.Entity) PropertyEntity(org.activiti.engine.impl.persistence.entity.PropertyEntity) ActivitiException(org.activiti.engine.ActivitiException) ActivitiOptimisticLockingException(org.activiti.engine.ActivitiOptimisticLockingException)

Example 3 with Entity

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());
        }
    }
}
Also used : CachedEntity(org.activiti.engine.impl.persistence.cache.CachedEntity) ExecutionEntity(org.activiti.engine.impl.persistence.entity.ExecutionEntity) Entity(org.activiti.engine.impl.persistence.entity.Entity) PropertyEntity(org.activiti.engine.impl.persistence.entity.PropertyEntity) ActivitiException(org.activiti.engine.ActivitiException) ArrayList(java.util.ArrayList)

Example 4 with Entity

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;
}
Also used : CachedEntity(org.activiti.engine.impl.persistence.cache.CachedEntity) ExecutionEntity(org.activiti.engine.impl.persistence.entity.ExecutionEntity) Entity(org.activiti.engine.impl.persistence.entity.Entity) PropertyEntity(org.activiti.engine.impl.persistence.entity.PropertyEntity) HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap) ArrayList(java.util.ArrayList) ExecutionEntity(org.activiti.engine.impl.persistence.entity.ExecutionEntity) Arrays.asList(java.util.Arrays.asList) Collections.emptyList(java.util.Collections.emptyList) List(java.util.List) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet)

Example 5 with Entity

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;
}
Also used : CachedEntity(org.activiti.engine.impl.persistence.cache.CachedEntity) ExecutionEntity(org.activiti.engine.impl.persistence.entity.ExecutionEntity) Entity(org.activiti.engine.impl.persistence.entity.Entity) PropertyEntity(org.activiti.engine.impl.persistence.entity.PropertyEntity)

Aggregations

CachedEntity (org.activiti.engine.impl.persistence.cache.CachedEntity)10 Entity (org.activiti.engine.impl.persistence.entity.Entity)10 ExecutionEntity (org.activiti.engine.impl.persistence.entity.ExecutionEntity)10 PropertyEntity (org.activiti.engine.impl.persistence.entity.PropertyEntity)10 ArrayList (java.util.ArrayList)3 ActivitiException (org.activiti.engine.ActivitiException)3 HashMap (java.util.HashMap)2 HashSet (java.util.HashSet)2 LinkedHashMap (java.util.LinkedHashMap)2 ActivitiOptimisticLockingException (org.activiti.engine.ActivitiOptimisticLockingException)2 Arrays.asList (java.util.Arrays.asList)1 Collections.emptyList (java.util.Collections.emptyList)1 List (java.util.List)1 Map (java.util.Map)1