[jbosscache-commits] JBoss Cache SVN: r4844 - in core/trunk/src: main/java/org/jboss/cache/factories and 3 other directories.

jbosscache-commits at lists.jboss.org jbosscache-commits at lists.jboss.org
Wed Dec 12 10:29:35 EST 2007


Author: manik.surtani at jboss.com
Date: 2007-12-12 10:29:35 -0500 (Wed, 12 Dec 2007)
New Revision: 4844

Added:
   core/trunk/src/main/java/org/jboss/cache/factories/annotations/Start.java
   core/trunk/src/main/java/org/jboss/cache/factories/annotations/Stop.java
Modified:
   core/trunk/src/main/java/org/jboss/cache/CacheImpl.java
   core/trunk/src/main/java/org/jboss/cache/factories/ComponentRegistry.java
   core/trunk/src/main/java/org/jboss/cache/interceptors/BaseRpcInterceptor.java
   core/trunk/src/main/java/org/jboss/cache/interceptors/Interceptor.java
   core/trunk/src/test/java/org/jboss/cache/factories/ComponentRegistryTest.java
Log:
Use of a start and stop annotation for better backward compatibility with old Interceptor setCache() methods.

Modified: core/trunk/src/main/java/org/jboss/cache/CacheImpl.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/CacheImpl.java	2007-12-12 15:22:27 UTC (rev 4843)
+++ core/trunk/src/main/java/org/jboss/cache/CacheImpl.java	2007-12-12 15:29:35 UTC (rev 4844)
@@ -690,6 +690,9 @@
 
       cacheStatus = CacheStatus.STARTING;
 
+      // start all internal components
+      componentRegistry.startComponents();
+
 //      createTransactionManager();
 
       // cache loaders should be initialised *before* any state transfers take place to prevent

Modified: core/trunk/src/main/java/org/jboss/cache/factories/ComponentRegistry.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/factories/ComponentRegistry.java	2007-12-12 15:22:27 UTC (rev 4843)
+++ core/trunk/src/main/java/org/jboss/cache/factories/ComponentRegistry.java	2007-12-12 15:29:35 UTC (rev 4844)
@@ -9,6 +9,8 @@
 import org.jboss.cache.factories.annotations.ComponentName;
 import org.jboss.cache.factories.annotations.DefaultFactoryFor;
 import org.jboss.cache.factories.annotations.Inject;
+import org.jboss.cache.factories.annotations.Start;
+import org.jboss.cache.factories.annotations.Stop;
 import org.jboss.cache.interceptors.Interceptor;
 import org.jboss.cache.util.BeanUtils;
 
@@ -43,7 +45,7 @@
     * Can contain either unnamed singletons (in which case the key is the class of the instance) or named singletons, keyed by a
     * String representing the name of the instance.
     */
-   private Map<Object, Object> registry = new HashMap<Object, Object>();
+   Map<Object, Object> registry = new HashMap<Object, Object>();
    /**
     * Contains class definitions of component factories that can be used to construct certain components
     */
