public void internalDeleteForInactiveSessions() { log.debug("Delete query results for inactive user sessions"); List<Object[]> rows; try (Transaction tx = persistence.createTransaction()) { TypedQuery<Object[]> query = persistence.getEntityManager().createQuery( "select e.id, e.sessionId from sys$QueryResult e", Object[].class); query.setMaxResults(INACTIVE_DELETION_MAX); rows = query.getResultList(); } if (rows.size() == INACTIVE_DELETION_MAX) { log.debug("Processing " + INACTIVE_DELETION_MAX + " records, run again for the rest"); } Set<UUID> sessionIds = userSessions.getUserSessionsStream().map(UserSession::getId).collect(Collectors.toSet()); List<Long> ids = new ArrayList<>(); int i = 0; for (Object[] row : rows) { if (!sessionIds.contains((UUID) row[1])) { ids.add((Long) row[0]); } i++; if (i % DELETE_BATCH_SIZE == 0) { if (!ids.isEmpty()) delete(ids); ids.clear(); } } if (!ids.isEmpty()) delete(ids); }
protected List<FtsQueue> loadQueuedItems() { boolean useServerId = !ftsConfig.getIndexingHosts().isEmpty(); int maxSize = ftsConfig.getIndexingBatchSize(); return persistence.callInTransaction(em -> { String queryString = format("select q from sys$FtsQueue q where q.fake = false and %s order by q.createTs", (useServerId ? "q.indexingHost = ?1" : "q.indexingHost is null")); TypedQuery<FtsQueue> query = em.createQuery(queryString, FtsQueue.class); if (useServerId) query.setParameter(1, serverId); query.setMaxResults(maxSize); return query.getResultList(); }); }
protected int migrateMessagesBatch() { List<SendingMessage> resultList; Transaction tx = persistence.createTransaction(); try { EntityManager em = persistence.getEntityManager(); String qstr = "select m from sys$SendingMessage m where m.contentText is not null"; TypedQuery<SendingMessage> query = em.createQuery(qstr, SendingMessage.class); query.setMaxResults(50); query.setViewName(View.MINIMAL); resultList = query.getResultList(); tx.commit(); } finally { tx.end(); } if (!resultList.isEmpty()) { emailer.migrateEmailsToFileStorage(resultList); } return resultList.size(); }
protected int migrateAttachmentsBatch() { List<SendingAttachment> resultList; Transaction tx = persistence.createTransaction(); try { EntityManager em = persistence.getEntityManager(); String qstr = "select a from sys$SendingAttachment a where a.content is not null"; TypedQuery<SendingAttachment> query = em.createQuery(qstr, SendingAttachment.class); query.setMaxResults(50); query.setViewName(View.MINIMAL); resultList = query.getResultList(); tx.commit(); } finally { tx.end(); } if (!resultList.isEmpty()) { emailer.migrateAttachmentsToFileStorage(resultList); } return resultList.size(); } }
@Override public EntitySnapshot getLastEntitySnapshot(MetaClass metaClass, Object referenceId) { if (referenceId instanceof Entity) { throw new IllegalArgumentException(format("Reference id can not be an entity: %s", referenceId.getClass())); } MetaClass originalMetaClass = extendedEntities.getOriginalOrThisMetaClass(metaClass); View view = metadata.getViewRepository().getView(EntitySnapshot.class, "entitySnapshot.browse"); Transaction tx = persistence.createTransaction(); try { EntityManager em = persistence.getEntityManager(); TypedQuery<EntitySnapshot> query = em.createQuery( format("select e from sys$EntitySnapshot e where e.entityMetaClass = :metaClass and" + " e.entity.%s = :entityId order by e.snapshotDate desc", referenceToEntitySupport.getReferenceIdPropertyName(originalMetaClass)), EntitySnapshot.class) .setParameter("metaClass", originalMetaClass.getName()) .setParameter("entityId", referenceId) .setMaxResults(1) .setView(view); return query.getFirstResult(); } finally { tx.close(); } }
query.setView(view); query.setMaxResults(config.getMessageQueueCapacity());