Hi all,
coming from JavaZone in Oslo, I got very inspired by the talk that Rickard Öberg was 
giving on his AOP thoughts and his own AOP framework.

Basically, he has removed all methods and interfaces from Objects and introduces all 
logic with Introduction Aspects on the objects at runtime.

The objects are just dumb things that only provide a placeholder for the attachement 
of Aspects that take over the implementation of all the interfaces that might be used 
from other objects.

Any group of functionality is defined by an interface, much like in Avalon/Merlin. But 
the implementaion is not provided in the ojbect but in Aspects, so even the 
implementation becomes reusable over different classes needing that funcitonality.

There are different scenarios:

1) the Object declares the function groups compile time:
public abstract Person implements Nameable 
{
}
and the aspect will be attached that implements NameableService with getName() via a 
query language (point cuts etc.).

2) at runtime, the Person object wants to act like a Startable, so the aspect is 
introduced first then (kind of lazy loading).


As I see it, Merlin has or could have all the elements that would allow a similar 
functionality to work on Containers/Components. I guess the instrumented elements 
would be containers that in the future act exacly like components (as Stephen 
suggested) with Container configuration, container context, parameters etc.

I'm thinking of such scenarios as:

- the declaration of (non-overlapping of course) multiple services at Container level 
that could either be routed to another component/container or inserted at 
assembly/runtime via a query language on the Dpeloyment model or resolved 
automatically as it is now via automatic insertion of dependencies

- adding/changing of new functionality on Containers via the same mechanism (basically 
changing the dependencies of a component at runtime)

- In addition to the class-level AOP, container-based AOP could even route 
functionality on a aper-method level to other components with the same approach.

- the introduction of a query language for the Deployment model (a la 
OGNL/SQL/OQL/AspectJ etc) for the traversal, selection of models and:
    - change of their dpendencies
    - load/unload
    - route dependencies etc. etc. 


I could think of a model like:

<container name="Dynamic">
        <service type="Nameable">
                <getName source="persistenceService">
                <setname source="setNameStore2">
        </service>
        <service type="Startable" source="StartStopComponent">
        <service type="Executable"/>  //will be looked up via static AOP at assembly 
time, see below, or simply as a container-dep via the dependency resolution
        <service type="AnotherService"> //will be resolved at dynamically at 
assembly/runtime
        
        <container name="pesistenceService">
                <service type="Nameable" source="nameStore1">
                <component name="nameStore1"..../>
        </container>
        <component name="StartStopComponent"..../>
        <component name="ExecutableComponent"..../>
        <component name="NameStore2"..../>
        <staticAOP>
                <cuttingInstruction>
                        <cut>
                                <path="/Dynamic.Exceutable.*" 
source="ExcecutableComponent" serviceLifecycle="transient">
                        </cut>
                </cuttingInstruction>
        </staticAOP>
</container>


Rickard was suggsting that the full migration to AOP-based programming can replace the 
OO-approach. Of course, the tooling is not there and there are no patterns/practices 
etc. for the granularity of concerns (e.g. the granularity of the interfaces), but 
that's a thing that the avalon community has delt with for a long time.
What that would mean is that all Merlin will have an approach to AOP or at least SoC 
that is Component-based, has at least the same strength as AOP and a few advantages:

- the smallest parts ar Components, e.g. stackable, distributable, self describing, 
repository-awareness, Ioc etc., so alal Merlin benefits kick in.
- no bytecode/JVM/mixin magic required
- coming closer to taking the whole programming model for complex applications one 
step up from classes to Components by providing suport for the two major modern 
programming paradigms at component level: OOP and AOP/SOC


Im not quite sure what more the implications/benefits are, but it souded cool to be 
able to at least balance the programming logic between OOP and AOP.

Just some random thoughts.

Wdyt?


/peter

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to