[jbosscache-commits] JBoss Cache SVN: r7317 - in core/branches/flat/src/main/java/org/jboss/starobrno: util and 1 other directory.

jbosscache-commits at lists.jboss.org jbosscache-commits at lists.jboss.org
Fri Dec 12 07:39:14 EST 2008


Author: manik.surtani at jboss.com
Date: 2008-12-12 07:39:13 -0500 (Fri, 12 Dec 2008)
New Revision: 7317

Added:
   core/branches/flat/src/main/java/org/jboss/starobrno/config/NonOverridable.java
Modified:
   core/branches/flat/src/main/java/org/jboss/starobrno/config/Configuration.java
   core/branches/flat/src/main/java/org/jboss/starobrno/config/ConfigurationComponent.java
   core/branches/flat/src/main/java/org/jboss/starobrno/util/ReflectionUtil.java
Log:
Override application code in place

Modified: core/branches/flat/src/main/java/org/jboss/starobrno/config/Configuration.java
===================================================================
--- core/branches/flat/src/main/java/org/jboss/starobrno/config/Configuration.java	2008-12-12 12:17:09 UTC (rev 7316)
+++ core/branches/flat/src/main/java/org/jboss/starobrno/config/Configuration.java	2008-12-12 12:39:13 UTC (rev 7317)
@@ -24,10 +24,12 @@
 import org.jboss.cache.Version;
 import org.jboss.cache.buddyreplication.BuddyManager;
 import org.jboss.cache.lock.IsolationLevel;
+import org.jboss.starobrno.CacheException;
 import org.jboss.starobrno.config.parsing.JGroupsStackParser;
 import org.jboss.starobrno.factories.annotations.NonVolatile;
 import org.jboss.starobrno.factories.annotations.Start;
 import org.jboss.starobrno.marshall.ExtendedMarshaller;
+import org.jboss.starobrno.util.ReflectionUtil;
 import org.w3c.dom.Element;
 
 import java.net.URL;
@@ -153,7 +155,9 @@
    //   CONFIGURATION OPTIONS
    // ------------------------------------------------------------------------------------------------------------
 
+   @NonOverridable
    private String clusterName = "JBossCache-Cluster";
+   @NonOverridable
    private String clusterConfig = null;
    private boolean useReplQueue = false;
    @Dynamic
@@ -201,6 +205,7 @@
    private int listenerAsyncQueueSize = 50000;
    private int serializationExecutorPoolSize = 0;
    private int serializationExecutorQueueSize = 50000;
+   @NonOverridable
    private URL jgroupsConfigFile;
 
    @Start(priority = 1)
@@ -225,6 +230,7 @@
 
    public void setCacheMarshaller(ExtendedMarshaller instance)
    {
+      testImmutability("marshaller");
       marshaller = instance;
    }
 
@@ -1038,6 +1044,24 @@
 
    public void applyOverrides(Configuration overrides)
    {
-      // TODO: Manik: Implement me
+      // loop through all overridden elements in the incoming configuration and apply
+      for (String overriddenField : overrides.overriddenConfigurationElements)
+      {
+         assertAllowedToOverride(overriddenField);
+         ReflectionUtil.setValue(this, overriddenField, ReflectionUtil.getValue(overrides, overriddenField));
+      }
    }
+
+   private void assertAllowedToOverride(String fieldname)
+   {
+      try
+      {
+         if (getClass().getDeclaredField(fieldname).isAnnotationPresent(NonOverridable.class))
+            throw new ConfigurationException("Configuration field " + fieldname + " cannot be overridden!");
+      }
+      catch (NoSuchFieldException e)
+      {
+         throw new CacheException("Field " + fieldname + " does not exist on Configuration!");
+      }
+   }
 }

Modified: core/branches/flat/src/main/java/org/jboss/starobrno/config/ConfigurationComponent.java
===================================================================
--- core/branches/flat/src/main/java/org/jboss/starobrno/config/ConfigurationComponent.java	2008-12-12 12:17:09 UTC (rev 7316)
+++ core/branches/flat/src/main/java/org/jboss/starobrno/config/ConfigurationComponent.java	2008-12-12 12:39:13 UTC (rev 7317)
@@ -29,10 +29,7 @@
 import org.jboss.starobrno.factories.annotations.Inject;
 import org.jboss.starobrno.factories.annotations.Start;
 
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Set;
+import java.util.*;
 
 /**
  * Base superclass of Cache configuration classes that expose some properties
@@ -52,6 +49,7 @@
    private transient ComponentRegistry cr;
    // a workaround to get over immutability checks
    private boolean accessible;
+   protected List<String> overriddenConfigurationElements = new LinkedList<String>();
 
    protected ConfigurationComponent()
    {
@@ -132,6 +130,9 @@
       {
          accessible = false;
       }
+
+      // now mark this as overridden
+      overriddenConfigurationElements.add(fieldName);
    }
 
    public void setCache(CacheSPI cache)

Added: core/branches/flat/src/main/java/org/jboss/starobrno/config/NonOverridable.java
===================================================================
--- core/branches/flat/src/main/java/org/jboss/starobrno/config/NonOverridable.java	                        (rev 0)
+++ core/branches/flat/src/main/java/org/jboss/starobrno/config/NonOverridable.java	2008-12-12 12:39:13 UTC (rev 7317)
@@ -0,0 +1,22 @@
+package org.jboss.starobrno.config;
+
+import java.lang.annotation.*;
+
+/**
+ * This annotation marks configuration attributes as non-overridable by named caches.
+ *
+ * @author Manik Surtani
+ */
+// ensure this annotation is available at runtime.
+ at Retention(RetentionPolicy.RUNTIME)
+
+// ensure that this annotation is documented on fields in Configuration
+ at Documented
+
+// only applies to fields.
+ at Target(ElementType.FIELD)
+
+public @interface NonOverridable
+{
+
+}

Modified: core/branches/flat/src/main/java/org/jboss/starobrno/util/ReflectionUtil.java
===================================================================
--- core/branches/flat/src/main/java/org/jboss/starobrno/util/ReflectionUtil.java	2008-12-12 12:17:09 UTC (rev 7316)
+++ core/branches/flat/src/main/java/org/jboss/starobrno/util/ReflectionUtil.java	2008-12-12 12:39:13 UTC (rev 7317)
@@ -150,4 +150,24 @@
       }
    }
 
+   /**
+    * Retrieves the value of a field of an object instance via reflection
+    *
+    * @param instance  to inspect
+    * @param fieldName name of field to retrieve
+    * @return a value
+    */
+   public static Object getValue(Object instance, String fieldName)
+   {
+      Field f = findFieldRecursively(instance.getClass(), fieldName);
+      try
+      {
+         f.setAccessible(true);
+         return f.get(instance);
+      }
+      catch (IllegalAccessException iae)
+      {
+         throw new CacheException("Cannot access field " + f, iae);
+      }
+   }
 }




More information about the jbosscache-commits mailing list