1 22 package org.jboss.test.dtm.test; 23 24 import org.jboss.test.JBossTestCase; 25 import org.jboss.test.dtm.interfaces.PassThrough; 26 import org.jboss.test.dtm.interfaces.PassThroughHome; 27 import javax.naming.Context ; 28 import javax.rmi.PortableRemoteObject ; 29 import javax.transaction.RollbackException ; 30 import javax.transaction.TransactionRolledbackException ; 31 import javax.transaction.UserTransaction ; 32 33 import junit.framework.Test; 34 35 public class T05DTMInterpositionUnitTestCase 36 extends JBossTestCase 37 { 38 public T05DTMInterpositionUnitTestCase(String name) 39 throws java.io.IOException 40 { 41 super(name); 42 } 43 44 46 public void testCommittedTx() 47 throws Exception 48 { 49 getLog().debug("+++ testCommittedTx"); 50 51 Context ctx = getInitialContext(); 52 53 getLog().debug("Obtain UserTransaction instance"); 54 UserTransaction userTx = (UserTransaction ) ctx.lookup("UserTransaction"); 55 56 getLog().debug("Obtain home interface"); 57 Object objref = ctx.lookup("dtmtest/PassThrough2DtmEJB"); 58 PassThroughHome home = 59 (PassThroughHome) PortableRemoteObject.narrow(objref, PassThroughHome.class); 60 61 getLog().debug("Create PassThrough bean"); 62 PassThrough session = home.create("testCommittedTx"); 63 64 getLog().debug("Set balances"); 65 userTx.begin(); 66 session.setBalances(101, 102); 67 userTx.commit(); 68 69 int balances[]; 70 71 getLog().debug("Get balances"); 72 userTx.begin(); 73 balances = session.getBalances(); 74 userTx.commit(); 75 76 assertTrue("first balance == 101", balances[0] == 101); 77 assertTrue("second balance == 102", balances[1] == 102); 78 79 getLog().debug("Update balances"); 80 userTx.begin(); 81 session.addToBalances(100); 82 userTx.commit(); 83 84 getLog().debug("Check updated balances"); 85 userTx.begin(); 86 balances = session.getBalances(); 87 userTx.commit(); 88 89 assertTrue("first balance == 201", balances[0] == 201); 90 assertTrue("second balance == 202", balances[1] == 202); 91 92 getLog().debug("Remove PassThrough bean"); 93 session.remove(); 94 } 95 96 public void testRolledbackTx() 97 throws Exception 98 { 99 getLog().debug("+++ testRolledbackTx"); 100 101 Context ctx = getInitialContext(); 102 103 getLog().debug("Obtain UserTransaction instance"); 104 UserTransaction userTx = (UserTransaction ) ctx.lookup("UserTransaction"); 105 106 getLog().debug("Obtain home interface"); 107 Object objref = ctx.lookup("dtmtest/PassThrough2DtmEJB"); 108 PassThroughHome home = 109 (PassThroughHome) PortableRemoteObject.narrow(objref, PassThroughHome.class); 110 111 getLog().debug("Create PassThrough bean"); 112 PassThrough session = home.create("testRolledbackTx"); 113 114 getLog().debug("Set balances"); 115 userTx.begin(); 116 session.setBalances(101, 102); 117 userTx.commit(); 118 119 int balances[]; 120 121 getLog().debug("Get balances"); 122 userTx.begin(); 123 balances = session.getBalances(); 124 userTx.commit(); 125 126 assertTrue("first balance == 101", balances[0] == 101); 127 assertTrue("second balance == 102", balances[1] == 102); 128 129 getLog().debug("Update balances and rollback"); 130 userTx.begin(); 131 session.addToBalances(100); 132 userTx.rollback(); 133 134 getLog().debug("Check that all balances remain the same"); 135 userTx.begin(); 136 balances = session.getBalances(); 137 userTx.commit(); 138 139 assertTrue("first balance == 101", balances[0] == 101); 140 assertTrue("second balance == 102", balances[1] == 102); 141 142 session.remove(); 143 } 144 145 public void testSetRollbackOnly() 146 throws Exception 147 { 148 getLog().debug("+++ testSetRollbackOnly"); 149 150 Context ctx = getInitialContext(); 151 152 getLog().debug("Obtain UserTransaction instance"); 153 UserTransaction userTx = (UserTransaction ) ctx.lookup("UserTransaction"); 154 155 getLog().debug("Obtain home interface"); 156 Object objref = ctx.lookup("dtmtest/PassThrough2DtmEJB"); 157 PassThroughHome home = 158 (PassThroughHome) PortableRemoteObject.narrow(objref, PassThroughHome.class); 159 160 getLog().debug("Create PassThrough bean"); 161 PassThrough session = home.create("testSetRollbackOnly"); 162 163 getLog().debug("Set balances"); 164 userTx.begin(); 165 session.setBalances(101, 102); 166 userTx.commit(); 167 168 int balances[]; 169 170 getLog().debug("Get balances"); 171 userTx.begin(); 172 balances = session.getBalances(); 173 userTx.commit(); 174 175 assertTrue("first balance == 101", balances[0] == 101); 176 assertTrue("second balance == 102", balances[1] == 102); 177 178 getLog().debug("Update balances, set rollback only at the front end, " + 179 "and try to commit"); 180 try 181 { 182 userTx.begin(); 183 session.addToBalances(100); 184 session.setRollbackOnly(); 185 session.addToBalances(50); 186 userTx.commit(); 187 fail("RollbackException should have been thrown"); 188 } 189 catch (RollbackException e) 190 { 191 getLog().debug("Expected exception: " + e); 192 } 193 194 getLog().debug("Check that all balances remain the same"); 195 userTx.begin(); 196 balances = session.getBalances(); 197 userTx.commit(); 198 199 assertTrue("first balance == 101", balances[0] == 101); 200 assertTrue("second balance == 102", balances[1] == 102); 201 202 session.remove(); 203 } 204 205 public void testSetRollbackOnlyAtTheFirstAccount() 206 throws Exception 207 { 208 getLog().debug("+++ testSetRollbackOnlyAtTheFirstAccount"); 209 210 Context ctx = getInitialContext(); 211 212 getLog().debug("Obtain UserTransaction instance"); 213 UserTransaction userTx = (UserTransaction ) ctx.lookup("UserTransaction"); 214 215 getLog().debug("Obtain home interface"); 216 Object objref = ctx.lookup("dtmtest/PassThrough2DtmEJB"); 217 PassThroughHome home = 218 (PassThroughHome) PortableRemoteObject.narrow(objref, PassThroughHome.class); 219 220 getLog().debug("Create PassThrough bean"); 221 PassThrough session = home.create("testSetRollbackOnlyAtTheFirstAccount"); 222 223 getLog().debug("Set balances"); 224 userTx.begin(); 225 session.setBalances(101, 102); 226 userTx.commit(); 227 228 int balances[]; 229 230 getLog().debug("Get balances"); 231 userTx.begin(); 232 balances = session.getBalances(); 233 userTx.commit(); 234 235 assertTrue("first balance == 101", balances[0] == 101); 236 assertTrue("second balance == 102", balances[1] == 102); 237 238 getLog().debug("Update balances, set rollback only at " + 239 "the first account, and try to commit"); 240 try 241 { 242 userTx.begin(); 243 session.addToBalances(100); 244 session.tellFirstAccountToSetRollbackOnly(); 245 session.addToBalances(50); 246 userTx.commit(); 247 fail("RollbackException should have been thrown"); 248 } 249 catch (RollbackException e) 250 { 251 getLog().debug("Expected exception: " + e); 252 } 253 254 getLog().debug("Check that all balances remain the same"); 255 userTx.begin(); 256 balances = session.getBalances(); 257 userTx.commit(); 258 259 assertTrue("first balance == 101", balances[0] == 101); 260 assertTrue("second balance == 102", balances[1] == 102); 261 262 session.remove(); 263 } 264 265 public void testSetRollbackOnlyAtTheSecondAccount() 266 throws Exception 267 { 268 getLog().debug("+++ testSetRollbackOnlyAtTheSecondAccount"); 269 270 Context ctx = getInitialContext(); 271 272 getLog().debug("Obtain UserTransaction instance"); 273 UserTransaction userTx = (UserTransaction ) ctx.lookup("UserTransaction"); 274 275 getLog().debug("Obtain home interface"); 276 Object objref = ctx.lookup("dtmtest/PassThrough2DtmEJB"); 277 PassThroughHome home = 278 (PassThroughHome) PortableRemoteObject.narrow(objref, PassThroughHome.class); 279 280 getLog().debug("Create PassThrough bean"); 281 PassThrough session = home.create("testSetRollbackOnlyAtTheSecondAccount"); 282 283 getLog().debug("Set balances"); 284 userTx.begin(); 285 session.setBalances(101, 102); 286 userTx.commit(); 287 288 int balances[]; 289 290 getLog().debug("Get balances"); 291 userTx.begin(); 292 balances = session.getBalances(); 293 userTx.commit(); 294 295 assertTrue("first balance == 101", balances[0] == 101); 296 assertTrue("second balance == 102", balances[1] == 102); 297 298 getLog().debug("Update balances, set rollback only at " + 299 "the first account, and try to commit"); 300 try 301 { 302 userTx.begin(); 303 session.addToBalances(100); 304 session.tellSecondAccountToSetRollbackOnly(); 305 session.addToBalances(50); 306 userTx.commit(); 307 fail("RollbackException should have been thrown"); 308 } 309 catch (RollbackException e) 310 { 311 getLog().debug("Expected exception: " + e); 312 } 313 314 getLog().debug("Check that all balances remain the same"); 315 userTx.begin(); 316 balances = session.getBalances(); 317 userTx.commit(); 318 319 assertTrue("first balance == 101", balances[0] == 101); 320 assertTrue("second balance == 102", balances[1] == 102); 321 322 session.remove(); 323 } 324 325 public static Test suite() throws Exception 326 { 327 java.net.URL url 328 = ClassLoader.getSystemResource("host0.jndi.properties"); 329 java.util.Properties host0JndiProps = new java.util.Properties (); 330 host0JndiProps.load(url.openStream()); 331 332 java.util.Properties systemProps = System.getProperties(); 333 systemProps.putAll(host0JndiProps); 334 System.setProperties(systemProps); 335 336 return getDeploySetup(T05DTMInterpositionUnitTestCase.class, 337 "dtmpassthrough2dtm.jar"); 338 } 339 340 } 341 | Popular Tags |