Hi Andy, thanks for the fix. We will have a look at this.
Shall I still open a bug for this, or is it done from your side? Just give a short note. Btw: Is there a nightly release or similar, which I can test in my environment? Regards Thorsten -------- Original-Nachricht -------- > Datum: Mon, 21 Feb 2011 12:58:21 -0800 > Von: Andy Clement <andrew.clem...@gmail.com> > An: aspectj-users@eclipse.org > Betreff: Re: [aspectj-users] Creation of parameterized ReferenceType not > thread safe > Hi Thorsten, > > Just to say I've committed some synchronization to alleviate this > problem. A further thing I was concerned about was multiple threads > attempting type resolution on the same world, as that could lead to > two entries for the same type in the world (not ideal). So I've also > put some synchronization code around resolution when it is building a > type. All the AspectJ tests pass but I have to admit I don't have any > tests that exercise multiple threads playing around with one world. > > Andy > > On 19 February 2011 02:41, Thorsten Gast <gast...@gmx.de> wrote: > > 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 <andrew.clem...@gmail.com> > >> An: aspectj-users@eclipse.org > >> 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 <thorsten.g...@wirecard.com> > >> 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 > >> > 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 > > > > -- > > Schon gehört? GMX hat einen genialen Phishing-Filter in die > > Toolbar eingebaut! http://www.gmx.net/de/go/toolbar > > _______________________________________________ > > 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 -- Empfehlen Sie GMX DSL Ihren Freunden und Bekannten und wir belohnen Sie mit bis zu 50,- Euro! https://freundschaftswerbung.gmx.de _______________________________________________ aspectj-users mailing list aspectj-users@eclipse.org https://dev.eclipse.org/mailman/listinfo/aspectj-users