[infinispan-dev] [Pull Request] Modular Classloading Compatibility

Pete Muir pmuir at redhat.com
Sun May 1 13:38:00 EDT 2011


On 29 Apr 2011, at 12:45, Jason T. Greene wrote:

> On 4/28/11 4:52 PM, Manik Surtani wrote:
>> 
>> On 27 Apr 2011, at 12:39, Jason T. Greene wrote:
>> 
>>> Available here:
>>> https://github.com/infinispan/infinispan/pull/278
>>> 
>>> The problem is basically that infinispan currently is using TCCL for all
>>> class loading and resource loading. This has a lot of problems in
>>> modular containers (OSGi, AS7, etc), where you dont have framework
>>> implementation classes on the same classloader as user classes (that is
>>> how they achieve true isolation)
>>> 
>>> You can read about this in more detail here:
>>> http://community.jboss.org/wiki/ModuleCompatibleClassloadingGuide
>>> 
>>> The patch in the pull request is a first step, and should fix many
>>> issues, but it does not address all (there is still a lot of TCCL usage
>>> spread out among cacheloaders and so on), and ultimately it's just a
>>> work around. It should, however, be compatible in any other non-modular
>>> environment.
>>> 
>>> Really the ultimate solution is to setup a proper demarcation between
>>> what the user is supposed to provide, and what is expected to be bundled
>>> with infinispan. Whenever there is something the user can provide a
>>> class, then the API should accept a classloader to load that class from.
>> 
>> As in, user API?  That's a little intrusive... e.g., put(K, V, cl) ?
> 
> Not for put, since you have the class, just get, and I was thinking 
> something more like:
> 
> Foo foo = getUsing(key, Foo.class)

This would be a pretty useful addition to the API anyway to avoid user casts.

> 
> This could verify type compatibility and use the classloader of the 
> type. But that does of course mean more methods on AdvancedCache (not so 
> great).
> 
> Alternatively you could just have a method on the invocation context. 
> For friendlier interaction and elimination of thread locals, you could 
> introduce a session based API.
> 
> CacheSession session = CacheSession.from(cache);
> session.setClassLoader(blah);
> session.setOtherInterestingOptionsLikeBatchingEtc
> 
> session.get/put etc
> 
> -- 
> Jason T. Greene
> JBoss, a division of Red Hat
> _______________________________________________
> infinispan-dev mailing list
> infinispan-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/infinispan-dev



More information about the infinispan-dev mailing list