Search in sources :

Example 21 with Query

use of com.haulmont.cuba.core.Query in project cuba by cuba-platform.

the class QueryCacheTestClass method testStaleData_UpdateParentEntity.

@Test
public void testStaleData_UpdateParentEntity() throws Exception {
    appender.clearMessages();
    try (Transaction tx = cont.persistence().createTransaction()) {
        EntityManager em = cont.entityManager();
        Query query = em.createQuery("select f from sys$Folder f");
        query.setCacheable(true);
        query.getResultList();
        tx.commit();
    }
    assertEquals(1, queryCache.size());
    appender.clearMessages();
    appFolder = cont.metadata().create(AppFolder.class);
    appFolder.setName("new app folder");
    try (Transaction tx = cont.persistence().createTransaction()) {
        cont.entityManager().persist(appFolder);
        tx.commit();
    }
    appender.clearMessages();
    assertEquals(0, queryCache.size());
    try (Transaction tx = cont.persistence().createTransaction()) {
        EntityManager em = cont.entityManager();
        Query query = em.createQuery("select f from sys$Folder f");
        query.setCacheable(true);
        query.getResultList();
        tx.commit();
    }
    assertEquals(1, queryCache.size());
}
Also used : AppFolder(com.haulmont.cuba.core.entity.AppFolder) EntityManager(com.haulmont.cuba.core.EntityManager) Transaction(com.haulmont.cuba.core.Transaction) Query(com.haulmont.cuba.core.Query) TypedQuery(com.haulmont.cuba.core.TypedQuery)

Example 22 with Query

use of com.haulmont.cuba.core.Query in project cuba by cuba-platform.

the class EntityLogTest method setUp.

@Before
public void setUp() throws Exception {
    cleanup();
    Transaction tx = cont.persistence().createTransaction();
    try {
        EntityManager em = cont.persistence().getEntityManager();
        Query q;
        q = em.createNativeQuery("delete from SEC_ENTITY_LOG");
        q.executeUpdate();
        LoggedEntity le = new LoggedEntity();
        le.setName("sec$User");
        le.setAuto(true);
        em.persist(le);
        LoggedAttribute la = new LoggedAttribute();
        la.setEntity(le);
        la.setName("email");
        em.persist(la);
        le = new LoggedEntity();
        le.setName("sec$Role");
        le.setAuto(true);
        em.persist(le);
        la = new LoggedAttribute();
        la.setEntity(le);
        la.setName("type");
        em.persist(la);
        tx.commit();
    } finally {
        tx.end();
    }
    entityLog = AppBeans.get(EntityLogAPI.NAME);
    entityLog.invalidateCache();
}
Also used : EntityManager(com.haulmont.cuba.core.EntityManager) Transaction(com.haulmont.cuba.core.Transaction) Query(com.haulmont.cuba.core.Query) TypedQuery(com.haulmont.cuba.core.TypedQuery) Before(org.junit.Before)

Example 23 with Query

use of com.haulmont.cuba.core.Query in project cuba by cuba-platform.

the class QueryResultsManager method savePreviousQueryResults.

@Override
public void savePreviousQueryResults(LoadContext loadContext) {
    List<LoadContext.Query> prevQueries = loadContext.getPrevQueries();
    if (prevQueries.isEmpty())
        return;
    LoadContext.Query contextQuery = prevQueries.get(prevQueries.size() - 1);
    String entityName = loadContext.getMetaClass();
    QueryParser parser = QueryTransformerFactory.createParser(contextQuery.getQueryString());
    if (!parser.isEntitySelect(entityName))
        return;
    int queryKey = loadContext.getQueryKey();
    if (resultsAlreadySaved(queryKey, contextQuery))
        return;
    List idList;
    Transaction tx = persistence.createTransaction();
    try {
        EntityManager em = persistence.getEntityManager();
        em.setSoftDeletion(loadContext.isSoftDeletion());
        QueryTransformer transformer = QueryTransformerFactory.createTransformer(contextQuery.getQueryString());
        transformer.replaceWithSelectId(metadata.getTools().getPrimaryKeyName(metadata.getClassNN(entityName)));
        transformer.removeOrderBy();
        String queryString = transformer.getResult();
        DataServiceQueryBuilder queryBuilder = AppBeans.get(DataServiceQueryBuilder.NAME);
        queryBuilder.init(queryString, contextQuery.getParameters(), contextQuery.getNoConversionParams(), null, entityName);
        if (prevQueries.size() > 1) {
            queryBuilder.restrictByPreviousResults(userSessionSource.getUserSession().getId(), loadContext.getQueryKey());
        }
        Query query = queryBuilder.getQuery(em);
        String logMsg = "Load previous query results: " + DataServiceQueryBuilder.printQuery(query.getQueryString());
        log.debug(logMsg);
        long start = System.currentTimeMillis();
        idList = query.getResultList();
        tx.commit();
        log.debug("Done in " + (System.currentTimeMillis() - start) + "ms : " + logMsg);
    } finally {
        tx.end();
    }
    delete(queryKey);
    insert(queryKey, idList);
}
Also used : Query(com.haulmont.cuba.core.Query) DataServiceQueryBuilder(com.haulmont.cuba.core.app.DataServiceQueryBuilder) EntityManager(com.haulmont.cuba.core.EntityManager) Transaction(com.haulmont.cuba.core.Transaction)

