@Override public void end(Context context) { log.trace("Commit transaction thereby unlock active tasks"); ((ContextImpl) context).transaction.commit(); ((ContextImpl) context).transaction.end(); }
@Override public Context begin() { Transaction tx = persistence.createTransaction(); try { List<ScheduledTask> tasks = getTasks(); return new ContextImpl(tasks, tx); } catch (Exception e) { tx.end(); throw new RuntimeException(e); } }
protected void transactional(Closure closure) { Persistence persistence = AppBeans.get(Persistence.class); Transaction tx = persistence.getTransaction(); try { closure.call(persistence.getEntityManager()); tx.commit(); } finally { tx.end(); } } }
protected void internalLoadStatisticsCache() { log.info("Loading statistics cache"); Transaction tx = persistence.createTransaction(); try { EntityManager em = persistence.getEntityManager(); TypedQuery<EntityStatistics> q = em.createQuery("select s from sys$EntityStatistics s", EntityStatistics.class); List<EntityStatistics> list = q.getResultList(); for (EntityStatistics es : list) { statisticsCache.put(es.getName(), es); } tx.commit(); } finally { tx.end(); } }
@Override public List<String> getAvailableUsers() { List<String> result = new ArrayList<>(); Transaction tx = persistence.createTransaction(); try { EntityManager em = persistence.getEntityManager(); Query query = em.createQuery("select u from sec$User u"); List<User> userList = query.getResultList(); for (User user : userList) { result.add(user.getLogin()); } tx.commit(); } finally { tx.end(); } return result; }
@Override public void setCurrentValue(Sequence sequence, long value) { Preconditions.checkNotNull(sequence, "Sequence can't be null"); checkSequenceName(sequence.getName()); String sqlScript = getSequenceSupport(sequence).modifySequenceSql(sequence.getName(), value); lock.readLock().lock(); try { Transaction tx = persistence.getTransaction(getDataStore(sequence)); try { checkSequenceExists(sequence); executeScript(sequence, sqlScript); tx.commit(); } finally { tx.end(); } } finally { lock.readLock().unlock(); } }
@Override public void resetRememberMeTokens() { Transaction tx = persistence.createTransaction(); try { EntityManager em = persistence.getEntityManager(); Query query = em.createQuery("delete from sec$RememberMeToken rt"); query.executeUpdate(); tx.commit(); } finally { tx.end(); } }
@Authenticated @Override public String jpqlExecuteUpdate(String queryString, boolean softDeletion) { try { Transaction tx = persistence.createTransaction(); try { EntityManager em = persistence.getEntityManager(); em.setSoftDeletion(softDeletion); Query query = em.createQuery(queryString); int count = query.executeUpdate(); tx.commit(); return "Done: " + count + " entities affected, softDeletion=" + softDeletion; } finally { tx.end(); } } catch (Throwable e) { log.error("jpqlExecuteUpdate error", e); return ExceptionUtils.getStackTrace(e); } }
@Override public EntitySnapshot createSnapshot(Entity entity, View view, Date snapshotDate, User author) { EntitySnapshot snapshot = createEntitySnapshot(entity, view, snapshotDate, author); Transaction tx = persistence.createTransaction(); try { EntityManager em = persistence.getEntityManager(); em.persist(snapshot); tx.commit(); } finally { tx.end(); } return snapshot; }
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 boolean checkPassword(UUID userId, String passwordHash) { checkNotNullArgument(userId, "Null userId"); checkNotNullArgument(passwordHash, "Null new password hash"); User user; Transaction tx = persistence.getTransaction(); try { EntityManager em = persistence.getEntityManager(); user = em.find(User.class, userId, CHECK_PASSWORD_VIEW); if (user == null) throw new RuntimeException("Unable to find user with id: " + userId); tx.commit(); } finally { tx.end(); } return passwordEncryption.checkPassword(user, passwordHash); }
@Override public void resetRememberMeTokens(List<UUID> userIds) { Transaction tx = persistence.getTransaction(); try { EntityManager em = persistence.getEntityManager(); Query query = em.createQuery("delete from sec$RememberMeToken rt where rt.user.id in :userIds"); query.setParameter("userIds", userIds); query.executeUpdate(); tx.commit(); } finally { tx.end(); } }
@Override public void setActive(ScheduledTask task, boolean active) { Transaction tx = persistence.createTransaction(); try { EntityManager em = persistence.getEntityManager(); ScheduledTask t = em.find(ScheduledTask.class, task.getId()); t.setActive(active); tx.commit(); } finally { tx.end(); } }
@Override public SecurityState computeSecurityState(Entity entity) { Preconditions.checkNotNullArgument(entity, "entity is null"); SecurityState state; String storeName = metadataTools.getStoreName(metadata.getClassNN(entity.getClass())); Transaction tx = persistence.createTransaction(storeName); try { EntityManager em = persistence.getEntityManager(storeName); Entity managedEntity = em.merge(entity); support.setupAttributeAccess(managedEntity); state = BaseEntityInternalAccess.getSecurityState(managedEntity); // do not commit the transaction } finally { tx.end(); } return state; } }
@Override public void clearScheduledTasks() { Transaction tx = persistence.createTransaction(); try { EntityManager em = persistence.getEntityManager(); Query query = em.createNativeQuery("delete from SYS_SCHEDULED_EXECUTION"); query.executeUpdate(); query = em.createNativeQuery("delete from SYS_SCHEDULED_TASK"); query.executeUpdate(); tx.commit(); } finally { tx.end(); } }
@Override public void deleteStatistics(String name) { Transaction tx = persistence.createTransaction(); try { EntityManager em = persistence.getEntityManager(); Query q = em.createQuery("delete from sys$EntityStatistics s where s.name = ?1"); q.setParameter(1, getOriginalOrThisEntityName(name)); q.executeUpdate(); tx.commit(); } finally { tx.end(); } flushStatisticsCache(); }
@Override public String generateRememberMeToken(UUID userId) { String token = RandomStringUtils.randomAlphanumeric(RememberMeToken.TOKEN_LENGTH); Transaction tx = persistence.createTransaction(); try { EntityManager em = persistence.getEntityManager(); RememberMeToken rememberMeToken = metadata.create(RememberMeToken.class); rememberMeToken.setToken(token); rememberMeToken.setUser(em.getReference(User.class, userId)); em.persist(rememberMeToken); tx.commit(); } finally { tx.end(); } return token; }
@Override public void saveOwnTimeZone(UserTimeZone timeZone) { log.debug("Saving user's time zone settings: " + timeZone); Transaction tx = persistence.createTransaction(); try { EntityManager em = persistence.getEntityManager(); User user = em.find(User.class, userSessionSource.getUserSession().getUser().getId(), "user.timeZone"); if (user == null) throw new EntityAccessException(User.class, userSessionSource.getUserSession().getUser().getId()); user.setTimeZone(timeZone.name); user.setTimeZoneAuto(timeZone.auto); tx.commit(); } finally { tx.end(); } }
@Override public UserTimeZone loadOwnTimeZone() { Transaction tx = persistence.createTransaction(); try { EntityManager em = persistence.getEntityManager(); User user = em.find(User.class, userSessionSource.getUserSession().getUser().getId(), "user.timeZone"); if (user == null) throw new EntityAccessException(User.class, userSessionSource.getUserSession().getUser().getId()); tx.commit(); return new UserTimeZone(user.getTimeZone(), Boolean.TRUE.equals(user.getTimeZoneAuto())); } finally { tx.end(); } }