public void endTransaction() throws Exception { if (getIdentitySession().getTransaction().isActive()) { getIdentitySession().getTransaction().commit(); } }
@Override public void afterBegin() { try { // We need this as from Hibernate4 and with JTATransactionFactory, there is need to separately start IDM (Hibernate) // transaction as well even if JTA transaction is started if (!idmService.getIdentitySession().getTransaction().isActive()) { idmService.getIdentitySession().beginTransaction(); } } catch (Exception e) { throw new RuntimeException(e); } } }
public void startTransaction() throws Exception { if (!getIdentitySession().getTransaction().isActive()) { getIdentitySession().beginTransaction(); } }
public void endRequest(ExoContainer container) { if (!acceptComponentRequestCall) return; if (configuration.isUseJTA()) { if (traceLoggingEnabled) { log.trace("Finishing UserTransaction in method endRequest"); } try { jtaTransactionLifecycleService.finishJTATransaction(); } catch (Exception e) { log.error(e.getMessage(), e); } } else { try { if (idmService_.getIdentitySession().getTransaction().isActive()) { idmService_.getIdentitySession().getTransaction().commit(); } } catch (Exception e) { log.error(e.getMessage(), e); recoverFromIDMError(e); } } }
public void recoverFromIDMError(Exception e) { log.error(e); try { // We need to restart Hibernate transaction if it's available. First rollback old one and then start new one Transaction idmTransaction = getIdentitySession().getTransaction(); if (idmTransaction.isActive()) { idmTransaction.rollback(); log.info("IDM error recovery finished. Old transaction has been rolled-back"); } } catch (Exception e1) { log.warn("Error during recovery of old error", e1); } }
public void recoverFromIDMError(Exception e) { try { // We need to restart Hibernate transaction if it's available. First rollback old one and then start new one Transaction idmTransaction = idmService_.getIdentitySession().getTransaction(); if (idmTransaction.isActive()) { idmTransaction.rollback(); idmTransaction.start(); log.info("IDM error recovery finished. Old transaction has been rolled-back and new transaction has been started"); } } catch (Exception e1) { log.warn("Error during recovery of old error", e1); } }
/** * Used to allow nested requests (as done by the authenticator during unit tests) and avoid to commit two times the same * transaction. */ /* * * private ThreadLocal<AtomicInteger> currentRequestCount = new ThreadLocal<AtomicInteger>() { * * @Override protected AtomicInteger initialValue() { return new AtomicInteger(); } }; */ public void startRequest(ExoContainer container) { if (!acceptComponentRequestCall) return; try { if (configuration.isUseJTA()) { if (traceLoggingEnabled) { log.trace("Starting UserTransaction in method startRequest"); } jtaTransactionLifecycleService.beginJTATransaction(); } else { if (!idmService_.getIdentitySession().getTransaction().isActive()) { idmService_.getIdentitySession().beginTransaction(); } } } catch (Exception e) { log.error(e.getMessage(), e); } }
public void flush() { if (configuration.isUseJTA()) { if (traceLoggingEnabled) { log.trace("Flushing UserTransaction in method flush"); } // Complete restart of JTA transaction don't have good performance. So we will only sync identitySession (same // as for non-jta environment) // finishJTATransaction(); // beginJTATransaction(); try { if (jtaTransactionLifecycleService.getUserTransaction().getStatus() == Status.STATUS_ACTIVE) { idmService_.getIdentitySession().save(); } } catch (Exception e) { log.error(e.getMessage(), e); } } else { try { if (idmService_.getIdentitySession().getTransaction().isActive()) { idmService_.getIdentitySession().save(); } } catch (Exception e) { log.error(e.getMessage(), e); recoverFromIDMError(e); } } }