1 21 22 package com.rift.coad.util.transaction; 23 24 import junit.framework.*; 25 import java.util.Iterator ; 26 import java.util.HashSet ; 27 import java.util.Map ; 28 import java.util.LinkedHashMap ; 29 import java.util.Set ; 30 import java.util.concurrent.ConcurrentHashMap ; 31 import javax.naming.Context ; 32 import javax.naming.InitialContext ; 33 import javax.transaction.xa.XAException ; 34 import javax.transaction.xa.XAResource ; 35 import javax.transaction.xa.Xid ; 36 import org.apache.log4j.Logger; 37 import org.apache.log4j.BasicConfigurator; 38 import javax.transaction.UserTransaction ; 39 40 import org.objectweb.jotm.Jotm; 42 43 import com.rift.coad.lib.naming.NamingDirector; 45 import com.rift.coad.lib.naming.ContextManager; 46 import com.rift.coad.lib.db.DBSourceManager; 47 48 import com.rift.coad.lib.interceptor.InterceptorFactory; 49 import com.rift.coad.lib.security.RoleManager; 50 import com.rift.coad.lib.security.ThreadsPermissionContainer; 51 import com.rift.coad.lib.security.ThreadPermissionSession; 52 import com.rift.coad.lib.security.UserSession; 53 import com.rift.coad.lib.security.user.UserSessionManager; 54 import com.rift.coad.lib.security.user.UserStoreManager; 55 import com.rift.coad.lib.security.SessionManager; 56 import com.rift.coad.lib.security.login.LoginManager; 57 import com.rift.coad.lib.thread.CoadunationThreadGroup; 58 59 import com.rift.coad.lib.configuration.Configuration; 60 import com.rift.coad.lib.configuration.ConfigurationFactory; 61 import com.rift.coad.util.lock.LockRef; 62 import com.rift.coad.util.lock.ObjectLockFactory; 63 import com.rift.coad.lib.transaction.TransactionDirector; 64 65 70 public class TransactionManagerTest extends TestCase { 71 72 public class TransactionTestResource implements XAResource { 73 74 private String name = null; 76 77 80 public TransactionTestResource(String name) { 81 this.name = name; 82 } 83 84 public void commit(Xid xid, boolean b) throws XAException { 85 System.out.println("Commit on : " + name); 86 } 87 88 public void end(Xid xid, int i) throws XAException { 89 } 90 91 public void forget(Xid xid) throws XAException { 92 } 93 94 public int getTransactionTimeout() throws XAException { 95 return -1; 96 } 97 98 public boolean isSameRM(XAResource xAResource) throws XAException { 99 return this == xAResource; 100 } 101 102 public int prepare(Xid xid) throws XAException { 103 return -1; 104 } 105 106 public Xid [] recover(int i) throws XAException { 107 return null; 108 } 109 110 public void rollback(Xid xid) throws XAException { 111 System.out.println("Rollback on : " + name); 112 } 113 114 public boolean setTransactionTimeout(int i) throws XAException { 115 return true; 116 } 117 118 public void start(Xid xid, int i) throws XAException { 119 System.out.println("Start on : " + name + " id [" + xid + "]"); 120 } 121 122 } 123 124 public TransactionManagerTest(String testName) { 125 super(testName); 126 BasicConfigurator.configure(); 127 } 128 129 protected void setUp() throws Exception { 130 } 131 132 protected void tearDown() throws Exception { 133 } 134 135 138 public void testTransactionManager() throws Exception { 139 System.out.println("TransactionManager"); 140 ThreadsPermissionContainer permissions = new ThreadsPermissionContainer(); 142 SessionManager.init(permissions); 143 UserStoreManager userStoreManager = new UserStoreManager(); 144 UserSessionManager sessionManager = new UserSessionManager(permissions, 145 userStoreManager); 146 LoginManager.init(sessionManager,userStoreManager); 147 CoadunationThreadGroup threadGroup = new CoadunationThreadGroup(sessionManager, 149 userStoreManager); 150 151 RoleManager.getInstance(); 153 154 InterceptorFactory.init(permissions,sessionManager,userStoreManager); 155 156 Set set = new HashSet (); 158 set.add("test"); 159 UserSession user = new UserSession("test1", set); 160 permissions.putSession(new Long (Thread.currentThread().getId()), 161 new ThreadPermissionSession( 162 new Long (Thread.currentThread().getId()),user)); 163 164 NamingDirector.init(threadGroup); 166 167 TransactionDirector transactionDirector = TransactionDirector.init(); 169 170 try { 171 TransactionManager.getInstance(); 172 fail("Could retrieve a tranaction manager reference before init"); 173 } catch (TransactionException ex) { 174 System.out.println(ex.getMessage()); 175 } 176 177 ObjectLockFactory.init(); 179 TransactionManager.init(); 180 181 TransactionManager expResult = TransactionManager.getInstance(); 182 TransactionManager result = TransactionManager.getInstance(); 183 assertEquals(expResult, result); 184 185 Context context = new InitialContext (); 187 UserTransaction ut = 188 (UserTransaction )context.lookup("java:comp/UserTransaction"); 189 190 ut.begin(); 191 192 TransactionTestResource testResource = new 193 TransactionTestResource("test"); 194 195 result.bindResource(testResource,true); 196 result.bindResource(testResource,true); 197 198 ut.commit(); 199 200 201 TransactionTestResource testResource2 = new 202 TransactionTestResource("test2"); 203 204 205 ut.begin(); 206 207 result.bindResource(testResource,false); 208 result.bindResource(testResource2,true); 209 210 ut.commit(); 211 212 try { 213 ut.begin(); 214 215 result.bindResource(testResource2,true); 216 result.bindResource(testResource2,false); 217 218 219 ut.commit(); 220 fail("Was able to bind transaction lock incorrectly"); 221 } catch (TransactionException ex) { 222 try { 223 ut.rollback(); 224 } catch (Exception ex2) { 225 } 227 } 228 229 230 try { 231 ut.begin(); 232 233 result.bindResource(testResource2,false); 234 result.bindResource(testResource2,true); 235 236 237 ut.commit(); 238 fail("Was able to bind transaction lock incorrectly"); 239 } catch (TransactionException ex) { 240 try { 241 ut.rollback(); 242 } catch (Exception ex2) { 243 } 245 } 246 247 TransactionManager.fin(); 248 try { 249 TransactionManager.getInstance(); 250 fail("Could retrieve a tranaction manager reference after fin"); 251 } catch (TransactionException ex) { 252 System.out.println(ex.getMessage()); 253 } 254 } 255 256 } 257 | Popular Tags |