Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
RE: [aspectj-users] Aspect.aspectOf() behaviour

Ive realised that I hadnt explained myself properly. My definition of
configuration wasn't clear, I actually meant dynamic runtime configuration
where the config is particular to the target..... We have a case where we
obtain a reference to a proxy weaved remote object. As part of marshalling
this object needs its remote aspect to be configured with the connection
details. We also configure it (aspects) with other runtime gathered
information, like throttling, distribution patterns, scoring etc. From that
point on the object/aspect stack can self tune its behavious, however it
needs initial seed information in order for it to work. So as you can see in
this particular scenario, the configuration pertains to a single (per)
object where the data it is being configured with is runtime based.

Ive managed to come up with a 'workaround' to the problem which is to
intercept toString() as this is something that will shouldn't be remotable
or take place in the aspect stack but can be interceptable to display the
runtime config information. The ideal scenario would be:

Object objectFromNetwork = deserailize(stuff);
RemoteAspect asepct = objectFromNetwork(RemotAspect.class,
objectFromNetwork);
Aspect.setConectionInformation(some value);
Aspect.Stuff(some other value);

Another reason we need to configure this aspect is because its not
serialized as part of the object graph, although from previous conversations
Ive has you have mentioned this may be a configurable property. We also
integrate with JBoss AOP and they don't serialize the aspect/container...
Cheers Neil.

-----Original Message-----
From: aspectj-users-bounces@xxxxxxxxxxx
[mailto:aspectj-users-bounces@xxxxxxxxxxx] On Behalf Of Alexandru Popescu
Sent: 18 October 2005 22:54
To: aspectj-users@xxxxxxxxxxx
Subject: Re: [aspectj-users] Aspect.aspectOf() behaviour


I cannot see a reason for creating a perClause aspect before the first
invocation that occurs on itself. This is the whole reasoning behind
perClause aspects. Probably an excellent feature would be to allow providing
your custom aspect factory (unfortunately I am not sure if this exists
already in AJ and iirc this was provided in AW).

my 2c,

./alex
--
.w( the_mindstorm )p.


