[infinispan-dev] [ISPN-125] Reading part of dynamic externalizer mappings

Manik Surtani manik at jboss.org
Fri Jul 17 08:51:01 EDT 2009


Classpath scanning is fugly.  I ran into issues here where you cannot  
just assume that the classpath is built up of a directory of classes  
or a jar.  VFS comes to mind.

Sending out an FQCN the first time an ID is used won't work.  A and B  
are in a cluster, the first time A has to marshall a class it includes  
the FQCN.  B receives this fine.  B then dies and restarts.  It won't  
get anymore FQCN info from A.

On 16 Jul 2009, at 17:10, Galder Zamarreno wrote:

> Hi,
>
> Re: https://jira.jboss.org/jira/browse/ISPN-125
>
> I've been thinking more about this and I don't have the reading part
> very clear. At runtime, it's very easy to check the externalizer map  
> to
> see if there's externalizer for class A and if there isn't any,  
> inspect
> the class for @Marshallable annotation, instantiate the A's  
> Externalizer
> class and add it to the map.
>
> However, the reading part is a fairly difficult problem to crack cos  
> all
> you'd get would be an Id which you'd need to map back to an  
> Externalizer
> that will be used for reading. However, how does the reader know  
> what's
> the mapping Id to Externalizer mapping?
>
> One option, rather brutal, would be to look up the entire classpath  
> for
> a class containing a @Marshallable with the index you're after.
>
> Another option would be that the 1st time someone writes an instance  
> of
> that class A, it adds a String form of the fully qualified class  
> name to
> the wire. So, the reader can check the externalizer map and if the id
> not present, read the class name and resolve it and add the mapping.
> However, this breaks the moment you have two different nodes sending a
> class for the 1st time. They would both add the class name but only  
> the
> 1st one to arrive would resolve the class name correctly, the 2nd time
> it arrives on the node, cos the mapping would already be there, it  
> would
> read the object directly, failing cos there's also the class name on  
> the
> wire.
>
> Anyone has any other ideas?
>
> It's worth bearing in mind that adding this dynamic behaviour adds
> complexity the code and it forces previously non-concurrent  
> collections
> to be concurrent, hence performance will degrade compared to the  
> current
> solution. It's worth keeping in mind that users will always be able to
> implement their j.i.Externalizable, which will be less performant than
> our internal solution but might be reasonable enough.
>
> One thing is for sure here, the indexes need to be tied down and I'm
> already working on it.
> -- 
> Galder Zamarreño
> Sr. Software Engineer
> Infinispan, JBoss Cache
> _______________________________________________
> infinispan-dev mailing list
> infinispan-dev at lists.jboss.org
> http://lists.jboss.org/mailman/listinfo/infinispan-dev

--
Manik Surtani
manik at jboss.org
Lead, Infinispan
Lead, JBoss Cache
http://www.infinispan.org
http://www.jbosscache.org








More information about the infinispan-dev mailing list