Would you mind providing a minimal stand-alone piece of sample code reproducing the error?
Thanks -- Alexander Kriegisch https://scrum-master.de Yongle Zhang schrieb am 18.05.2018 04:03: > > > More information > > The part of the code that’s causing the exception - this is decompiled > from the woven .class file: > > public class TThreadPoolServer { > > public void serve() { > > . . . > > TThreadPoolServer.WorkerProcess var13; > > TThreadPoolServer.WorkerProcess var10000 = var13 = new > > TThreadPoolServer.WorkerProcess(client, (<undefinedtype>)var10); > > // The exception says here afterReturning throws the exception > > > > EpredRunnablesCallables.aspectOf().ajc$afterReturning$EpredRunnablesCallables$1$8a935d86(var13); > > . . . > > } > > // inner class > private class WorkerProcess implements Runnable, > InstrumentedRunnableCallable { > public long myid; // inserted by aspectj > > . . . > > } > > } > > > > Question: how does pertypewithin() work? what’s its scope? > > > For example, pertypewithin(Runnable+) - does it work every class in the > classpath, even including those in rt.jar? When does it create instance > for every class that implements Runnable (after class loading, on demand, > …)? > > Thank you! > > > On May 17, 2018 at 4:36:23 PM, Yongle Zhang (yng...@gmail.com > <mailto:yng...@gmail.com> ) wrote: >> >> >> Hi, >> >> Problem >> >> I have some aspects trying to insert an ID for every class that >> implements Runnable. >> >> My aspects (provided below) works fine for a simple test in which 1) I >> wrote my own MyRunnable class implementing Runnable, 2) I have a simple >> main function that creates and runs a thread using MyRunnable. >> >> However, when I use it to instrument apache thrift library, it gives me >> org.aspectj.lang.NoAspectBoundException exception. >> >> I use compile-time weaving. The compile-time weaving finishes >> successfully, and the instrumented .class code shows the aspects was >> woven. However, running the instrumented apache thrift lib gives this >> excetpion: >> >> (MyServer is my simple server implementation using thrift. >> TThreadPoolServer is the server class in apache thrift lib.) >> org.aspectj.lang.NoAspectBoundException >> at EpredPerRunnable.aspectOf(EpredPerRunnable.aj:1) >> at >> >> EpredRunnablesCallables.ajc$afterReturning$EpredRunnablesCallables$1$8a935d86(EpredRunnablesCallables.aj:55) >> at >> >> org.apache.thrift.server.TThreadPoolServer.serve(TThreadPoolServer.java:168) >> at MyServer.StartsimpleServer(MyServer.java:21) >> at MyServer.main(MyServer.java:28) >> >> >> >> My Aspects >> >> Here are the aspects I wrote: >> >> 1) I have a counter for each class implements Runnable using >> pertypewithin. >> privileged aspect PerRunnable >> pertypewithin(java.lang.Runnable+) >> { >> public long counter = 0; >> >> public long getCounter() { >> return counter; >> } >> >> public void incrementCounter() { >> counter++; >> } >> } >> >> >> >> 2) I insert an id into each class that implements Runnable using >> interface. >> privileged aspect MyRunnables { >> >> public interface InstrumentedRunnable {} >> >> private long InstrumentedRunnable.myid = -1; >> >> public long InstrumentedRunnable.getMyid() { >> return myid; >> } >> >> public void InstrumentedRunnable.setMyid(long id) { >> myid = id; >> } >> >> >> declare parents: (Runnable)+ implements InstrumentedRunnable; >> >> after() returning(InstrumentedRunnable r): >> call(java.lang.Runnable+.new(..)) { >> >> long id = PerRunnable.aspectOf(r.getClass()).getCounter(); >> r.setMyid(id); >> >> PerRunnable.aspectOf(r.getClass()).incrementCounter(); >> >> } >> >> } >> >> >> >> 3) Part of my scripts that only instruments thrift: >> CLASSPATH=$CLASSPATH:~/aspectj1.9/lib/aspectjtools.jar >> CLASSPATH=$CLASSPATH:~/aspectj1.9/lib/aspectjrt.jar >> AJC=~/aspectj1.9/bin/ajc >> >> echo "Compiling Aspects ..." >> $AJC -classpath $CLASSPATH:./lib/libthrift-0.11.0.jar -source 1.8 >> asp/*.aj >> >> echo "Weaving aspect into thrift lib..." >> $AJC -classpath >> $CLASSPATH:./lib/servlet-api-2.5.jar:./lib/httpcore-4.4.1.jar:./lib/slf4j-api-1.7.12.jar:./lib/httpclient-4.4.1.jar >> -source 1.8 -inpath ./lib/libthrift-0.11.0.jar -aspectpath ./asp/ -outjar >> ./my-libthrift-0.11.0.jar >> >> >> >> >> 4) Part of my scripts that starts the thrift server: >> CLASSPATH=$CLASSPATH:~/aspectj1.9/lib/aspectjtools.jar >> CLASSPATH=$CLASSPATH:~/aspectj1.9/lib/aspectjrt.jar >> >> java -cp >> $CLASSPATH:./asp:./my-add-server.jar:./my-libthrift-0.11.0.jar:./lib/slf4j-api-1.7.12.jar >> MyServer >> >> >> >> Need Help >> >> Has anyone met such problem before? Any guess? Note that these aspects >> works for my own Runnable but not for thrift lib. (I can send more code >> needed including my test classes and my scripts, but they don’t fit >> within an email…) >> Is there a way to get all aspect instances and what they are matched to >> at runtime? >> Does aspectj has this feature: given 1) a pointcut, 2) the signature of >> a target (class/method) I want the pointcut to match, tell me whether >> they matched, and if not why. >> >> >> Thank you for your time and help! >> >> _______________________________________________ aspectj-users mailing list aspectj-users@eclipse.org To change your delivery options, retrieve your password, or unsubscribe from this list, visit https://dev.eclipse.org/mailman/listinfo/aspectj-users