On Aug 25, 2008, at 11:32 PM, Pascal Voitot wrote:

> I have a remark: from my experience, in big projects, people tend to  
> create
> lots of configuration files for each modules and at the end it  
> appears to be
> really hard to maintain something coherent and easy to use. You  
> spend more
> time looking in files to find the parameter you need to change and if
> documentation is not perfect, this can become totally impossible for a
> non-expert.
> imagine if you have 50 modules, you may have 50 different places for
> configuration?
>
> So will it be possible to aggregate configurations to centralize  
> data and
> optimize configuration mechanisms?

Yes the idea is to have some predefined locations:
* a global xwiki.properties file
* some xwiki documents (not fully defined yet, need to read again  
sergiu's proposal since he had proposed some locations)

BTW this is already done in the DefaultConfigurationSourceCollection  
class :)

Thanks
-Vincent

> On Mon, Aug 25, 2008 at 2:17 PM, Marius Dumitru Florea <
> [EMAIL PROTECTED]> wrote:
>
>> Hi Vincent,
>>
>> I like it. Just make sure this configuration components will be  
>> available
>> in velocity code as well. As you know, I had to write a plug-in for  
>> the
>> WYSIWYG mainly because currently there's no way of getting a XWiki
>> configuration parameter without having programming rights. Also, I  
>> think
>> we should allow a configuration source to contain parameters for  
>> different
>> modules. But I guess this is easy to implement using the namespaces  
>> you
>> mentioned.
>>
>> So I'm definitely +1.
>>
>>> Hi,
>>>
>>> Here's a proposal for implementing configuration in the new
>>> architecture, using components.
>>> Note: I think this is compatible with Sergiu's proposal here:
>>> http://tinyurl.com/6md5jd
>>>
>>> General requirements
>>> =================
>>>
>>> * Each module/component can define its own configuration
>>> * Accessing configuration parameters from Java should be strongly
>>> typed (ie. getLinkLabelFormat() for getting the link label and not
>>> getParameter("linklabelformat"))
>>> * It should be possible to load Configuration data from different
>>> sources (properties file, xml files, database, xwiki documents, etc)
>>> * Configuration sources should have an order
>>> * Any module/component should be able to get the configuration for
>>> other module/component but in read only mode
>>> * It should be possible to dynamically add a new configuration  
>>> source
>>> at runtime
>>> * Configuration data should be loaded and cached
>>>
>>> Proposed Implementation
>>> ====================
>>>
>>> * Each module/component defines its configuration in a component  
>>> which
>>> is a java beans. For example let's take the rendering module. We  
>>> would
>>> have a RenderingConfiguration component as in:
>>>
>>> public interface RenderingConfiguration
>>> {
>>>     String getLinkLabelFormat();
>>> }
>>>
>>> public class DefaultRenderingConfiguration implements Initializable,
>>> Reloadable, RenderingConfiguration
>>> (in practice will extend AbstractConfiguration class probably)
>>> {
>>>     private String linkLabelFormat;
>>>
>>>     // Injected
>>>     private ConfigurationManager manager;
>>>
>>>     public void initialize()
>>>     {
>>>         // Define the Configuration sources here. Default
>>> configuration sources would be defined in AbstractConfiguration
>>> probably)
>>>         List configurationSources = ....
>>>
>>>         // Configuration namespace (all properties should start with
>>> the namespace value)
>>>         String namespace = "rendering";
>>>
>>>         reload();
>>>     }
>>>
>>>     // Should be located in AbstractConfiguration
>>>     public void addConfigurationSource(ConfigurationSource source);
>>>
>>>     public void reload()
>>>     {
>>>         // Populate java bean
>>>         manager.populate(this, configurationSources, namespace);
>>>     }
>>>
>>>     public void setLinkLabelFormat(String linkLabelFormat) {...}
>>>     public String getLinkLabelFormat() {...}
>>> }
>>>
>>> * The DefaultRenderingConfiguration class is registered as a  
>>> component
>>> in components.xml and with a singleton lifecycle. This means the  
>>> data
>>> it contains are cached for the whole application lifetime. They  
>>> can be
>>> reloaded using reload().
>>> * The ConfigurationManager implementation will use Jakarta BeanUtils
>>> to automatically populate a javabeans. It'll also use Jakarta  
>>> Commons
>>> Configuration for implementations of ConfigurationSource.
>>> * ConfigurationSource interface should have a method like: Object
>>> getParameter(String name). More details to be defined later.
>>> * Code wanting to get Rendering Configuration would simply define a
>>> component dependency on DefaultRenderingConfiguration and they'll  
>>> have
>>> it injected for them.
>>> * There'll be a XWikiDocumentConfigurationSource that gets parameter
>>> values from one or several xwiki documents. We'll need to define how
>>> we get them but we could provide some standard  
>>> XWikiConfigurationClass
>>> for a single configuration element for example.
>>> * The idea of the namespace is to use the package name and remove  
>>> the
>>> "org.xwiki" or "com.xpn.xwiki" prefix. For example
>>> "org.xwiki.rendering.*" leads to "rendering.*".
>>>
>>> WDYT?
>>>
>>> If we agree I can whip up a first implementation of this relatively
>>> quickly I think.
>>>
>>> Thanks
>>> -Vincent
_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to