No, it isn't. Putting them into the
WEB-INF\lib folder could produce version conflicts by using newer versions of existing
jar. Additionally I want to load the jars from an external maven repository without
installing them locally.
-----Ursprüngliche Nachricht-----
Von: users [mailto:users-bounces@xwiki.org] Im Auftrag von Thomas
Mortagne
Gesendet: Mittwoch, 9. Juli 2014 15:02
An: XWiki Users
Betreff: Re: [xwiki-users] exchanging the ScriptMacro ClassLoader
Installing those extensions instead of passing them in the macro is not an option ?
On Wed, Jul 9, 2014 at 2:39 PM, Summer, Roman <Roman.Summer(a)de-gmbh.com> wrote:
Hi,
the exact goal is to load a list of maven artifacts and their dependencies inside of a
the groovy macro, to have access to the classes of the belonging jar files.
Using an URLStreamHandler means, I can only load one jar URL per artifact but I want to
load multiple jar URLs per maven artifact (the dependencies of the artifact).
Currently I created an delegating class loader (inside of an extended groovy macro) which
loads these maven artifacts. This works, but it produces a memory leak, because the
creaded AttachmentClassLoader is stored inside of the execution context. So the classes
are loaded each time the macro is loaded. Therefore I look for an alternative way to load
these URLs.
I hope you can help me?
Roman
-----Ursprüngliche Nachricht-----
Von: users [mailto:users-bounces@xwiki.org] Im Auftrag von Thomas
Mortagne
Gesendet: Dienstag, 8. Juli 2014 16:02
An: XWiki Users
Betreff: Re: [xwiki-users] exchanging the ScriptMacro ClassLoader
On Tue, Jul 8, 2014 at 1:35 PM, Summer, Roman <Roman.Summer(a)de-gmbh.com> wrote:
Hi,
while I tried to implement the org.xwiki.classloader.ExtendedURLStreamHandler in the
described way I recognized some problems:
- First, the class
org.xwiki.rendering.internal.macro.script.ScriptClassLoaderHandlerListener uses the
org.xwiki.rendering.internal.macro.script.AttachmentClassLoaderFactory which only
constructs AttachmentClassLoaders which uses
org.xwiki.classloader.internal.protocol.attachmentjar.AttachmentURLStreamHandler. Last one
cannot be exchanged.
In the current implementation this is no problem because the ScriptMacro only supports
the protocol “attach” and the URL Format itself. The AttachmentURLStreamHandler can handle
this.
I think the Used ClassLoaderFactory should automatically get the right Class Loader
depending on the used protocol.
- Second, I also have to resolve the dependencies of the given maven artifact in the
URL. So I have to put more than one jar-URL in the URL Connection. Otherwise I have to
declare all the dependencies in the URL String.
Do you know a solution for my problems?
What is the goal exactly ? From what I understood (and how I see
http://jira.xwiki.org/browse/XWIKI-6211) the feature is to support an url that just
contains the extension id (and optionally maybe the version, need to define a syntax for
that) which is then requested with extension manager in the registered repositories.
Extension Manager API gives you the dependencies of the extension. The simplest here is
probably to generate an install plan and load all the extension listed in the plan.
Thanks
Roman
Von: Vincent Massol [mailto:vmassol@gmail.com] Im Auftrag von
vincent(a)massol.net
Gesendet: Freitag, 4. Juli 2014 14:30
An: Summer, Roman; XWiki Users
Betreff: Re: [xwiki-users] exchanging the ScriptMacro ClassLoader
Hi Roman,
On 4 Jul 2014 at 13:11:23, Summer, Roman
(roman.summer@de-gmbh.com(mailto:roman.summer@de-gmbh.com))<mailto:roman.summer@de-gmbh.com(mailto:roman.summer@de-gmbh.com))>
wrote:
> Hello
>
> I want to write a java script macro
I had to read this 3 times to understand it ;) (I kept thinking about "javascript
macro”).
> which is able to load jars from an external currently not supported source (e.g. from
a maven repository). Therefore I want to exchange the used class loader. Overriding the
ScriptMacroParameters#getJars() method is not possible for me, because I only want to load
the classes in view and not in edit mode.
>
> My question: How is it possible to exchange the currently injected
> implementation of the interface
> org.xwiki.rendering.internal.macro.script.AttachmentClassLoaderFact
> o r y for my macro to exchange the used class loader or is there
> another recommended official way to ream my aim.
See
http://extensions.xwiki.org/xwiki/bin/view/Extension/ClassLoader+API
#
H
AddinganewURLStreamHandler
Thanks
-Vincent
PS1: You should checkout OPS4J Pax URL:
https://ops4j1.jira.com/wiki/display/paxurl/Mvn+Protocol
PS2: I think we would be interested by such a contribution. Actually a great contribution
would be to bridge our code to use PAX URL (not even sure anything is needed for that!).
We probably just need a tutorial explaining how to use PAX URL in XWiki.
_______________________________________________
users mailing list
users(a)xwiki.org
http://lists.xwiki.org/mailman/listinfo/users
--
Thomas Mortagne
_______________________________________________
users mailing list
users(a)xwiki.org
http://lists.xwiki.org/mailman/listinfo/users
_______________________________________________
users mailing list
users(a)xwiki.org
http://lists.xwiki.org/mailman/listinfo/users
--
Thomas Mortagne
_______________________________________________
users mailing list
users(a)xwiki.org
_______________________________________________
users mailing list
users(a)xwiki.org