private boolean isTxRunning() { ThreadContext.Context ctx = ThreadContext.getContext(this.metaData.getName()); if (ctx == null) { return false; } return ctx.getTransactionStatus() != null; }
@Override public void begin() { if (txLogger.isInfoEnabled()) { txLogger.info("begin"); } ThreadContext.Context ctx = ThreadContext.getContext(this.metaData.getName()); if (ctx == null) { ctx = new ThreadContext.Context(this.txMgr, this.metaData, this.cfg, this.sessionFactory); } TransactionStatus txStatus = ctx.getTransactionStatus(); if (txStatus == null) { txStatus = this.txMgr.getTransaction(null); ctx.setTransactionStatus(txStatus); } else { if (txLogger.isWarnEnabled()) { txLogger.warn("ignoring begin - tx already in progress"); if (txLogger.isDebugEnabled()) { logStackTrace(); } } } }
@Override public void commit() { if (txLogger.isInfoEnabled()) { txLogger.info("commit"); } ThreadContext.Context ctx = ThreadContext.getContext(this.metaData.getName()); if (ctx == null) { if (txLogger.isWarnEnabled()) { txLogger.warn("ignoring commit - no tx in progress"); if (txLogger.isDebugEnabled()) { logStackTrace(); } } return; } TransactionStatus txStatus = ctx.getTransactionStatus(); try { if (txStatus == null) { if (txLogger.isWarnEnabled()) { txLogger.warn("ignoring commit - no tx status"); if (txLogger.isDebugEnabled()) { logStackTrace(); } } } else { this.txMgr.commit(txStatus); } } finally { ctx.setTransactionStatus(null); ThreadContext.unsetContext(this.metaData.getName()); HashMap<String, ThreadContext.Context> contextHash = ThreadContext.getThreadLocalHash(); if (contextHash != null && contextHash.size() > 0) { if (!TransactionSynchronizationManager.isSynchronizationActive()) { TransactionSynchronizationManager.initSynchronization(); } } else { if (TransactionSynchronizationManager.isSynchronizationActive()) { TransactionSynchronizationManager.clear(); Map map = TransactionSynchronizationManager.getResourceMap(); for (Object entry : map.keySet()) { TransactionSynchronizationManager.unbindResource(entry); } } } } }
@Override public void rollback() { if (txLogger.isInfoEnabled()) { txLogger.info("rollback"); } ThreadContext.Context ctx = ThreadContext.getContext(this.metaData.getName()); if (ctx == null) { if (txLogger.isWarnEnabled()) { txLogger.warn("ignoring rollback - no tx in progress"); if (txLogger.isDebugEnabled()) { logStackTrace(); } } return; } TransactionStatus txStatus = ctx.getTransactionStatus(); try { if (txStatus == null) { if (txLogger.isWarnEnabled()) { txLogger.warn("ignoring rollback - no tx status"); if (txLogger.isDebugEnabled()) { logStackTrace(); } } } else { this.txMgr.rollback(txStatus); } } finally { ctx.setTransactionStatus(null); ThreadContext.unsetContext(this.metaData.getName()); } }