So, to summarise all of this. What I suggest is this:

- Short term:
The "quick fix" I suggest in 
http://lists.jboss.org/pipermail/infinispan-dev/2012-March/010317.html

- Medium term:
Have a way to pass in marshalling configurations per cache manager and 
per-cache (or an abstraction of it), which allows the right class resolver to 
be passed in. (***)
https://issues.jboss.org/browse/ISPN-1367 

- Long term:
https://issues.jboss.org/browse/ISPN-1413

(***) I still don't fully understand how web apps don't have the same issue as 
2LC of not seeing Infinispan classes (Reminder: we're not talking about the 
contents of the cache, but about the Infinispan classes themselves).

On Mar 6, 2012, at 8:19 PM, Galder Zamarreño wrote:

> 
> On Mar 6, 2012, at 8:06 PM, David M. Lloyd wrote:
> 
>> On 03/06/2012 01:02 PM, Galder Zamarreño wrote:
>>> On Mar 6, 2012, at 6:31 PM, Paul Ferraro wrote:
>>> </snip>
>>>> To work around this, we typically store MarshalledValues in the cache - 
>>>> which are marshalled/unmarshalled using a marshalling configuration 
>>>> specific to the application (e.g. via a ModularClassResolver using the 
>>>> ModuleLoader of the deployment unit).
>>>> https://github.com/jbossas/jboss-as/blob/master/clustering/api/src/main/java/org/jboss/as/clustering/MarshalledValue.java
>>>> https://github.com/jbossas/jboss-as/blob/master/clustering/api/src/main/java/org/jboss/as/clustering/SimpleMarshalledValue.java
>>>> https://github.com/jbossas/jboss-as/blob/master/clustering/api/src/main/java/org/jboss/as/clustering/HashableMarshalledValue.java
>>> 
>>> Isn't a class resolver and a class loader, functionality wise, doing the 
>>> same thing? I wonder if a custom classloader could not be built that 
>>> delegates to a ModularClassResolver...
>> 
>> No, not really.  A class loader loads a class, given a name.  But a 
>> class resolver loads a class given a name *and* stream information.  The 
>> modular class resolver reads the stream information to know which class 
>> loader houses the class in question.  This is critically important 
>> because it's possible (common even) for more than one class to exist in 
>> an AS instance with the same name.  And there is no single class loader 
>> which has visibility to all classes which could potentially be stored in 
>> a cache.
>> 
>> Yes, accepting a class loader to use is a powerful feature.  However it 
>> *should* just be a convenience abstraction over a more fundamental 
>> feature which allows a class resolver to be set.
> 
> Thanks for the clarification, makes sense.
> 
> So, if I understand this correctly, Infinispan should really be enhanced to 
> accept global and per-cache class resolvers, or more globally, as paul 
> suggested below, marshalling configuration instances (or abstractions of 
> them).
> 
> I think https://issues.jboss.org/browse/ISPN-1367 should be reporpoused to do 
> this.
> 
>> 
>>>> So, essentially Infinispan itself only ever has to marshal/unmarshal a 
>>>> byte[] wrapper - so the AS has full control over the marshalling process.
>>>> 
>>>> I would recommend that the 2LC do something similar, and include a 
>>>> mechanism for providing a MarshallingConfiguration per persistence unit.
>>> 
>>> Possibly…
>>> 
>>> --
>>> Galder Zamarreño
>>> Sr. Software Engineer
>>> Infinispan, JBoss Cache
>>> 
>> 
>> 
>> -- 
>> - DML
>> _______________________________________________
>> infinispan-dev mailing list
>> [email protected]
>> https://lists.jboss.org/mailman/listinfo/infinispan-dev
> 
> --
> Galder Zamarreño
> Sr. Software Engineer
> Infinispan, JBoss Cache
> 
> 
> _______________________________________________
> infinispan-dev mailing list
> [email protected]
> https://lists.jboss.org/mailman/listinfo/infinispan-dev

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


_______________________________________________
infinispan-dev mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/infinispan-dev

Reply via email to