[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