You could do something along the following lines:
1. In your before advice read destructively as needed and store away the
result 'env' in a ThreadLocal.
2. Advise ctx.getNextIncoming() with an around advice to return the stored
result (and don't call proceed() in it).

-Ramnivas

On Mon, Jan 31, 2011 at 2:59 PM, Grey, Lee <lee.g...@ncr.com> wrote:

>  I've been working on intercepting the service() method invocation in a
> Sonic ESB container.  I had just started to write my before() advice when
> the bad news dawned on me.  Just about every ESB service() method starts
> with the following...
>
>    public void service(XQServiceContext ctx) throws XQServiceException {
>         XQEnvelope env = null;
>         while (ctx.hasNextIncoming()) {
>             env = ctx.getNextIncoming();
>             if (env != null) {
>                 XQMessage msg = env.getMessage();
> That call to ctx.getNextIncoming() is a destructive read that returns a
> different XQEnvelope every time it's called.  The problem is that I need to
> evaluate the contents of the message that comes from ctx.getNextIncoming()
> in my before() advice.  What that means is that the call to
> ctx.getNextIncoming() in the service() method is not going to get the
> message, because the before() advice already got it.
>
> Now I'm wondering if there's a way to put an aspect around
> ctx.getNextIncoming() to make it deliver the message again.  Or if I can
> somehow clone ctx so that I can read the cloned message in before() and then
> read it from the real XQServiceContext object in service().
> XQServiceContext doesn't offer any way to peek or browse, and it doesn't
> have a method to put a message, either.
>
> I would imagine I'm not the first person to run into this kind of issue
> with AOP before.  I'm hoping that there's a pattern to address it.
>
> Thanks,
> Lee Grey
>
> _______________________________________________
> aspectj-users mailing list
> aspectj-users@eclipse.org
> https://dev.eclipse.org/mailman/listinfo/aspectj-users
>
>
_______________________________________________
aspectj-users mailing list
aspectj-users@eclipse.org
https://dev.eclipse.org/mailman/listinfo/aspectj-users

Reply via email to