Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Language IDEs » AJDT » Multiple instances of the same class woven against different aspects in an Eclipse plugin [Cross-pos
Multiple instances of the same class woven against different aspects in an Eclipse plugin [Cross-pos [message #57996] Fri, 28 October 2005 09:36
Didier Villevalois is currently offline Didier Villevalois
Messages: 86
Registered: July 2009
Member
Hello,

[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 =
loader.loadClass("org.beuz.lib.aspect1.TestClass");

try
{
Constructor constructor = testClass.getConstructor(new
Class[] {});
return (TestInterface) constructor.newInstance();
}
catch (Exception e)
{
// Should note occur
e.printStackTrace();
}
return null;
}

private static ClassLoader createClassLoader(URL[] aspectURLs,
ClassLoader parent)
{
if (parent == null)
{
parent = TestClassFactory.class.getClassLoader();
}
return new MyWeavingClassLoader(aspectURLs, parent);
}

private static class MyWeavingClassLoader extends WeavingURLClassLoader
{
public MyWeavingClassLoader(URL[] aspectURLs, ClassLoader parent)
{
super(parent);
m_aspectURLs = aspectURLs;

}

private URL[] m_aspectURLs;

@Override
public URL[] getAspectURLs()
{
return m_aspectURLs;
}
}
}

Does someone knows how to do this ?

I can send my test with three minimal plugins if someone wants.

Thanks for your help,
Didier
Previous Topic:Capturing annotations
Next Topic:org.aspectj.ajdt.core.prefs file and environment variables expansion
Goto Forum:
  


Current Time: Wed Jul 23 04:10:52 EDT 2014

Powered by FUDForum. Page generated in 0.03145 seconds