Example 24 with Query

use of com.haulmont.cuba.core.Query in project cuba by cuba-platform.

the class DbBasedCoordinator method getLastFinished.

@Override
public long getLastFinished(ScheduledTask task) {
    EntityManager em = persistence.getEntityManager();
    Query query = em.createQuery("select max(e.finishTime) from sys$ScheduledExecution e where e.task.id = ?1").setParameter(1, task.getId());
    Date date = (Date) query.getFirstResult();
    return date == null ? 0 : date.getTime();
}
Also used : EntityManager(com.haulmont.cuba.core.EntityManager) Query(com.haulmont.cuba.core.Query) Date(java.util.Date)

Example 25 with Query

use of com.haulmont.cuba.core.Query in project cuba by cuba-platform.

the class DbBasedCoordinator method isLastExecutionFinished.

@Override
public boolean isLastExecutionFinished(ScheduledTask task, long now) {
    EntityManager em = persistence.getEntityManager();
    Query query = em.createQuery("select e.finishTime from sys$ScheduledExecution e where e.task.id = ?1 and e.startTime = ?2");
    query.setParameter(1, task.getId());
    query.setParameter(2, task.getLastStartTime());
    List list = query.getResultList();
    if (list.isEmpty() || list.get(0) == null) {
        // Execution finish was not registered for some reason, so using timeout value or just return false
        boolean result = task.getTimeout() != null && (task.getLastStart() + task.getTimeout() * 1000) <= now;
        if (result)
            log.trace(task + ": considered finished because of timeout");
        else
            log.trace(task + ": not finished and not timed out");
        return result;
    }
    Date date = (Date) list.get(0);
    log.trace("{} : finished at {}", task, date.getTime());
    return true;
}
Also used : EntityManager(com.haulmont.cuba.core.EntityManager) Query(com.haulmont.cuba.core.Query) List(java.util.List) Date(java.util.Date)

Aggregations

Query (com.haulmont.cuba.core.Query)42 EntityManager (com.haulmont.cuba.core.EntityManager)27 Transaction (com.haulmont.cuba.core.Transaction)25 TypedQuery (com.haulmont.cuba.core.TypedQuery)12 Entity (com.haulmont.cuba.core.entity.Entity)7 List (java.util.List)6 MetaProperty (com.haulmont.chile.core.model.MetaProperty)5 MetaClass (com.haulmont.chile.core.model.MetaClass)3 Date (java.util.Date)3 TransactionParams (com.haulmont.cuba.core.TransactionParams)2 com.haulmont.cuba.core.global (com.haulmont.cuba.core.global)2 QueryImpl (com.haulmont.cuba.core.sys.QueryImpl)2 User (com.haulmont.cuba.security.entity.User)2 After (org.junit.After)2 Transactional (org.springframework.transaction.annotation.Transactional)2 Logger (ch.qos.logback.classic.Logger)1 LoggerContext (ch.qos.logback.classic.LoggerContext)1 StringHelper (com.haulmont.bali.util.StringHelper)1 EnumClass (com.haulmont.chile.core.datatypes.impl.EnumClass)1 PersistenceSecurity (com.haulmont.cuba.core.PersistenceSecurity)1