[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 &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