1 22 package org.jboss.test.tm.test; 23 24 import javax.management.ObjectName ; 25 import javax.transaction.RollbackException ; 26 27 import junit.framework.Test; 28 29 import org.jboss.test.JBossTestCase; 30 import org.jboss.test.JBossTestSetup; 31 import org.jboss.test.tm.resource.MTOperation; 32 33 41 public class MTTransactionManagerUnitTestCase extends JBossTestCase 42 { 43 static String [] SIG = new String [] { String .class.getName(), new MTOperation[0][0].getClass().getName() }; 44 45 ObjectName mtMBean; 46 47 public MTTransactionManagerUnitTestCase(String name) 48 { 49 super(name); 50 51 try 52 { 53 mtMBean = new ObjectName ("jboss.test:test=MTTransactionManagerUnitTestCase"); 54 } 55 catch (Exception e) 56 { 57 throw new RuntimeException (e.toString()); 58 } 59 } 60 61 public void runTest(MTOperation[][] ops) throws Exception 62 { 63 getServer().invoke(mtMBean, "testMTOperations", new Object [] { getName(), ops }, SIG); 64 } 65 66 public static Test suite() throws Exception 67 { 68 return new JBossTestSetup(getDeploySetup(MTTransactionManagerUnitTestCase.class, "mttest.sar")); 69 } 70 71 78 public void testCommitTxStartedOnADifferentThread() throws Exception 79 { 80 if (isTransactionIntegrityActive()) 81 { 82 runTest(new MTOperation[][] 83 { 84 { 85 new MTOperation(MTOperation.TM_BEGIN, 10), 87 new MTOperation(MTOperation.TM_GET_STATUS), 88 new MTOperation(MTOperation.XX_SLEEP_200), new MTOperation(MTOperation.TM_GET_STATUS) 90 } 91 , 92 { 93 new MTOperation(MTOperation.XX_WAIT_FOR, 10), 95 new MTOperation(MTOperation.TX_COMMIT, 10, new RollbackException ()), 96 new MTOperation(MTOperation.TM_GET_STATUS), 97 } 98 }); 99 } 100 else 101 { 102 runTest(new MTOperation[][] 103 { 104 { 105 new MTOperation(MTOperation.TM_BEGIN, 10), 107 new MTOperation(MTOperation.TM_GET_STATUS), 108 new MTOperation(MTOperation.XX_SLEEP_200), new MTOperation(MTOperation.TM_GET_STATUS) 110 } 111 , 112 { 113 new MTOperation(MTOperation.XX_WAIT_FOR, 10), 115 new MTOperation(MTOperation.TX_COMMIT, 10), 116 new MTOperation(MTOperation.TM_GET_STATUS), 117 } 118 }); 119 } 120 } 121 122 129 public void testResumeAndCommitTxStartedOnADifferentThread() throws Exception 130 { 131 if (isTransactionIntegrityActive()) 132 { 133 runTest(new MTOperation[][] 134 { 135 { 136 new MTOperation(MTOperation.TM_BEGIN, 10), 138 new MTOperation(MTOperation.TM_GET_STATUS), 139 } 140 , 141 { 142 new MTOperation(MTOperation.TM_GET_STATUS), 144 new MTOperation(MTOperation.XX_WAIT_FOR, 10), 145 new MTOperation(MTOperation.TM_RESUME, 10), 146 new MTOperation(MTOperation.TM_GET_STATUS), 147 new MTOperation(MTOperation.TX_COMMIT, 10, new RollbackException ()), 148 new MTOperation(MTOperation.TM_GET_STATUS), 149 } 150 }); 151 } 152 else 153 { 154 runTest(new MTOperation[][] 155 { 156 { 157 new MTOperation(MTOperation.TM_BEGIN, 10), 159 new MTOperation(MTOperation.TM_GET_STATUS), 160 } 161 , 162 { 163 new MTOperation(MTOperation.TM_GET_STATUS), 165 new MTOperation(MTOperation.XX_WAIT_FOR, 10), 166 new MTOperation(MTOperation.TM_RESUME, 10), 167 new MTOperation(MTOperation.TM_GET_STATUS), 168 new MTOperation(MTOperation.TX_COMMIT, 10), 169 new MTOperation(MTOperation.TM_GET_STATUS), 170 } 171 }); 172 } 173 } 174 175 183 public void testCommitSameTxInTwoThreads() throws Exception 184 { 185 if (!isTransactionIntegrityActive()) 186 { 187 runTest(new MTOperation[][] 188 { 189 { 190 new MTOperation(MTOperation.TM_BEGIN, 10), 192 new MTOperation(MTOperation.TM_GET_STATUS), 193 new MTOperation(MTOperation.XX_SLEEP_200), 194 new MTOperation(MTOperation.TM_GET_STATUS), 195 new MTOperation(MTOperation.TM_COMMIT, -1, new IllegalStateException ()) 196 197 } 198 , 199 { 200 new MTOperation(MTOperation.XX_WAIT_FOR, 10), 202 new MTOperation(MTOperation.TX_COMMIT, 10), 203 new MTOperation(MTOperation.TM_GET_STATUS), 204 } 205 }); 206 } 207 } 208 209 214 private boolean isTransactionIntegrityActive() 215 { 216 boolean isActive = false; 217 try 218 { 219 ObjectName target = new ObjectName ("jboss:service=TransactionManager,plugin=TransactionIntegrity"); 220 isActive = getServer().isRegistered(target); 221 } 222 catch (Exception ignore) 223 { 224 } 226 return isActive; 227 } 228 229 230 } 231 | Popular Tags |