How about compile-time weaving aspects and (de-)activating them using if() pointcuts? Try not to overcomplicate your setup, keep it simple.
Alexander Kriegisch Am 08.04.2013 um 17:45 schrieb Eric Chatellier <chatell...@codelutin.com>: > Le 05/04/2013 11:15, Alexander Kriegisch a écrit : >> Check out >> http://www.eclipse.org/aspectj/doc/next/weaver-api/org/aspectj/weaver/loadtime/WeavingURLClassLoader.html. >> >> Here is a little old code snippet I found in one of my projects when I >> implemented a plug-in concept in which I had the aspect code in my main >> project, but wanted to advise plugin JARs which were loaded on demand. Feel >> free to modify it according to your needs: >> >> private void loadPlugin(String pluginJar, String pluginClassName) throws >> Exception { >> echo("Trying to load plugin JAR " + pluginJar); >> ClassLoader loader = Thread.currentThread().getContextClassLoader(); >> WeavingURLClassLoader weaver = new WeavingURLClassLoader( >> new URL[] { new File(pluginJar).toURI().toURL() }, >> new URL[] { loader.getResource(".") }, >> loader >> ); >> Class<?> pluginClass = weaver.loadClass(pluginClassName); >> Plugin plugin = (Plugin) pluginClass.newInstance(); >> plugin.init(this); >> plugins.add(plugin); >> echo("Successfully loaded and initialised plugin '" + >> plugin.getName() + "'"); >> } > Hi, and thanks for the answer. > > But i had already seen this code and it doesn't fits our needs > In fact: > - two annotated aspects are present in the project, but not in separate jars > - aspect can't dynamically added at runtime depending on user configuration > (cache, log, time aspects). > > I succeeded tweaking some portion of the code and using ugly introspective > code to bypass aspectj final or private modifier (aspectj uses a little bit of > defensive code). > > The code currently looks like: > > AspectJUrlClassLoader loader = new AspectJUrlClassLoader(urls, parentLoader); > thread.setContextClassLoader(loader); > if (parameters.getUseTrace()) { > loader.deploy(TraceAspect.class); > } > if (parameters.getUseCache()) { > loader.deploy(CacheAspect.class); > } > if (parameters.getUseTime()) { > loader.deploy(TimeAspect.class); > } > loader.prepareForWeave(); > thread.start(); > > Then every class loaded from this new class loader is automatically weaved > if needed depending of registered aspects. > > I have committed my current code here: > http://forge.codelutin.com/projects/isis-fish/repository/revisions/3822/show/branches/4.0.1/src/main/java/fr/ifremer/isisfish/aspect > > Is it an approach that could be introduced into aspectj ? > > -- > Éric Chatellier - Code Lutin > Tel: 02.40.50.29.28 - http://www.codelutin.com > > _______________________________________________ > 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