1
2
3
4
5
6
7
8
9
10
11 package org.mule.transaction;
12
13 import org.mule.MuleManager;
14 import org.mule.impl.DefaultExceptionStrategy;
15 import org.mule.impl.MuleTransactionConfig;
16 import org.mule.tck.AbstractMuleTestCase;
17 import org.mule.umo.UMOTransaction;
18 import org.mule.umo.UMOTransactionConfig;
19
20 import com.mockobjects.dynamic.Mock;
21
22 import javax.transaction.Transaction;
23 import javax.transaction.TransactionManager;
24
25
26
27
28 public class TransactionTemplateTestCase extends AbstractMuleTestCase
29 {
30 protected Mock mockTm = new Mock(TransactionManager.class);
31
32 protected void doSetUp() throws Exception
33 {
34 TransactionManager tm = (TransactionManager) mockTm.proxy();
35 MuleManager.getInstance().setTransactionManager(tm);
36 }
37
38 public void testNoNestedTxStarted() throws Exception
39 {
40 Mock mockTx = new Mock(Transaction.class);
41 mockTm.expect("begin");
42 mockTm.expectAndReturn("getTransaction", mockTx.proxy());
43
44 mockTx.expectAndReturn("getStatus", UMOTransaction.STATUS_ACTIVE);
45
46
47 mockTx.expectAndReturn("getStatus", UMOTransaction.STATUS_ACTIVE);
48 mockTx.expect("commit");
49
50
51 UMOTransactionConfig config = new MuleTransactionConfig();
52 config.setFactory(new XaTransactionFactory());
53 config.setAction(UMOTransactionConfig.ACTION_ALWAYS_BEGIN);
54 TransactionTemplate template = new TransactionTemplate(config, new DefaultExceptionStrategy());
55
56
57 final UMOTransactionConfig nestedConfig = new MuleTransactionConfig();
58 nestedConfig.setFactory(new XaTransactionFactory());
59 nestedConfig.setAction(UMOTransactionConfig.ACTION_BEGIN_OR_JOIN);
60
61
62 template.execute(new TransactionCallback()
63 {
64 public Object doInTransaction() throws Exception
65 {
66
67
68 TransactionTemplate nestedTemplate =
69 new TransactionTemplate(nestedConfig, new DefaultExceptionStrategy());
70 return nestedTemplate.execute(new TransactionCallback()
71 {
72 public Object doInTransaction() throws Exception
73 {
74
75 return null;
76 }
77 });
78 }
79 });
80
81
82 mockTm.verify();
83 mockTx.verify();
84 }
85
86 }