| 1 23 24 package com.rift.coad.lib.deployment.rmi; 26 27 import javax.naming.InitialContext ; 29 import javax.naming.Context ; 30 import java.sql.PreparedStatement ; 31 import java.sql.ResultSet ; 32 import java.sql.Statement ; 33 import javax.sql.DataSource ; 34 import java.util.Set ; 35 import java.util.HashSet ; 36 import javax.transaction.UserTransaction ; 37 import java.sql.Timestamp ; 38 import java.util.ArrayList ; 39 import java.util.Date ; 40 import java.util.Enumeration ; 41 import java.util.HashSet ; 42 import java.util.Iterator ; 43 import java.util.List ; 44 import java.util.Set ; 45 import javax.transaction.xa.XAException ; 46 import javax.transaction.xa.XAResource ; 47 import javax.transaction.xa.Xid ; 48 import org.apache.log4j.Logger; 49 import org.apache.log4j.BasicConfigurator; 50 51 import junit.framework.*; 53 54 import org.objectweb.jotm.Jotm; 56 57 import com.rift.coad.lib.naming.NamingDirector; 59 import com.rift.coad.lib.naming.ContextManager; 60 import com.rift.coad.lib.db.DBSourceManager; 61 import com.rift.coad.lib.common.RandomGuid; 62 import com.rift.coad.lib.common.ObjectSerializer; 63 import com.rift.coad.lib.cache.CacheEntry; 64 import com.rift.coad.lib.interceptor.InterceptorFactory; 65 import com.rift.coad.lib.security.RoleManager; 66 import com.rift.coad.lib.security.ThreadsPermissionContainer; 67 import com.rift.coad.lib.security.ThreadPermissionSession; 68 import com.rift.coad.lib.security.UserSession; 69 import com.rift.coad.lib.security.user.UserSessionManager; 70 import com.rift.coad.lib.security.user.UserStoreManager; 71 import com.rift.coad.lib.security.SessionManager; 72 import com.rift.coad.lib.security.login.LoginManager; 73 import com.rift.coad.lib.thread.CoadunationThreadGroup; 74 import com.rift.coad.lib.transaction.TransactionDirector; 75 import com.rift.coad.util.lock.ObjectLockFactory; 76 import com.rift.coad.util.transaction.TransactionManager; 77 78 79 83 public class TransactionRMICacheTest extends TestCase { 84 85 88 public static class RMICacheTestClass implements java.rmi.Remote , 89 CacheEntry { 90 private String id = null; 92 private Date lastTouchTime = new Date (); 93 public static int count = 0; 94 95 98 public RMICacheTestClass () throws Exception { 99 id = RandomGuid.getInstance().getGuid(); 100 } 101 102 103 110 public boolean isExpired(Date expiryDate) { 111 System.out.println("Current time : " + lastTouchTime.getTime()); 112 System.out.println("Expiry time : " + expiryDate.getTime()); 113 return (lastTouchTime.getTime() < expiryDate.getTime()); 114 } 115 116 119 public void cacheRelease() { 120 count++; 121 } 122 123 126 public void touch() { 127 lastTouchTime = new Date (); 128 } 129 130 } 131 132 133 public TransactionRMICacheTest(String testName) { 134 super(testName); 135 } 136 137 protected void setUp() throws Exception { 138 } 139 140 protected void tearDown() throws Exception { 141 } 142 143 public static Test suite() { 144 TestSuite suite = new TestSuite(TransactionRMICacheTest.class); 145 146 return suite; 147 } 148 149 private UserTransaction ut = null; 151 private boolean addedEntry = false; 152 private boolean caughtException = false; 153 private boolean gotCacheEntry= false; 154 155 156 159 public void testRMICache() throws Exception { 160 System.out.println("testRMICache"); 161 162 ThreadsPermissionContainer permissions = new ThreadsPermissionContainer(); 164 SessionManager.init(permissions); 165 UserStoreManager userStoreManager = new UserStoreManager(); 166 UserSessionManager sessionManager = new UserSessionManager(permissions, 167 userStoreManager); 168 LoginManager.init(sessionManager,userStoreManager); 169 CoadunationThreadGroup threadGroup = new CoadunationThreadGroup(sessionManager, 171 userStoreManager); 172 173 RoleManager.getInstance(); 175 176 InterceptorFactory.init(permissions,sessionManager,userStoreManager); 177 178 Set set = new HashSet (); 180 set.add("test"); 181 UserSession user = new UserSession("test1", set); 182 permissions.putSession(new Long (Thread.currentThread().getId()), 183 new ThreadPermissionSession( 184 new Long (Thread.currentThread().getId()),user)); 185 186 NamingDirector.init(threadGroup); 188 189 TransactionDirector transactionDirector = TransactionDirector.init(); 191 192 DBSourceManager.init(); 194 Context context = new InitialContext (); 195 ObjectLockFactory.init(); 196 TransactionManager.init(); 197 198 ut = (UserTransaction )context.lookup("java:comp/UserTransaction"); 199 200 TransactionRMICache instance = new TransactionRMICache(); 201 202 203 RMICacheTestClass cacheObject1 = new RMICacheTestClass(); 204 RMICacheTestClass cacheObject2 = new RMICacheTestClass(); 205 RMICacheTestClass cacheObject3 = new RMICacheTestClass(); 206 RMICacheTestClass cacheObject4 = new RMICacheTestClass(); 207 208 ut.begin(); 209 instance.addCacheEntry(500,cacheObject3); 210 ut.rollback(); 211 212 if (instance.contains(cacheObject3)) { 213 fail("Cache did not roll back"); 214 } 215 216 ut.begin(); 217 instance.addCacheEntry(500,cacheObject1); 218 instance.addCacheEntry(500,cacheObject2); 219 ut.commit(); 220 221 ut.begin(); 222 instance.addCacheEntry(500,cacheObject4); 223 ut.commit(); 224 225 if (!instance.contains(cacheObject1)) { 226 fail("Cache does not contain entry1"); 227 } 228 if (!instance.contains(cacheObject2)) { 229 fail("Cache does not contain entry2"); 230 } 231 232 System.out.println("Start time is : " + new Date ().getTime()); 233 for (int count = 0; count < 4; count++) { 234 Thread.sleep(500); 235 cacheObject1.touch(); 236 } 237 System.out.println("End time is : " + new Date ().getTime()); 238 239 instance.garbageCollect(); 240 241 if (!instance.contains(cacheObject1)) { 242 fail("Cache does not contain cache object1"); 243 } else if (instance.contains(cacheObject2)) { 244 fail("Cache contains cache object2"); 245 } 246 247 instance.clear(); 248 249 if (instance.contains(cacheObject1)) { 250 fail("Cache contains cache object1"); 251 } 252 253 try { 254 ut.begin(); 255 instance.addCacheEntry(500,cacheObject1); 256 fail("The cache has not been invalidated"); 257 ut.commit(); 258 } catch (RMIException ex) { 259 System.out.println(ex.getMessage()); 260 } 261 262 if (RMICacheTestClass.count != 4) { 263 fail("Release was not called on both classes"); 264 } 265 } 266 267 268 269 } 270 | Popular Tags |