@@ -299,7 +301,7 @@
       if (log.isTraceEnabled()) log.trace("Inspecting class " + target.getClass());
       try
       {
-         List<Method> methods = getAllMethods(target.getClass());
+         List<Method> methods = getAllMethods(target.getClass(), Inject.class);
          if (log.isTraceEnabled())
             log.trace("Found method set containing " + methods.size() + " methods that need injection: " + methods);
 
@@ -369,25 +371,26 @@
     * Includes all methods annotated with &amp;Inject as well as methods that are <i>not</i> annotated, but instead
     * have parameters annotated accordingly.
     *
-    * @param c class to inspect
+    * @param c              class to inspect
+    * @param annotationType the type of annotation to look for
     * @return Set of Method objects that require injection.
     */
-   private List<Method> getAllMethods(Class c)
+   private List<Method> getAllMethods(Class c, Class<? extends Annotation> annotationType)
    {
       List<Method> annotated = new LinkedList<Method>();
-      inspectRecursively(c, annotated);
+      inspectRecursively(c, annotated, annotationType);
       return annotated;
    }
 
-   private void inspectRecursively(Class c, List<Method> s)
+   private void inspectRecursively(Class c, List<Method> s, Class<? extends Annotation> annotationType)
    {
       // Superclass first
-      if (!c.equals(Object.class)) inspectRecursively(c.getSuperclass(), s);
+      if (!c.equals(Object.class)) inspectRecursively(c.getSuperclass(), s, annotationType);
 
       for (Method m : c.getDeclaredMethods())
       {
          // don't bother if this method has already been overridden by a subclass
-         if (!alreadyFound(m, s) && m.isAnnotationPresent(Inject.class))
+         if (!alreadyFound(m, s) && m.isAnnotationPresent(annotationType))
          {
             s.add(m);
          }
@@ -519,4 +522,50 @@
    {
       registry.clear();
    }
+
+   /**
+    * Starts all components that contain the {@link Start} annotation.
+    */
+   public void startComponents()
+   {
+      for (Object component : registry.values())
+      {
+         List<Method> methods = getAllMethods(component.getClass(), Start.class);
+         for (Method m : methods)
+         {
+            try
+            {
+               m.setAccessible(true);
+               m.invoke(component);
+            }
+            catch (Exception e)
+            {
+               log.warn("Unable to invoke @Start annotated method " + m, e);
+            }
+         }
+      }
+   }
+
+   /**
+    * Stops all components that contain the {@link Stop} annotation.
+    */
+   public void stopComponents()
+   {
+      for (Object component : registry.values())
+      {
+         List<Method> methods = getAllMethods(component.getClass(), Stop.class);
+         for (Method m : methods)
+         {
+            try
+            {
+               m.invoke(component);
+            }
+            catch (Exception e)
+            {
+               log.warn("Unable to invoke @Stop annotated method " + m, e);
+            }
+         }
+      }
+   }
+
 }

Added: core/trunk/src/main/java/org/jboss/cache/factories/annotations/Start.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/factories/annotations/Start.java	                        (rev 0)
+++ core/trunk/src/main/java/org/jboss/cache/factories/annotations/Start.java	2007-12-12 15:29:35 UTC (rev 4844)
@@ -0,0 +1,20 @@
+package org.jboss.cache.factories.annotations;
+
+import static java.lang.annotation.ElementType.METHOD;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Method level annotation that indicates a (no-param) method to be called on a component registered in the ComponentRegistry
+ * when the cache starts.
+ * <p/>
+ *
+ * @author Manik Surtani (<a href="mailto:manik at jboss.org">manik at jboss.org</a>)
+ * @since 2.1.0
+ */
+ at Target(METHOD)
+ at Retention(RetentionPolicy.RUNTIME)
+public @interface Start
+{
+}

Added: core/trunk/src/main/java/org/jboss/cache/factories/annotations/Stop.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/factories/annotations/Stop.java	                        (rev 0)
+++ core/trunk/src/main/java/org/jboss/cache/factories/annotations/Stop.java	2007-12-12 15:29:35 UTC (rev 4844)
@@ -0,0 +1,20 @@
+package org.jboss.cache.factories.annotations;
+
+import static java.lang.annotation.ElementType.METHOD;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Method level annotation that indicates a (no-param) method to be called on a component registered in the ComponentRegistry
+ * when the cache stops.
+ * <p/>
+ *
+ * @author Manik Surtani (<a href="mailto:manik at jboss.org">manik at jboss.org</a>)
+ * @since 2.1.0
+ */
+ at Target(METHOD)
+ at Retention(RetentionPolicy.RUNTIME)
+public @interface Stop
+{
+}
\ No newline at end of file

Modified: core/trunk/src/main/java/org/jboss/cache/interceptors/BaseRpcInterceptor.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/interceptors/BaseRpcInterceptor.java	2007-12-12 15:22:27 UTC (rev 4843)
+++ core/trunk/src/main/java/org/jboss/cache/interceptors/BaseRpcInterceptor.java	2007-12-12 15:29:35 UTC (rev 4844)
@@ -8,7 +8,6 @@
 import org.jboss.cache.buddyreplication.BuddyManager;
 import org.jboss.cache.config.Configuration.CacheMode;
 import org.jboss.cache.config.Option;
-import org.jboss.cache.factories.annotations.Inject;
 import org.jboss.cache.marshall.MethodCall;
 import org.jboss.cache.marshall.MethodCallFactory;
 import org.jboss.cache.marshall.MethodDeclarations;
@@ -32,13 +31,12 @@
    private boolean usingBuddyReplication;
    protected boolean defaultSynchronous;
 
-   @Inject
    public void setCache(CacheSPI cache)
    {
       super.setCache(cache);
       buddyManager = cache.getBuddyManager();
       usingBuddyReplication = buddyManager != null;
-      CacheMode mode = configuration.getCacheMode();
+      CacheMode mode = cache.getConfiguration().getCacheMode();
       defaultSynchronous = (mode == CacheMode.REPL_SYNC || mode == CacheMode.INVALIDATION_SYNC);
    }
 

Modified: core/trunk/src/main/java/org/jboss/cache/interceptors/Interceptor.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/interceptors/Interceptor.java	2007-12-12 15:22:27 UTC (rev 4843)
+++ core/trunk/src/main/java/org/jboss/cache/interceptors/Interceptor.java	2007-12-12 15:29:35 UTC (rev 4844)
@@ -28,6 +28,7 @@
 import org.jboss.cache.InvocationContext;
 import org.jboss.cache.config.Configuration;
 import org.jboss.cache.factories.annotations.Inject;
+import org.jboss.cache.factories.annotations.Start;
 
 import javax.transaction.Status;
 import javax.transaction.SystemException;
@@ -65,17 +66,22 @@
       return next;
    }
 
-   @Inject
    public void setCache(CacheSPI cache)
    {
-      this.cache = cache;
-      //this.configuration = cache.getConfiguration();
    }
 
+   @Start
+   private void start()
+   {
+      // for backward compatibility, this must only be done when the cache starts.
+      setCache(cache);
+   }
+
    @Inject
-   private void injectDependencies(Configuration configuration)
+   private void injectDependencies(CacheSPI cache, Configuration configuration)
    {
       this.configuration = configuration;
+      this.cache = cache;
    }
 
    /**

Modified: core/trunk/src/test/java/org/jboss/cache/factories/ComponentRegistryTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/factories/ComponentRegistryTest.java	2007-12-12 15:22:27 UTC (rev 4843)
+++ core/trunk/src/test/java/org/jboss/cache/factories/ComponentRegistryTest.java	2007-12-12 15:29:35 UTC (rev 4844)
@@ -60,6 +60,8 @@
    {
       assert cf.componentRegistry == cr;
       assert cf.configuration == configuration;
+
+      System.out.println(cr.registry);
    }
 
    public void testDefaultFactoryScanning()




More information about the jbosscache-commits mailing list