You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@avalon.apache.org by Stephen McConnell <mc...@apache.org> on 2004/01/30 18:31:46 UTC

configuration packaging

Leo Sutic wrote:

> 
>>From: Stephen McConnell [mailto:mcconnell@apache.org] 
>>
>>What I propose is a package in avalon vs named avalon-configuration
>>
>>   avalon/avalon-configuration
>>     api  <--- contains MutableConfiguration
>>     impl <--- contains DefaultConfiguration
>>               contains DefaultMultipleConfiguration
>>               and possibly the rest of the content currently
>>               under framework/impl/.../configuration
>>
>>... then we have a clear separation of the container side concerns 
>>relating to configuration as distinct from the container/component 
>>contract concerns that are dealt with under the framework space.
> 
> 
> I oppose an avalon-configuration package. However, abstracting one level
> up may be required.


OK ... but relative to location this implies

    avalon/xxxx

or

    xxx


> It seems like we have three types of things under
> org.apache.avalon.framework:
> 
>  1. Lifecycle contracts and supporting interfaces: Such as
> Initializable,
>     Configurable, Configuration, etc. Basically the interfaces and
> classes
>     involved in getting a component good to go, and decomissioning.

yep

>  2. Default implementations of the interfaces in (1), and utility
> classes:
>     DefaultConfiguration, DefaultConfigurationBuilder, 
>     DefaultConfiguration, DefaultContext, etc.

and so log as these remain realistic default implementations these make 
sense - and in the scenario of this thread we are talking about the 
introduction of an implementation contract which is below the api and 
above the implementation

>  3. Additional interfaces: Abstractions of default implementations such
> as
>     MutableConfiguration. To understand what I mean by this, consider a
> world
>     where we have java.util.ArrayList, but no java.util.List. Then
> someone 
>     thinks: "Hmmm. An ArrayList is just an implementation of a List. We
> should
>     perhaps define such an interface." That's my thought about
> DefaultConfiguration/
>     MutableConfiguration.

I understand this completely.  The question I have concerns the 
relevance of DefaultConfiguration to this discussion. IMO 
DefaultConfiguration is simply an unqualified implementation example.


> What makes this such a mess is that we have (2) under
> org.apache.avalon.framework!
> (2) are basically utility classes - none of them figure in any lifecycle
> contract,
> which really makes them not part of framework. You can write a source
> and binary
> compatible container without ever using them.

Which is the reason why this needs to be resolved properly. Take for 
example the stuff I'm doing on the avalon-logging package .. its 
replacing classes in avalon-framework/impl because the impl is 
structured.  I see direct and immediate parallels between this and the 
concerns relative to configuration.

> And since we have implementations in framework, (3) pretty much has to
> go there 
> as well.

On this I disagree.
We can create org.apache.avalon.configuration and include withing this 
namespace the things that really make sense as pertains to the question 
of configuration implementation strategies.


> What we should have done is:
> 
>  1. org.apache.avalon.lifecycle
> 
>  2. org.apache.avalon.util
> 
>  3. org.apache.avalon.util
> 
> (Note that I don't propose the above.)
> 
> But now we're stuck with what we have - we have implementation and
> supporting classes 
> in the same java package as the interfaces. I can understand the
> implementation 
> classes but not the support classes. I mean, would you put
> SAXConfigurationBuilder into
> org.apache.avalon.framework.configuration today if you had a choice?
> Moving classes 
> around packages is suicide at the moment, so we're sorta stuck with what
> we have.

I disagree - the APIs are contact - what we do with the impl is another 
question.  Create fred.xyz.DefaultConfiguration - does not matter - it 
does not impact the framework contract spec.

> So instead of having:
> 
>   avalon-framework-api
>   avalon-framework-impl
>   avalon-framework-configuration
> 
> perhaps:
> 
>   avalon-framework-api                 << Configurable, Configuration
>   avalon-framework-xapi (eXtended-API) << MutableConfiguration
>   avalon-framework-impl                << DefaultConfiguration, 
>                                           DefaultConfigurationBuilder

What is the difference with the above and :

   avalon-framework-api
   avalon-configuration-api <-- container side apis
   avalon-configuration-impl <-- implementations

or

   avalon-configuration-xml <-- implementations


The difference is that your not saying that something is part of the 
component/container contract ... instead your saying ... "relative to 
the container/component contract there is an implementation solution".

> 
> Dependencies are: impl depends on xapi depends on api.

I understand (and agree) except for the "framework" aspect ... because 
its not actually framework .. its just an implementation strategy that 
happens to have an interface associated with it.

Stephen.


> /LS
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@avalon.apache.org
> For additional commands, e-mail: dev-help@avalon.apache.org
> 
> 


-- 

|------------------------------------------------|
| Magic by Merlin                                |
| Production by Avalon                           |
|                                                |
| http://avalon.apache.org/merlin                |
| http://dpml.net/merlin/distributions/latest    |
|------------------------------------------------|

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@avalon.apache.org
For additional commands, e-mail: dev-help@avalon.apache.org