|[equinox-dev] Re: [NEWSDELIVER] Multiple instances of the same class woven against different aspects in an Eclipse plugin [Cross-post]|
Subject: [NEWSDELIVER] Multiple instances of the same class woven against different aspects in an Eclipse plugin [Cross-post]
[Sorry, i cross-posted this in eclipse.technology.aspectj,
eclipse.technology.ajdt, eclipse.technology.equinox because i did not
know exactely who could answer this.]
I try to write an RCP app in which i need multiple instances of the same
classes woven against different aspects.
I don't know how classloading works into the Eclipse OSGi runtime and i
did not find any articles about it on the web.
I tried to use the org.aspectj.weawer.loadtime.WeavingURLClassLoader
provided with AspectJ5 but i can't succeed making it to work inside a
plugin. It seems that my class is already loaded by a parent classloader
(the one of the plugin maybe).
I took care no other reference is made to the classes to weave. I just
refer to those classes via the reflective API via my weaving classloader
like this :
public class TestClassFactory
public static TestInterface newTestClass(URL aspectURLs,
ClassLoader parent) throws ClassNotFoundException
ClassLoader loader = createClassLoader(aspectURLs, parent);
Class testClass =
Constructor constructor = testClass.getConstructor(new
return (TestInterface) constructor.newInstance();
catch (Exception e)
// Should note occur
private static ClassLoader createClassLoader(URL aspectURLs,
if (parent == null)
parent = TestClassFactory.class.getClassLoader();
return new MyWeavingClassLoader(aspectURLs, parent);
private static class MyWeavingClassLoader extends WeavingURLClassLoader
public MyWeavingClassLoader(URL aspectURLs, ClassLoader parent)
m_aspectURLs = aspectURLs;
private URL m_aspectURLs;
public URL getAspectURLs()
Does someone knows how to do this ?
I can send my test with three minimal plugins if someone wants.
Thanks for your help,