On May 19, 2011, at 11:45 AM, Galder Zamarreño wrote:

> 
> On May 18, 2011, at 6:06 PM, Manik Surtani wrote:
> 
>> 2) Class loader per invocation.
>> 
>> I've been less than happy with this, not just because it pollutes the API 
>> but that it adds a layer of confusion.  If all use cases discussed can be 
>> solved with (1) above, then I'd prefer to just do that.
>> 
>> The way I see it, most user apps directly using Infinispan would only be 
>> exposed to a single class loader per cache reference (even if multiple 
>> references talk to the same cache).  
>> 
>> Frameworks, OTOH, are a bit tougher, Hibernate being a good example on this 
>> thread.  So this is a question for Galder - is it feasible to maintain 
>> several references to a cache, one for each app/persistence unit?
> 
> Sorry, missed the second part of the email, forget it my questions are 
> irrelevant after this. 
> 
> I think this might be doable. Each entity/collection region has a cache 
> associated which is built of the region factory. As long as when the region's 
> classloader can be identified at that point and passed to the cache manager 
> on cache retrieval, we should be Ok.

Actually Manik, for this to really work, a Cache would need to be identified 
not only by its name but by its classloader too, so:

cacheManager.getCache("entities", CL1)
and
cacheManager.getCache("entities", CL2)

would be different cache instances. The problem then is that if an RPC comes 
for "entities" cache and entity P1, which of the "entities" caches do I go for? 
You'd need to know which classloader P1 is living in the remote node and you'd 
have to now that at the Infinispan level to be able to store it in a non-binary 
format.

> 
> Otherwise, storeAsBinary would be the alternative for these cases.
> 
>> 
>> 3) Can all OSGi requirements be handled by (1)? I would guess so, from what 
>> I have read here, since the class loader is explicitly passed in when 
>> getting a handle on a cache.
>> 
>> Cheers
>> Manik
>> 
>> 
>> On 27 Apr 2011, at 17: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. 
>>> If it's a class that is just internal wiring of infinispan, then 
>>> Infinispan's defining classloader should always be used.
>>> 
>>> The one case I can think of in infnispan where TCCL really makes sense 
>>> is in the case of lazy deserialization from an EE application. However 
>>> that is only guaranteed to work when you are executing in a context that 
>>> has that style of contract (like in an EE component). There are many 
>>> other cases though where someone would expect it to work from a non-EE 
>>> context (e.g. from a thread pool). What you really want is the caller's 
>>> classloader, but that is not cheap to get at, so it's something that 
>>> should be supplied as part of the API interaction (in the case where 
>>> there is no EE context). Alternatively you can just just require that 
>>> folks push/pop TCCL, but users often get this wrong.
>>> 
>>> Thanks!
>>> 
>>> -- 
>>> Jason T. Greene
>>> JBoss, a division of Red Hat
>>> _______________________________________________
>>> infinispan-dev mailing list
>>> infinispan-dev@lists.jboss.org
>>> https://lists.jboss.org/mailman/listinfo/infinispan-dev
>> 
>> --
>> Manik Surtani
>> ma...@jboss.org
>> twitter.com/maniksurtani
>> 
>> Lead, Infinispan
>> http://www.infinispan.org
>> 
>> 
>> 
>> 
>> _______________________________________________
>> infinispan-dev mailing list
>> infinispan-dev@lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/infinispan-dev
> 
> --
> Galder Zamarreño
> Sr. Software Engineer
> Infinispan, JBoss Cache
> 
> 
> _______________________________________________
> infinispan-dev mailing list
> infinispan-dev@lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/infinispan-dev

--
Galder Zamarreño
Sr. Software Engineer
Infinispan, JBoss Cache


_______________________________________________
infinispan-dev mailing list
infinispan-dev@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/infinispan-dev

Reply via email to