1 23 24 package com.rift.coad.lib.bean; 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 82 public class TransactionProxyCacheTest extends TestCase { 83 84 87 public static class ProxyCacheTestClass implements java.rmi.Remote , 88 CacheEntry { 89 private String id = null; 91 private Date lastTouchTime = new Date (); 92 public static int count = 0; 93 94 97 public ProxyCacheTestClass() throws Exception { 98 id = RandomGuid.getInstance().getGuid(); 99 } 100 101 102 109 public boolean isExpired(Date expiryDate) { 110 System.out.println("Current time : " + lastTouchTime.getTime()); 111 System.out.println("Expiry time : " + expiryDate.getTime()); 112 return (lastTouchTime.getTime() < expiryDate.getTime()); 113 } 114 115 118 public void cacheRelease() { 119 count++; 120 } 121 122 125 public void touch() { 126 lastTouchTime = new Date (); 127 } 128 129 } 130 131 private UserTransaction ut = null; 133 private boolean addedEntry = false; 134 private boolean caughtException = false; 135 private boolean gotCacheEntry= false; 136 137 138 public TransactionProxyCacheTest(String testName) { 139 super(testName); 140 } 141 142 protected void setUp() throws Exception { 143 } 144 145 protected void tearDown() throws Exception { 146 } 147 148 public static Test suite() { 149 TestSuite suite = new TestSuite(TransactionProxyCacheTest.class); 150 151 return suite; 152 } 153 154 157 public void testProxyCache() throws Exception { 158 System.out.println("ProxyCache"); 159 160 ThreadsPermissionContainer permissions = new ThreadsPermissionContainer(); 162 SessionManager.init(permissions); 163 UserStoreManager userStoreManager = new UserStoreManager(); 164 UserSessionManager sessionManager = new UserSessionManager(permissions, 165 userStoreManager); 166 LoginManager.init(sessionManager,userStoreManager); 167 CoadunationThreadGroup threadGroup = new CoadunationThreadGroup(sessionManager, 169 userStoreManager); 170 171 RoleManager.getInstance(); 173 174 InterceptorFactory.init(permissions,sessionManager,userStoreManager); 175 176 Set set = new HashSet (); 178 set.add("test"); 179 UserSession user = new UserSession("test1", set); 180 permissions.putSession(new Long (Thread.currentThread().getId()), 181 new ThreadPermissionSession( 182 new Long (Thread.currentThread().getId()),user)); 183 184 NamingDirector.init(threadGroup); 186 187 TransactionDirector transactionDirector = TransactionDirector.init(); 189 190 DBSourceManager.init(); 192 Context context = new InitialContext (); 193 ObjectLockFactory.init(); 194 TransactionManager.init(); 195 196 ut = (UserTransaction )context.lookup("java:comp/UserTransaction"); 197 198 TransactionProxyCache instance = new TransactionProxyCache(); 199 200 201 ProxyCacheTestClass cacheObject1 = new ProxyCacheTestClass(); 202 ProxyCacheTestClass cacheObject2 = new ProxyCacheTestClass(); 203 ProxyCacheTestClass cacheObject3 = new ProxyCacheTestClass(); 204 ProxyCacheTestClass cacheObject4 = new ProxyCacheTestClass(); 205 206 ut.begin(); 207 instance.addCacheEntry(500,cacheObject3,cacheObject3); 208 ut.rollback(); 209 210 if (instance.contains(cacheObject3)) { 211 fail("Cache did not roll back"); 212 } 213 214 ut.begin(); 215 instance.addCacheEntry(500,cacheObject1,cacheObject1); 216 instance.addCacheEntry(500,cacheObject2,cacheObject2); 217 ut.commit(); 218 219 ut.begin(); 220 instance.addCacheEntry(500,cacheObject4,cacheObject4); 221 ut.commit(); 222 223 System.out.println("Start time is : " + new Date ().getTime()); 224 for (int count = 0; count < 4; count++) { 225 Thread.sleep(500); 226 cacheObject1.touch(); 227 } 228 System.out.println("End time is : " + new Date ().getTime()); 229 230 instance.garbageCollect(); 231 232 if (!instance.contains(cacheObject1)) { 233 fail("Cache does not contain cache object1"); 234 } else if (instance.contains(cacheObject2)) { 235 fail("Cache contains cache object2"); 236 } 237 238 instance.clear(); 239 240 if (instance.contains(cacheObject1)) { 241 fail("Cache contains cache object1"); 242 } 243 244 try { 245 ut.begin(); 246 instance.addCacheEntry(500,cacheObject1,cacheObject1); 247 fail("The cache has not been invalidated"); 248 ut.commit(); 249 } catch (BeanException ex) { 250 System.out.println(ex.getMessage()); 251 } 252 253 if (ProxyCacheTestClass.count != 4) { 254 fail("Release was not called on both classes : " + 255 ProxyCacheTestClass.count); 256 } 257 258 } 259 260 } 261 | Popular Tags |