[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