/*
* Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com
* The software in this package is published under the terms of the CPAL v1.0
* license, a copy of which has been included with this distribution in the
* LICENSE.txt file.
*/
package org.mule.tck.testmodels.mule;
import org.mule.runtime.api.tx.TransactionException;
import org.mule.runtime.core.api.MuleContext;
import org.mule.runtime.core.transaction.AbstractSingleResourceTransaction;
import javax.transaction.Transaction;
import java.util.concurrent.atomic.AtomicBoolean;
/**
* A test transaction that does nothing on commit or rollback. The transaction does retain a status so that developers can
* determine if the the transaction was rolled back or committed.
*/
public class TestTransaction extends AbstractSingleResourceTransaction {
private AtomicBoolean committed = new AtomicBoolean(false);
private AtomicBoolean rolledBack = new AtomicBoolean(false);
private String testProperty;
private boolean isXA;
public TestTransaction(MuleContext muleContext) {
super(muleContext);
}
@Override
protected Class getResourceType() {
return null; // To change body of implemented methods use File | Settings | File Templates.
}
@Override
protected Class getKeyType() {
return null; // To change body of implemented methods use File | Settings | File Templates.
}
public TestTransaction(MuleContext mockMuleContext, boolean isXa) {
super(mockMuleContext);
this.isXA = isXa;
}
/**
* Really begin the transaction. Note that resources are enlisted yet.
*
* @throws TransactionException
*
*/
protected void doBegin() throws TransactionException {
// do nothing
}
/**
* Commit the transaction on the underlying resource
*
* @throws TransactionException
*
*/
protected void doCommit() throws TransactionException {
committed.set(true);
}
/**
* Rollback the transaction on the underlying resource
*
* @throws TransactionException
*
*/
protected void doRollback() throws TransactionException {
rolledBack.set(true);
}
public String getTestProperty() {
return testProperty;
}
public void setTestProperty(String testProperty) {
this.testProperty = testProperty;
}
@Override
public boolean isXA() {
return isXA;
}
public void setXA(boolean xa) {
isXA = xa;
}
@Override
public Transaction suspend() throws TransactionException {
if (isXA) {
return null;
}
return super.suspend();
}
@Override
public void resume() throws TransactionException {
if (isXA) {
return;
}
super.suspend();
}
}