tuscany-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Simon Nash <n...@apache.org>
Subject Re: Get Contribution at runtime?
Date Wed, 28 Nov 2012 18:43:12 GMT
Millies, Sebastian wrote:
> 
>> -----Ursprüngliche Nachricht-----
>> Von: Simon Nash [mailto:nash@apache.org]
>> Gesendet: Mittwoch, 28. November 2012 16:17
>> An: user@tuscany.apache.org
>> Betreff: Re: Get Contribution at runtime?
>>
>> Millies, Sebastian wrote:
>>> Hello there,
>>>
>>>
>>>
>>> is there a way to find out the contribution of a class at runtime?
>>>
>>>
>>>
>>> The reason I ask:
>>>
>>>
>>>
>>> That way, I could include versions of libraries that differ from the
>> Tuscany
>>> runtime by NOT putting them in the contribution itself, but in some
>>> other place
>>>
>>> over which I have full control (an  “endorsed” directory or some
>> such).
>>> I would then load them using my own EndorsedLibrariesClassloader at
>>>
>>> runtime, after Tuscany has already started up all my components.
>>>
>> This seems like an interesting approach.  It could perhaps become part
>> of
>> Tuscany if you're willing to contribute (no pun intended) the code.
>>
>>>
>>> Of course, that new classloader would need access to the current
>>> contribution
>>>
>>> in order to resolve imports etc.
>> If the new classloader is just loading external libraries, why does it
>> need to resolve imports via the contribution?  Imports are only
>> relevant
>> when you're loading contributions.
>>
>>    Simon
> 
> Of course you're right. The new classloader should look for the external libs,
> then delegate to the parent (the ContributionClassLoader). I was still thinking
> of changing the order in which classes are searched (contribution and imports first,
> parent last), but that's no problem here.
> 
> The whole idea has a drawback, however: The external libraries are not visible to the
> contributions, but the other way around. So I could not have appropriately typed references
> in my contributions, but would have to use reflection, right?
> 
A solution might be to make the new classloader the delegation parent
of the contribution classloader, and load the external libraries before
Tuscany loads the contributions.  I think this would be safe if the
contributions don't pass any references to these overriding external
external libraries to the Tuscany runtime.

> Is there not a way to create contributions so that I can explicitly set the classloader?
> Taking the ContributionClassLoaderTest as a point of departure, I see coding like this:
> 
> ExtensionPointRegistry extensionPoints = new DefaultExtensionPointRegistry();
> ModelFactoryExtensionPoint modelFactories = extensionPoints.getExtensionPoint(ModelFactoryExtensionPoint.class);
> contributionFactory = modelFactories.getFactory(ContributionFactory.class);
> 
> Contribution contrib = contributionFactory.createContribution();
> contrib.setURI( ...)
> contrib.setLocation( url.toString() );
> 
> ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
> contrib.setClassLoader(new ContributionClassLoader(contrib, classLoader));
> 
> I'd need some API that would let me start a composite with contributions constructed
like that?
> I. e. some replacement for the node API
> SCANode node = SCANodeFactory.newInstance().createSCANode( compositeURI, scaContributions);
> node.start();
> 
> where I could pass in appropriately constructed Contribution instances instead of SCAContributions.
> 
> Is there already such an API? Otherwise I could go and try write my own. My best bet
would be to
> do the stuff that NodeImpl() does before it calls configureNode() outside of NodeImpl,
and add a new
> constructor to NodeImpl to accept Contribution arrays. Any better advice?
> 
This seems a lot more complicated than the "delegation parent" approach,
and I'm not familiar enough with this part of the code to be able to
give useful advice.

   Simon

> -- Sebastian
> 
> 
> IDS Scheer Consulting GmbH
> Geschäftsführer/Managing Directors: Michael Rehm, Ivo Totev
> Sitz/Registered office: Altenkesseler Straße 17, 66115 Saarbrücken, Germany - Registergericht/Commercial
register: Saarbrücken HRB 19681
> http://www.ids-scheer-consulting.com
> 


Mime
View raw message