[jboss-cvs] JBossAS SVN: r58606 - trunk/testsuite/src/main/org/jboss/test/cluster/web
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Sat Nov 18 06:54:59 EST 2006
Author: bstansberry at jboss.com
Date: 2006-11-18 06:54:58 -0500 (Sat, 18 Nov 2006)
New Revision: 58606
Added:
trunk/testsuite/src/main/org/jboss/test/cluster/web/CacheHelperMBean.java
trunk/testsuite/src/main/org/jboss/test/cluster/web/CacheHelperServletContextListener.java
Modified:
trunk/testsuite/src/main/org/jboss/test/cluster/web/CacheHelper.java
Log:
Add server-side hook for remote accessing cache
Modified: trunk/testsuite/src/main/org/jboss/test/cluster/web/CacheHelper.java
===================================================================
--- trunk/testsuite/src/main/org/jboss/test/cluster/web/CacheHelper.java 2006-11-18 11:54:26 UTC (rev 58605)
+++ trunk/testsuite/src/main/org/jboss/test/cluster/web/CacheHelper.java 2006-11-18 11:54:58 UTC (rev 58606)
@@ -21,36 +21,61 @@
*/
package org.jboss.test.cluster.web;
-import org.jboss.cache.aop.TreeCacheAop;
-import org.jboss.cache.aop.TreeCacheAopMBean;
-import org.jboss.mx.util.MBeanProxyExt;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+import javax.management.MBeanServer;
import javax.management.ObjectName;
+import org.jboss.cache.Cache;
+import org.jboss.cache.Fqn;
+import org.jboss.cache.Node;
+import org.jboss.cache.buddyreplication.BuddyManager;
+import org.jboss.cache.pojo.PojoCache;
+import org.jboss.cache.pojo.jmx.PojoCacheJmxWrapperMBean;
+import org.jboss.mx.util.MBeanProxyExt;
+import org.jboss.mx.util.ObjectNameFactory;
+
/**
- * Helper class to locate the cache mbean used by Tomcat
+ * Helper class to locate and invoke methods on the cache mbean used by Tomcat.
*
* @author Ben Wang
* Date: Aug 16, 2005
* @version $Id$
*/
-public class CacheHelper {
- public static final String DEFAULT_CACHE_NAME =
- "jboss.cache:service=TomcatClusteringCache";
-
- public static TreeCacheAop getCacheInstance()
+public class CacheHelper implements CacheHelperMBean
+{
+ public static final ObjectName OBJECT_NAME =
+ ObjectNameFactory.create("jboss.test:service=WebTestCacheHelper");
+
+ private static final String DEFAULT_CACHE_NAME =
+ "jboss.cache:service=TomcatClusteringCache";
+ private static final String VERSION_KEY = "VERSION";
+
+ private MBeanServer server;
+ private PojoCache pojoCache;
+ private boolean leaveInstalledAfterShutdown;
+
+ public CacheHelper(MBeanServer server)
{
+ this.server = server;
+ }
+
+ public static PojoCache getCacheInstance()
+ {
try
{
ObjectName cacheServiceName_ = new ObjectName(DEFAULT_CACHE_NAME);
// Create Proxy-Object for this service
- TreeCacheAop proxy_ = (TreeCacheAop)((TreeCacheAopMBean) MBeanProxyExt.create(TreeCacheAopMBean.class,
- cacheServiceName_)).getInstance();
- if (proxy_ == null)
+ PojoCacheJmxWrapperMBean mbean = (PojoCacheJmxWrapperMBean) MBeanProxyExt.create(PojoCacheJmxWrapperMBean.class,
+ cacheServiceName_);
+ if (mbean == null)
{
- throw new RuntimeException("getCacheInstance: locate null TomcatCacheAop");
+ throw new RuntimeException("getCacheInstance: locate null " + cacheServiceName_);
}
- return proxy_;
+ return mbean.getPojoCache();
}
catch (Throwable e)
{
@@ -58,4 +83,109 @@
throw new RuntimeException("getCacheInstance: Exception: " +e);
}
}
+
+ public Object getSessionVersion(String sessionFqn)
+ {
+ return getCache().get(Fqn.fromString(sessionFqn), VERSION_KEY);
+ }
+
+ public Object getBuddySessionVersion(String sessionFqn) throws Exception
+ {
+ Object result = null;
+
+ Fqn fqn = Fqn.fromString(sessionFqn);
+
+ Set buddies = getBuddyBackupRoots();
+ for (Iterator iter = buddies.iterator(); iter.hasNext();)
+ {
+ Node buddy = (Node) iter.next();
+ Node session = buddy.getChild(fqn);
+ if (session != null)
+ {
+ result = session.get(VERSION_KEY);
+ break;
+ }
+ }
+
+ return result;
+ }
+
+ public Set getSessionIds(String warFqn) throws Exception
+ {
+ Set result = new HashSet();
+
+ Fqn fqn = Fqn.fromString(warFqn);
+ Node main = getCache().getChild(fqn);
+ if (main != null)
+ {
+ result.addAll(main.getChildrenNames());
+ }
+
+// Check in the buddy backup tree
+
+ Set buddies = getBuddyBackupRoots();
+ for (Iterator iter = buddies.iterator(); iter.hasNext();)
+ {
+ Node buddy = (Node) iter.next();
+ Node warRoot = buddy.getChild(fqn);
+ if (warRoot != null)
+ {
+ result.addAll(warRoot.getChildrenNames());
+ }
+ }
+
+ return result;
+ }
+
+ public boolean getLeaveInstalledAfterShutdown()
+ {
+ return leaveInstalledAfterShutdown;
+ }
+
+ public void setLeaveInstalledAfterShutdown()
+ {
+ this.leaveInstalledAfterShutdown = true;
+ }
+
+ public void uninstall()
+ {
+ Thread t = new Thread() {
+ public void run() {
+ try
+ {
+ server.unregisterMBean(OBJECT_NAME);
+ }
+ catch (Exception e) {}
+ }
+ };
+
+ t.start();
+ }
+
+ private Set getBuddyBackupRoots()
+ {
+ Set buddies = null;
+ Node buddyRoot = getCache().getChild(BuddyManager.BUDDY_BACKUP_SUBTREE_FQN);
+ if (buddyRoot != null)
+ {
+ buddies = buddyRoot.getChildren();
+ }
+ else
+ {
+ buddies = Collections.EMPTY_SET;
+ }
+ return buddies;
+ }
+
+ private PojoCache getPojoCache()
+ {
+ if (pojoCache == null)
+ pojoCache = getCacheInstance();
+ return pojoCache;
+ }
+
+ private Cache getCache()
+ {
+ return getPojoCache().getCache();
+ }
}
Added: trunk/testsuite/src/main/org/jboss/test/cluster/web/CacheHelperMBean.java
===================================================================
--- trunk/testsuite/src/main/org/jboss/test/cluster/web/CacheHelperMBean.java 2006-11-18 11:54:26 UTC (rev 58605)
+++ trunk/testsuite/src/main/org/jboss/test/cluster/web/CacheHelperMBean.java 2006-11-18 11:54:58 UTC (rev 58606)
@@ -0,0 +1,17 @@
+package org.jboss.test.cluster.web;
+
+import java.util.Set;
+
+public interface CacheHelperMBean
+{
+ Object getSessionVersion(String sessionFqn);
+
+ Object getBuddySessionVersion(String sessionFqn) throws Exception;
+
+ Set getSessionIds(String warFqn) throws Exception;
+
+ void setLeaveInstalledAfterShutdown();
+
+ void uninstall();
+
+}
\ No newline at end of file
Added: trunk/testsuite/src/main/org/jboss/test/cluster/web/CacheHelperServletContextListener.java
===================================================================
--- trunk/testsuite/src/main/org/jboss/test/cluster/web/CacheHelperServletContextListener.java 2006-11-18 11:54:26 UTC (rev 58605)
+++ trunk/testsuite/src/main/org/jboss/test/cluster/web/CacheHelperServletContextListener.java 2006-11-18 11:54:58 UTC (rev 58606)
@@ -0,0 +1,47 @@
+package org.jboss.test.cluster.web;
+
+import javax.management.MBeanServer;
+import javax.servlet.ServletContextEvent;
+import javax.servlet.ServletContextListener;
+
+import org.jboss.mx.util.MBeanServerLocator;
+
+public class CacheHelperServletContextListener implements ServletContextListener
+{
+ private MBeanServer server;
+ private CacheHelper helper;
+
+ public void contextInitialized(ServletContextEvent arg0)
+ {
+ server = MBeanServerLocator.locateJBoss();
+ if (!server.isRegistered(CacheHelper.OBJECT_NAME))
+ {
+ helper = new CacheHelper(server);
+ try
+ {
+ server.registerMBean(helper, CacheHelper.OBJECT_NAME);
+ }
+ catch (Exception e)
+ {
+ throw new RuntimeException(e);
+ }
+ }
+ }
+
+ public void contextDestroyed(ServletContextEvent arg0)
+ {
+ try
+ {
+ if (helper != null && !helper.getLeaveInstalledAfterShutdown()
+ && (server.isRegistered(CacheHelper.OBJECT_NAME)))
+ {
+ server.unregisterMBean(CacheHelper.OBJECT_NAME);
+ }
+ }
+ catch (Exception e)
+ {
+ throw new RuntimeException(e);
+ }
+ }
+
+}
More information about the jboss-cvs-commits
mailing list