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());
}
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();
}
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);
}
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();
}
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;
}
Aggregations