Class ManagedProperties
- java.lang.Object
-
- org.apache.commons.discovery.tools.ManagedProperties
-
public class ManagedProperties extends java.lang.Object
This class may disappear in the future, or be moved to another project..
Extend the concept of System properties to a hierarchical scheme based around class loaders. System properties are global in nature, so using them easily violates sound architectural and design principles for maintaining separation between components and runtime environments. Nevertheless, there is a need for properties broader in scope than class or class instance scope.
This class is one solution.
Manage properties according to a secure scheme similar to that used by classloaders:
ClassLoaders are organized in a tree hierarchy.- each
ClassLoaderhas a reference to a parentClassLoader. - the root of the tree is the bootstrap
ClassLoaderer. - the youngest decendent is the thread context class loader.
- properties are bound to a
ClassLoaderinstance- non-default properties bound to a parent
ClassLoaderinstance take precedence over all properties of the same name bound to any decendent. Just to confuse the issue, this is the default case. - default properties bound to a parent
ClassLoaderinstance may be overriden by (default or non-default) properties of the same name bound to any decendent.
- non-default properties bound to a parent
- System properties take precedence over all other properties
This is not a perfect solution, as it is possible that different
ClassLoaders load different instances ofScopedProperties. The 'higher' this class is loaded within theClassLoaderhierarchy, the more usefull it will be.
-
-
Constructor Summary
Constructors Constructor Description ManagedProperties()
-
Method Summary
All Methods Static Methods Concrete Methods Deprecated Methods Modifier and Type Method Description static java.util.PropertiesgetProperties()This is an expensive operation.static java.lang.StringgetProperty(java.lang.ClassLoader classLoader, java.lang.String propertyName)Get value for property bound to the class loader.static java.lang.StringgetProperty(java.lang.ClassLoader classLoader, java.lang.String propertyName, java.lang.String dephault)Get value for property bound to the class loader.static java.lang.StringgetProperty(java.lang.String propertyName)Get value for property bound to the current thread context class loader.static java.lang.StringgetProperty(java.lang.String propertyName, java.lang.String dephault)Get value for property bound to the current thread context class loader.static java.util.Enumeration<java.lang.String>propertyNames()Return list of all property names.static voidsetLog(org.apache.commons.logging.Log _log)Deprecated.This method is not thread-safestatic voidsetProperties(java.util.Map<?,?> newProperties)Set property values forPropertiesbound to the current thread context class loader.static voidsetProperties(java.util.Map<?,?> newProperties, boolean isDefault)Set property values forPropertiesbound to the current thread context class loader.static voidsetProperty(java.lang.String propertyName, java.lang.String value)Set value for property bound to the current thread context class loader.static voidsetProperty(java.lang.String propertyName, java.lang.String value, boolean isDefault)Set value for property bound to the current thread context class loader.
-
-
-
Constructor Detail
-
ManagedProperties
public ManagedProperties()
-
-
Method Detail
-
setLog
@Deprecated public static void setLog(org.apache.commons.logging.Log _log)
Deprecated.This method is not thread-safeSets theLogfor this class.- Parameters:
_log- This classLog
-
getProperty
public static java.lang.String getProperty(java.lang.String propertyName)
Get value for property bound to the current thread context class loader.- Parameters:
propertyName- property name.- Returns:
- property value if found, otherwise default.
-
getProperty
public static java.lang.String getProperty(java.lang.String propertyName, java.lang.String dephault)
Get value for property bound to the current thread context class loader. If not found, then return default.- Parameters:
propertyName- property name.dephault- default value.- Returns:
- property value if found, otherwise default.
-
getProperty
public static java.lang.String getProperty(java.lang.ClassLoader classLoader, java.lang.String propertyName)
Get value for property bound to the class loader.- Parameters:
classLoader- The classloader used to load resources.propertyName- property name.- Returns:
- property value if found, otherwise default.
-
getProperty
public static java.lang.String getProperty(java.lang.ClassLoader classLoader, java.lang.String propertyName, java.lang.String dephault)
Get value for property bound to the class loader. If not found, then return default.- Parameters:
classLoader- The classloader used to load resources.propertyName- property name.dephault- default value.- Returns:
- property value if found, otherwise default.
-
setProperty
public static void setProperty(java.lang.String propertyName, java.lang.String value)
Set value for property bound to the current thread context class loader.- Parameters:
propertyName- property namevalue- property value (non-default) If null, remove the property.
-
setProperty
public static void setProperty(java.lang.String propertyName, java.lang.String value, boolean isDefault)
Set value for property bound to the current thread context class loader.- Parameters:
propertyName- property namevalue- property value. If null, remove the property.isDefault- determines if property is default or not. A non-default property cannot be overriden. A default property can be overriden by a property (default or non-default) of the same name bound to a decendent class loader.
-
setProperties
public static void setProperties(java.util.Map<?,?> newProperties)
Set property values forPropertiesbound to the current thread context class loader.- Parameters:
newProperties- name/value pairs to be bound
-
setProperties
public static void setProperties(java.util.Map<?,?> newProperties, boolean isDefault)
Set property values forPropertiesbound to the current thread context class loader.- Parameters:
newProperties- name/value pairs to be boundisDefault- determines if properties are default or not. A non-default property cannot be overriden. A default property can be overriden by a property (default or non-default) of the same name bound to a decendent class loader.
-
propertyNames
public static java.util.Enumeration<java.lang.String> propertyNames()
Return list of all property names. This is an expensive operation: ON EACH CALL it walks through all property lists associated with the current context class loader upto and including the bootstrap class loader.- Returns:
- The list of all property names
-
getProperties
public static java.util.Properties getProperties()
This is an expensive operation. ON EACH CALL it walks through all property lists associated with the current context class loader upto and including the bootstrap class loader.- Returns:
- Returns a
java.util.Propertiesinstance that is equivalent to the current state of the scoped properties, in that getProperty() will return the same value. However, this is a copy, so setProperty on the returned value will not effect the scoped properties.
-
-