This is VERY flexible ! And tricky too.

Thanks a lot for your time :)

*---------------------*
*Muhammad Gelbana*
http://eg.linkedin.com/in/mgelbana/


On Mon, Sep 30, 2013 at 1:41 PM, Thiago H de Paula Figueiredo <
thiag...@gmail.com> wrote:

> Hello, Muhammad!
>
>
> On Sat, 28 Sep 2013 07:37:37 -0300, Muhammad Gelbana <m.gelb...@gmail.com>
> wrote:
>
>  The last paragraph on that
>> page<http://tapestry.apache.**org/service-advisors.html<http://tapestry.apache.org/service-advisors.html>
>> >,
>> states the following:
>>
>> *If you do, decoration take precedence; all decorators will be in effect
>>
>>> before any advice (internally, they are two separate steps, with advice
>>> being processed and the result of that used by the decorators).*
>>>
>>
>>
>> At first, it states that decoration take precedence, then it states that
>> internally, the advice is applied and the results is passed to the
>> decorator.
>>
>> Is this paragraph contradicting it self ?
>>
>
> It's a hard to understand paragraph, maybe because the concept itself is a
> little hard to understand at first. When I first read it, I thought there
> was a contradiction, but then I thought again, a light bulb appeared over
> my head and I realized it does make sense.
>
> If you have a decorator D and an advice A on service D on method m (not
> tested):
>
> public interface S {
>         int a(int parameter);
> }
>
> public class Implementation implements S {
>         public int m(int parameter) {
>                 System.out.println("S.m: " + parameter);
>                 return parameter;
>         }
> }
>
> public class D implements S {
>         final private S delegate;
>         public D(S delegate) {
>                 this.delegate = delegate;
>         }
>         public int m(int parameter) {
>                 System.out.println("D.m");
>                 int result = delegate.m(parameter);
>                 System.out.println("D.m: result: " + result);
>         }
> }
>
> public class Advice implements MethodAdvice {
>         public void advice(MethodInvocation invocation) {
>                 System.out.println("A.m");
>                 // calls the advised method
>                 invocation.proceed();
>                 // let's change the result value
>                 int result = invocation.getReturnValue();
>                 System.out.println("A.m: result:" + result);
>                 invocation.setReturnValue(**result * 2);
>         }
> }
>
> If we call S.a(1), the output would be this:
>
> D.m
> A.m
> S.m: 1
> A.m: result: 1
> D.m: result: 2
>
> The key concept here is that both service decoration and advice allow you
> to add code *both* before *and* after the decorated or advised original
> method. So the decorator takes precedence and its code is run before the
> advice *and* after the advice.
>
> --
> Thiago H. de Paula Figueiredo
>
> ------------------------------**------------------------------**---------
> To unsubscribe, e-mail: 
> users-unsubscribe@tapestry.**apache.org<users-unsubscr...@tapestry.apache.org>
> For additional commands, e-mail: users-h...@tapestry.apache.org
>
>

Reply via email to