On 10/18/05, AVERY, Neil, FM <Neil.AVERY@xxxxxxxx> wrote:
> Ill go through the blog and see what we can come up with. Using a 
> perInstance perClause is a given for our desgin and of yes course 
> affects lazyloading... Thanks for the link,
> Neil.
>
> -----Original Message-----
> From: aspectj-users-bounces@xxxxxxxxxxx 
> [mailto:aspectj-users-bounces@xxxxxxxxxxx] On Behalf Of Alexandre 
> Vasseur
> Sent: 18 October 2005 10:31
> To: aspectj-users@xxxxxxxxxxx
> Subject: Re: [aspectj-users] Aspect.aspectOf() behaviour
>
>
> this is not about lazy loading
> this is about perClause.
>
> perClause controls the points where the aspect(s) is/are instantiated. 
> This can be singleton, per target / this, per cflow, per cflow below. 
> All except singleton requires a pointcut that will control when the 
> aspect is bound and possibly unbound (per cflow / per cflow below). 
> AspectJ 1.5 introduced per type as well.
>
> That said, this is true, the current AspectJ weaver will not 
> instantiate f.e. a singleton aspect prior it is used (ie one of its 
> advice gets executed). I don't think that this affects your design 
> though.
>
> If you have a need for controlling the aspect configuration, you 
> should look at Adrian Colyer blog. He describes a way to do IoC into 
> the aspect thru Spring. 
> http://www.aspectprogrammer.org/blogs/adrian/2005/03/hacking_with_ha.h
> tml
>
> Alex
>
>
> On 10/18/05, AVERY, Neil, FM <Neil.AVERY@xxxxxxxx> wrote:
> > Hi Alex,
> > Ive thought more about the Aspects.aspectOf behaviour..The problem 
> > with lazy loading/weaving of aspects is that we cannot grab them 
> > from the target instance and configure them (perInstance). Our app 
> > relies on our container being able to configure aspects before the 
> > component is made available for use. However, if lazy loading is 
> > applied, then the component must be used
> > (invoked) before the aspect is available and therefore there is no 
> > chance for us to configure the behaviour on the aspect. Putting in a 
> > stub, 'noop' method is a bit of a hack.
> >
> > I can see the case for lazy loading of aspects (like performance) 
> > but there are also the drawbacks such as our situation where runtime 
> > configuration of the aspect is required. Granted we don't do it 
> > much, but it is functionality we require. When considering tools 
> > like hibernate - lazyloading should be disabled when you want to 
> > keep objects in a secondary level cache, the behaviour is 
> > configurable depending upon how the object is used. Or spring where 
> > - lazy-init is not the default (faster startup etc), but in both 
> > cases the behaviour is configurable to allow for the semantics of 
> > those objects to be correctly controlled.
> >
> > Is there any chance of making aspect lazy loading configurable - or 
> > having any lookup request for an aspect cause weaving to take place?
> >
> > Cheers Neil.
> >
> > -----Original Message-----
> > From: aspectj-users-bounces@xxxxxxxxxxx 
> > [mailto:aspectj-users-bounces@xxxxxxxxxxx] On Behalf Of Alexandre 
> > Vasseur
> > Sent: 17 October 2005 15:16
> > To: aspectj-users@xxxxxxxxxxx
> > Subject: Re: [aspectj-users] Aspect.aspectOf() behaviour
> >
> >
> > yes it still apply
> > for such a thing I think you need a facade aspect with your own map 
> > instance(target and/or this) -> aspect instance Alex
> >
> > On 10/17/05, AVERY, Neil, FM <Neil.AVERY@xxxxxxxx> wrote:
> > >
> > > (Sorry Alex - this was sent to the wrong mailing list) - does the 
> > > same still apply? We are using the latest stable aspectJ build
> > > (20051015) -Neil
> > >
> > > -----Original Message-----
> > > From: AVERY, Neil, FM
> > > Sent: 17 October 2005 14:24
> > > To: 'user@xxxxxxxxxxxxxxxxxxxxxxxx'
> > > Subject: Aspect.aspectOf() behaviour
> > >
> > >
> > > All,
> > > If I apply a 'perTarget' Aspect to a object and call 
> > > Aspects.aspectOf(SimpleAroundAspect.class, testClass) then I get 
> > > an exception, NoAspectBound...(see below)
> > >
> > > However, if a prior invocation has occured then 
> > > Aspects.aspectOf(..) will return the Aspect that was bound....
> > >
> > > Ideally I would like to get access to an aspect bound to the 
> > > object instance regardless of whether or not it has been invoked. 
> > > Is it possible to determine/control the behaviour as its the kind 
> > > of thing that will affect component lifecycle when interacting 
> > > with aspects...?
> > >
> > > Cheers Neil.
> > >
> > > TEST:
> > >  public void testDifferendAspectInstanceGetsApplied()
> > > throws Exception {
> > >
> > >   TestClass testClass = new TestClass();
> > > >>>//  testClass.doStuff();
> > >
> > >   Object aspect1 = Aspects.aspectOf(SimpleAroundAspect.class,
> > > testClass);  } }
> > > THROWS:
> > > org.aspectj.lang.NoAspectBoundException: Exception while 
> > > initializing org.stuff.SimpleAroundAspect: 
> > > java.lang.reflect.InvocationTargetException
> > >  at org.aspectj.lang.Aspects.aspectOf(Aspects.java:66)
> > >  at
> > >
> > org.stuff.aspectof.SimpleAspectTest.testDifferendAspectInstanceGetsA
> > pp
> > lied(S
> > impleAspectTest.java:27)
> > >  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
> > > Method)
> > >  at
> > >
> > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl
> > .j
> > ava:39
> > )
> > >  at
> > >
> > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcce
> > ss
> > orImpl
> > .java:25)
> > >  at java.lang.reflect.Method.invoke(Method.java:585)
> > >  at junit.framework.TestCase.runTest(TestCase.java:154)
> > >  at junit.framework.TestCase.runBare(TestCase.java:127)
> > >  at
> > > junit.framework.TestResult$1.protect(TestResult.java:106)
> > >  at
> > > junit.framework.TestResult.runProtected(TestResult.java:124)
> > >  at junit.framework.TestResult.run(TestResult.java:109)
> > >  at junit.framework.TestCase.run(TestCase.java:118)
> > >  at
> > >
> > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(Remo
> > te
> > TestRu
> > nner.java:478)
> > >  at
> > >
> > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTes
> > tR
> > unner.
> > java:344)
> > >  at
> > >
> > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTe
> > st
> > Runner
> > .java:196)
> > > Caused by: java.lang.reflect.InvocationTargetException
> > >  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
> > > Method)
> > >  at
> > >
> > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl
> > .j
> > ava:39
> > )
> > >  at
> > >
> > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcce
> > ss
> > orImpl
> > .java:25)
> > >  at java.lang.reflect.Method.invoke(Method.java:585)
> > >  at org.aspectj.lang.Aspects.aspectOf(Aspects.java:63)
> > >  ... 14 more
> > > Caused by: org.aspectj.lang.NoAspectBoundException
> > >  at
> > > org.stuff.SimpleAroundAspect.aspectOf(SimpleAroundAspect.java:1)
> > >  ... 19 more
> > >
> > > ASPECT:
> > > package org.stuff;
> > >
> > > import org.aspectj.lang.ProceedingJoinPoint;
> > > import org.aspectj.lang.annotation.*;
> > >
> > > @Aspect("pertarget(call(* org.stuff.TestClass.*(..)))") public 
> > > class SimpleAroundAspect {  public static int callCount = 0;
> > >
> > >   @Around("call(* org.stuff.TestClass.*(..))")
> > >   public Object invoke(ProceedingJoinPoint thisJoinPoint) throws 
> > > Throwable {
> > >
> > >    System.err.println("called onto SimpleAroundAspect count:" +
> > > callCount++);
> > >    return thisJoinPoint.proceed();
> > >   };
> > > }
> > >
> > >
> > >
> > >
> > >
> > >
> > > ******************************************************************
> > > **
> > > **
> > > *************
> > >  The Royal Bank of Scotland plc. Registered in Scotland No 90312.
> > Registered
> > > Office: 36 St Andrew Square, Edinburgh EH2 2YB.  Authorised and 
> > > regulated by the Financial Services Authority
> > >
> > >  This e-mail message is confidential and for use by the  addressee 
> > > only. If the message is received by anyone other  than the 
> > > addressee, please return the message to the sender  by replying to 
> > > it and then delete the message from your  computer. Internet 
> > > e-mails are not necessarily secure. The  Royal Bank of Scotland 
> > > plc does not accept responsibility for  changes made to this 
> > > message after it was sent.
> > >
> > >  Whilst all reasonable care has been taken to avoid the 
> > > transmission of viruses, it is the responsibility of the recipient 
> > > to  ensure that the onward transmission, opening or use of this 
> > > message and any attachments will not adversely affect its  systems 
> > > or data. No responsibility is accepted by The Royal  Bank of 
> > > Scotland plc in this regard and the recipient should carry  out 
> > > such virus and other checks as it considers appropriate.  Visit 
> > > our websites at:  http://www.rbs.co.uk/CBFM  
> > > http://www.rbsmarkets.com
> > >
> > ********************************************************************
> > **
> > ******
> > ****
> > >
> > > _______________________________________________
> > > aspectj-users mailing list
> > > aspectj-users@xxxxxxxxxxx 
> > > https://dev.eclipse.org/mailman/listinfo/aspectj-users
> > >
> > >
> > >
> > >
> > _______________________________________________
> > aspectj-users mailing list
> > aspectj-users@xxxxxxxxxxx 
> > https://dev.eclipse.org/mailman/listinfo/aspectj-users
> > _______________________________________________
> > aspectj-users mailing list
> > aspectj-users@xxxxxxxxxxx 
> > https://dev.eclipse.org/mailman/listinfo/aspectj-users
> >
> _______________________________________________
> aspectj-users mailing list
> aspectj-users@xxxxxxxxxxx 
> https://dev.eclipse.org/mailman/listinfo/aspectj-users
> _______________________________________________
> aspectj-users mailing list
> aspectj-users@xxxxxxxxxxx 
> https://dev.eclipse.org/mailman/listinfo/aspectj-users
>
_______________________________________________
aspectj-users mailing list
aspectj-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/aspectj-users


Back to the top