Nicola Ken Barozzi wrote:
> Paul Hammant wrote:
>
>> Stephen,
>>
>>>>>>>>>> 1) Merlin includes phoenix-client.jar and provides alternate
>>>>>>>>>> implemetations of the BlockContext interface.
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Thats the only real solution at this stage.
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> There could be some reason why that is not possible.
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> It will become a lot more difficult in the future when
>>>>>>> classLoader and
>>>>>>> interceptor stuff get integrated but it should be possible to
>>>>>>> no-op those
>>>>>>> features - not sure.
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> Well let's tackle future features in the future. For now though
>>>>>> I think
>>>>>> that useing a Phoenix jar to be Phoenix compatible is perfectly
>>>>>> possible.
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> I am not sure what you are saying. If you want to implement
>>>>> BlockContext then that is fine but the implementation is
>>>>> inherently container specific. The implementation should not even
>>>>> be in the same classloader as the interface.
>>>>
>>>>
>>>>
>>>>
>>>
>>> The GenericBlockContext provides a solution for any Avalon container
>>> to workaround the Phoenix BlockContext dependency issue. It deals
>>> with the very situation you mention below - the inclusion of
>>> container specific APIs - in this case a Phoenix specific APIs. What
>>> GenericBlockContext does is to provide a mechanism for any container
>>> to be able to deal with the legacy of Phoenix dependent components
>>> that include references to the BlockContext interface. The
>>> implementation solves the problem by allowing a container to handle
>>> the association of keys and values using java.util.Map and the
>>> Context class. Boyond this it has to implement the BlockContext
>>> interface in order to solve the issue of Phoenix API exposure
>>> towards components. Relative to a container, the GenericBlockContext
>>> depedencies are on Map, Context, String and a client supplied
>>> classpath. Relative to the component the dependency is on Phoneix
>>> and the A-F. GenericBlockContext provides the bridge between the two.
>>
>>
>>
>>> Everything about this is solving a Phoneix issue. But, yes - the
>>> solution can be included inside Merlin. Yes we can create
>>> artificial depedencies between the Merlin Project and the Phoenix
>>> Project. Yes we can oblige Merlin installations to include APIs to
>>> another container for those occasions where the client is dealing
>>> with Phoenix legacy and already have phoenix-client.jar in place.
>>> Yes, we could write this up in the FAQ and explain why its a good
>>> thing - but I may need some help on that!
>>
>>
>>
>> Refering to "..artificial dependencies between the Merlin Project and
>> the Pheonix Project" and "..Phoenix legacy..":- Phoenix compatability
>> is what we are talking about here unless I am wrong. It could be we
>> are talking about Phoenix obsolesence (I am not).
>
>
> I am *definately* not either.
>
> Phoenix has his very important space, Merlin/Fortress will have his.
> The more they can work together and in *synergy* the better.
>
>> We have an agreement a way forward for on the BlockContext issue. It
>> is simply to include the BlockContext class (via phoenix-client.jar)
>> in second and subsequent Phoenix compatible containers. Given
>> K/HC/CAPI conversation of the past, and the need for separation of
>> CAPI and K, GenericBlockContext in Phoenix CVS is the wrong solution,
>> I think we all agree that. Given also that the home for
>> GenericBlockContext is not certain (A-F is mooted above, but Phoenix
>> is where it was added). Given also that the content of
>> GenericBlockContext was nothing special - nothing that could not be
>> added to another kernel's CVS tree.
>>
>> My feeling is that this single issue is nothing to do with the
>> attributes thread. That attributes need to be handled correctly
>> designed properly and due consideration given to backards
>> compatability is paramount. Can multiple containers handle attribute
>> changes (well additions reeally) as they are rolled out? Yes, in my
>> opinion. Should attribute strings be added to BlockContext, yes in
>> my opinion.
>>
>> *** Vote ***
>> As such, can we vote on the recommendation :
>>
>> (*) The Avalon team recommends that Phoenix compatile container
>> include phoenix-client.jar in their distribution and make it visible
>> to hosted components at runtime. The Avalon team recommends that
>> Phoenix compatible containers hide their implementations of
>> BlockContext in the kernel's classloader and further hide the impl
>> via use of a Refelection's dynamic proxy.
>
>
> You are saying that a container that wants to use Phoenix-compatible
> Components use BlockContext?
>
> Hmmm..., rephrasing: that a Container that uses Phoenix's blocks must
> use other Phoenix stuff too?
>
> Now, since Cornerstone is about Phoenix blocks IIUC, does this mean
> that the Phoenix blocks are the standard Avalon Components?
>
> If yes, they should be in framework IMNSHO.
> If no, it should be clearly stated that they are Phoenix-only compatible.
>
> And compatibility should not be attained by wrapping Phoenix stuff
> artificially, but by hierarchically containing Phoenix, which is a
> much cleaner solution.
>
> I don't like your proposal.
>
>>>>> Look at the Servlet/EJB/other APIs. They all follow this pattern
>>>>> and I believe some (servlet API 2.1+) actually mandates that no
>>>>> container specific classes can be in same classloader.
>>>>
>>>>
>>>
>>> Such a policy concerning Avalon containers is also appropriate. In
>>> general we should not be exposing container specific APIs to
>>> components. It locks the component to a particular container and
>>> introduces the problems we are currently dealing with.
>>
>>
>> For Phoenix, given its separation of interface and impl, it is only
>> the word phoenix that is objectionable in the phoenix-client.jar and
>> its attendant package names. If we had our time over we could have
>> moved these classes to another tree/package. Like with othr packages
>> in Avalon, we are keeping there where they are for compatability
>> reasons. This line of discussion deviates from (*) above and its
>> central discussion point alternatives for GenericBlockContext (being
>> added to Phoenix CVS).
>
>
> So you are saying that the Phoenix BlockContext has to be regarded as
> the standard Container Context?
>
> This I understand, and I would like to see it become part of the
> containerkit somehow or of the framework if this is the case.
>
> Don't ask me why, it's obvious.
>
>>>>> And we don't want to limit our evolution in future for so little a
>>>>> gain as having a generic implementation. It is rare that the
>>>>> implementations are more than 20-30 lines of code, so I am not
>>>>> sure what the great technical difficulty is.
>>>>>
>>>> Err I agree with you Peter. The interface remains in
>>>> phoenix-client.jar and the impl is left to the container in
>>>> question. I think Stephen is coming round to the possibility of
>>>> that fact.
>>>
>>>
>>>
>>> I'm comming around to the conclusion that :
>>>
>>> 1. the first step is to resolve the context key issue
>>>
>>> - context keys are part of the Avalon component contract
>>> - contract are intended to be maintained
>>> - solving this issue has to be addressed as a higher
>>> priority than convinience interfaces, Phoenix fixes,
>>> or other actions such as defining additional
>>> interfaces
>>
>>
>>
>> I completely disagree. We have got so far on the GenericBlockContext
>> (the need for it in Phoenix CVS) issue. Please don't switch
>> conversational threads when we are on the cusp of an agreement.
>> Please let me tackle these issues one by one. I'll move on to
>> attributes, meta info and other issues in time. It is important for a
>> sense of progress during mediation to resolve an issue. Please try
>> to meet me on this simple goal Stephen. Just because this is against
>> you original posting of GenericBlockContext does not mean all things
>> in this process are going to fall against you. Besides, you see the
>> logic of the BlockContext argument don't you :-))
>
>
> I completely disagree.
>
> *If* I understand what you are saying that is...
>
> To be more clear, *what* are we discussing about?
>
> A temporary solution for interoperability between Phoenix and
> Merlin/Fortress or standard way of defining the Context?
>
> If it's the first case, I agree; this is the easiest solution ATM and
> the best given that Phoenix is mature while Merlin is still growing.
>
> If it's the second case, I really fail to understand how you think
> that all Containers must adopt Phoenix inventions.
>
> I thought they had to adopt the framework.
>
> IMHO this has come out from the fact that Phoenix has been defining
> (in a concerted effort) and bringing forward the concept of Blocks and
> SARs.
>
> These are becoming important concepts for Component reuse, and Peter
> is correctly working with ContainerKit for better reusability.
>
> Can we make this "spec" become more clearly defined and part of
> framework somehow?
This is primary purpose of establishing the excalibur/container package.
To iniate actions focussed on clearly defining the spec for container
to component contracts. Much of this is framework independent - you
think of the framework as the client side of the container/component
architecture. We don't have the container side of the Avalon
architecture. I would like that architecture to arrise as a result of
progressive solutions build through collaboration across different
containers. I don't want to see one view of a container architecture
(such as conterkit) being forced upon us. Instead, I want to see
inovation, well-defined contracts, documented semantics, .etc.
>
> Do I understand correctly that ContainerKit is Peter's tentative in
> that direction, and that Merlin is Stephen's?
More correctly ....
* containerkit is Pete's iniative to define a container architecture
* excalibur/meta is a small package that defines a meta-info model as
a seperate concern from a container architecture
* escalibur/container is the result of work between Fortress and
Merlin that has led to the establishment of a set of container
indepedent interfaces (currently the lifecycle extension interfaces),
together with documentation on specific issues and proposal dealing with
component portability (context keys, meta-info attributes, etc.).
* excalibur/assembly is the Merlin 2 container that uses the
excalibur/meta and excalibur/container resorouces
Cheers, Steve.
>
>
> I repeat myself, let's define the contracts and the boundaries well,
> and I humbly suggest you to also tackle the block and SAR think,
> because I think that they are valuable concepts that need to be
> integrated more at a lower level.
--
Stephen J. McConnell
OSM SARL
digital products for a global economy
mailto:[EMAIL PROTECTED]
http://www.osm.net
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>