From 5d6e9428fedead57a9c9438cebe58b485ff476d2 Mon Sep 17 00:00:00 2001
From: matthew_swift <matthew_swift@localhost>
Date: Fri, 14 Sep 2007 10:22:17 +0000
Subject: [PATCH] Avoid managed object definition initialization dependency problems. Using features like inherited default values and aggregation properties it is quite straightforward to encounter initialization dependency problems. For example: the global configuration will contain an aggregation property which references the default password policy. This aggregation definition is defined using a managed object path which, when decoded, contains a reference to the root configuration and its "password-policy" relation. This is what happens during initialization of the root configuration:
---
opends/src/server/org/opends/server/admin/AbsoluteInheritedDefaultBehaviorProvider.java | 43 +++++++++++++++++++++++++------------------
1 files changed, 25 insertions(+), 18 deletions(-)
diff --git a/opends/src/server/org/opends/server/admin/AbsoluteInheritedDefaultBehaviorProvider.java b/opends/src/server/org/opends/server/admin/AbsoluteInheritedDefaultBehaviorProvider.java
index e0f961c..178342a 100644
--- a/opends/src/server/org/opends/server/admin/AbsoluteInheritedDefaultBehaviorProvider.java
+++ b/opends/src/server/org/opends/server/admin/AbsoluteInheritedDefaultBehaviorProvider.java
@@ -30,18 +30,22 @@
/**
* A default behavior provider which retrieves default values from a
- * managed object in an abolute location. It should be used by
+ * managed object in an absolute location. It should be used by
* properties which inherit their default value(s) from properties
* held in an other managed object.
*
* @param <T>
* The type of values represented by this provider.
*/
-public final class AbsoluteInheritedDefaultBehaviorProvider<T> implements
+public final class AbsoluteInheritedDefaultBehaviorProvider<T> extends
DefaultBehaviorProvider<T> {
// The absolute path to the managed object containing the property.
- private final ManagedObjectPath<?, ?> path;
+ private ManagedObjectPath<?, ?> path = null;
+
+ // The string representation of the managed object path specifying
+ // the absolute location of the managed object.
+ private final String pathString;
// The name of the property containing the inherited default values.
private final String propertyName;
@@ -52,24 +56,16 @@
* Create an absolute inherited default behavior provider associated
* with the managed object at the specified absolute location.
*
- * @param path
- * The absolute location of the managed object.
+ * @param pathString
+ * The string representation of the managed object path
+ * specifying the absolute location of the managed object.
* @param propertyName
* The name of the property containing the inherited
* default values.
- * @throws IllegalArgumentException
- * If the named property is associated with the managed
- * object definition identified by the path.
- * @throws ClassCastException
- * If the named property does not have the same type of
- * property values as this default behavior provider.
*/
- @SuppressWarnings("unchecked")
- public AbsoluteInheritedDefaultBehaviorProvider(ManagedObjectPath path,
- String propertyName) throws IllegalArgumentException, ClassCastException {
- // We do not decode the property name now because the property
- // might not have been constructed at this point.
- this.path = path;
+ public AbsoluteInheritedDefaultBehaviorProvider(String pathString,
+ String propertyName) {
+ this.pathString = pathString;
this.propertyName = propertyName;
}
@@ -111,7 +107,7 @@
/**
- * Get the name of the property containing the inherited default
+ * Gets the name of the property containing the inherited default
* values.
*
* @return Returns the name of the property containing the inherited
@@ -121,4 +117,15 @@
return propertyName;
}
+
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ protected void initialize() throws Exception {
+ // Decode the path.
+ path = ManagedObjectPath.valueOf(pathString);
+ }
+
}
--
Gitblit v1.10.0