Hi Andy, thanks for the fast reposnse. I will raise a bugzille on monday. I am within a spring context where prototype beans are loaded via an ObjectFactory bean. The exception mainly occurs on the first request after starting the server and the system is under load.
Thorsten -------- Original-Nachricht -------- > Datum: Fri, 18 Feb 2011 15:55:04 -0800 > Von: Andy Clement <[email protected]> > An: [email protected] > Betreff: Re: [aspectj-users] Creation of parameterized ReferenceType not > thread safe > Hi Thorsten, > > Looks like a bug. Can you raise a bugzilla? My opening position > would be that the AspectJ weaver is a single threaded thing. But I > know ReflectionWorlds are used in instances other than just regular > weaving (for example, in a spring setup) - are you in Spring by any > chance when you see this issue? > > cheers > Andy > > On 18 February 2011 01:45, Gast, Thorsten <[email protected]> > wrote: > > Hi, > > > > I am currently struggling with an IndexOutOfBoundsException deep in > aspectj. > > > > at java.util.ArrayList.add(ArrayList.java:352) > > at > org.aspectj.weaver.ReferenceType.addDependentType(ReferenceType.java:115) > > at > org.aspectj.weaver.ReferenceType.<init>(ReferenceType.java:95) > > at > org.aspectj.weaver.TypeFactory.createParameterizedType(TypeFactory.java:43) > > > > After taking a deeper look into the code, I found out that the usage of > TypeFactory.createParameterizedType() and in particular the instantiation > of ReferenceType (line 43 of TypeFactory) is not thread safe. In a short > program (see below) I could reproduce this issue, when passing the same > instance of ResolvedType. > > > > Is this a bug, or should this not happen when aspectj is used in a > proper way? > > > > Regards > > > > Thorsten > > > > > > --- sample program start --- > > import java.util.concurrent.CountDownLatch; > > > > import org.aspectj.weaver.ReferenceType; > > import org.aspectj.weaver.ResolvedType; > > import org.aspectj.weaver.TypeFactory; > > import org.aspectj.weaver.World; > > import > org.aspectj.weaver.reflect.Java15ReflectionBasedReferenceTypeDelegate; > > import org.aspectj.weaver.reflect.ReflectionWorld; > > > > public class Aspectj { > > > > public static void main(String[] args) { > > new Aspectj(); > > } > > > > static World inAWorld = new > ReflectionWorld(Aspectj.class.getClassLoader()); > > > > static ReferenceType aBaseType; > > static { > > aBaseType = new ReferenceType("test", inAWorld); > > Java15ReflectionBasedReferenceTypeDelegate delegate = new > Java15ReflectionBasedReferenceTypeDelegate(); > > delegate.initialize(aBaseType, String.class, > Aspectj.class.getClassLoader(), inAWorld); > > aBaseType.setDelegate(delegate); > > } > > > > public Aspectj() { > > int N = 25; > > CountDownLatch startSignal = new CountDownLatch(1); > > CountDownLatch doneSignal = new CountDownLatch(N); > > > > for (int i = 0; i < N; ++i) > > new Thread(new Worker(startSignal, > doneSignal)).start(); > > > > startSignal.countDown(); > > try { > > doneSignal.await(); > > } catch (InterruptedException e){ > > e.printStackTrace(); > > } > > } > > > > class Worker implements Runnable { > > private final CountDownLatch startSignal; > > private final CountDownLatch doneSignal; > > > > Worker(CountDownLatch startSignal, CountDownLatch doneSignal) > { > > this.startSignal = startSignal; > > this.doneSignal = doneSignal; > > } > > > > public void run() { > > try { > > startSignal.await(); > > doWork(); > > doneSignal.countDown(); > > } catch (InterruptedException ex) { > > ex.printStackTrace(); > > } > > } > > > > void doWork() { > > for (int i = 0; i < 10; i++) { > > // using TypeFactory > > TypeFactory.createParameterizedType(aBaseType, > new ResolvedType[0], inAWorld); > > > > // or creating ReferenceTypes directly > > //new ReferenceType(aBaseType, new > ResolvedType[0], inAWorld); > > } > > } > > } > > > > } > > --- sample program end --- > > > > _______________________________________________ > > aspectj-users mailing list > > [email protected] > > https://dev.eclipse.org/mailman/listinfo/aspectj-users > > > _______________________________________________ > aspectj-users mailing list > [email protected] > https://dev.eclipse.org/mailman/listinfo/aspectj-users -- Schon gehört? GMX hat einen genialen Phishing-Filter in die Toolbar eingebaut! http://www.gmx.net/de/go/toolbar _______________________________________________ aspectj-users mailing list [email protected] https://dev.eclipse.org/mailman/listinfo/aspectj-users
