/* * Hibernate, Relational Persistence for Idiomatic Java * * License: GNU Lesser General Public License (LGPL), version 2.1 or later. * See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>. */ package org.hibernate.test.cache.infinispan.tm; import javax.transaction.HeuristicMixedException; import javax.transaction.HeuristicRollbackException; import javax.transaction.InvalidTransactionException; import javax.transaction.NotSupportedException; import javax.transaction.RollbackException; import javax.transaction.Status; import javax.transaction.SystemException; import javax.transaction.Transaction; import javax.transaction.TransactionManager; /** * XaResourceCapableTransactionManagerImpl. * * @author Galder ZamarreƱo * @since 3.5 */ public class XaTransactionManagerImpl implements TransactionManager { private static final XaTransactionManagerImpl INSTANCE = new XaTransactionManagerImpl(); private final ThreadLocal<XaTransactionImpl> currentTransaction = new ThreadLocal<>(); public static XaTransactionManagerImpl getInstance() { return INSTANCE; } public int getStatus() throws SystemException { XaTransactionImpl currentTransaction = this.currentTransaction.get(); return currentTransaction == null ? Status.STATUS_NO_TRANSACTION : currentTransaction.getStatus(); } public Transaction getTransaction() throws SystemException { return currentTransaction.get(); } public XaTransactionImpl getCurrentTransaction() { return currentTransaction.get(); } public void begin() throws NotSupportedException, SystemException { if (currentTransaction.get() != null) throw new IllegalStateException("Transaction already started."); currentTransaction.set(new XaTransactionImpl(this)); } public Transaction suspend() throws SystemException { Transaction suspended = currentTransaction.get(); currentTransaction.remove(); return suspended; } public void resume(Transaction transaction) throws InvalidTransactionException, IllegalStateException, SystemException { currentTransaction.set((XaTransactionImpl) transaction); } public void commit() throws RollbackException, HeuristicMixedException, HeuristicRollbackException, SecurityException, IllegalStateException, SystemException { XaTransactionImpl currentTransaction = this.currentTransaction.get(); if (currentTransaction == null) { throw new IllegalStateException("no current transaction to commit"); } currentTransaction.commit(); } public void rollback() throws IllegalStateException, SecurityException, SystemException { XaTransactionImpl currentTransaction = this.currentTransaction.get(); if (currentTransaction == null) { throw new IllegalStateException("no current transaction"); } currentTransaction.rollback(); } public void setRollbackOnly() throws IllegalStateException, SystemException { XaTransactionImpl currentTransaction = this.currentTransaction.get(); if (currentTransaction == null) { throw new IllegalStateException("no current transaction"); } currentTransaction.setRollbackOnly(); } public void setTransactionTimeout(int i) throws SystemException { } void endCurrent(Transaction transaction) { currentTransaction.remove(); } }