package com.muleinaction.transaction; import java.util.concurrent.TimeUnit; import org.junit.Test; import org.mule.module.client.MuleClient; import org.mule.tck.junit4.FunctionalTestCase; import org.springframework.jdbc.core.JdbcTemplate; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; public class TransactionXaTestCase extends FunctionalTestCase { JdbcTemplate templateOperational; JdbcTemplate templateWarehouse; MuleClient muleClient; @Override protected String getConfigResources() { return "transaction/transaction-xa.xml,transaction/transaction-xa-spring.xml"; } @Override protected void doSetUp() throws Exception { super.doSetUp(); templateOperational = (JdbcTemplate) muleContext.getRegistry().get( "operationalTemplate"); templateWarehouse = (JdbcTemplate) muleContext.getRegistry().get( "warehouseTemplate"); muleClient = new MuleClient(muleContext); } protected void emptyOrCreateTables() throws Exception { try { templateOperational.execute("DELETE FROM BILLING_STATS"); } catch (Exception e) { templateOperational .execute("CREATE TABLE BILLING_STATS (id BIGINT NOT NULL, stat VARCHAR(255))"); } try { templateWarehouse.execute("DELETE FROM BILLING_STATS"); } catch (Exception e) { templateWarehouse .execute("CREATE TABLE BILLING_STATS (id BIGINT NOT NULL, stat VARCHAR(255))"); } } @Test public void testMessageConsumedTransactionally() throws Exception { emptyOrCreateTables(); muleClient.dispatch("jms://billingData", "STATUS: OK", null); TimeUnit.SECONDS.sleep(5); int operationalSize = templateOperational.queryForList( "SELECT * FROM BILLING_STATS").size(); assertThat(operationalSize, is(1)); int warehouseSize = templateWarehouse.queryForList( "SELECT * FROM BILLING_STATS").size(); assertThat(warehouseSize, is(1)); } }