@Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { try { filterChain.doFilter(servletRequest, servletResponse); } finally { TopiaPersistenceContext transaction = (TopiaPersistenceContext) servletRequest.getAttribute( OpenTopiaTransactionInterceptor.TOPIA_TRANSACTION_REQUEST_ATTRIBUTE); if (transaction == null) { if (log.isTraceEnabled()) { log.trace("no transaction to close"); } } else if (transaction.isClosed()) { if (log.isTraceEnabled()) { log.trace("transaction " + transaction + " is already closed"); } } else { if (log.isDebugEnabled()) { log.debug("close transaction " + transaction); } transaction.close(); } } }
/** * Hook method to close the topia transaction of the request at the end of * the request when all filter has been consumed. * * @param transaction the transaction to close (can be null if transaction * was not required while the current request) * @since 1.9.1 */ protected void onCloseTransaction(PersistenceContext transaction) { if (transaction == null) { if (log.isTraceEnabled()) { log.trace("no transaction to close"); } } else if (transaction.isClosed()) { if (log.isTraceEnabled()) { log.trace("transaction " + transaction + " is already closed"); } } else { if (log.isDebugEnabled()) { log.debug("closing transaction " + transaction); } // The close will trigger a rollback if necessary transaction.close(); } }
persistenceContext.close();
public void init(TopiaApplicationContext ctxt, boolean doCreate, boolean doUpdate) throws TopiaException { if (sequences.isEmpty()) { // no sequence registed return; } String firstSequenceKey = sequences.keySet().iterator().next(); TopiaPersistenceContext newContext = ctxt.newPersistenceContext(); TopiaSqlSupport sqlSupport = ((AbstractTopiaPersistenceContext)newContext).getSqlSupport(); boolean exists = existSequence(firstSequenceKey, sqlSupport); if (!exists) { if (!doCreate) { // not exists and do not create return; } createSequences(sqlSupport); } else { if (doUpdate) { updateSequences(sqlSupport); } } newContext.commit(); newContext.close(); }