[JBoss JIRA] Created: (ISPN-125) Switching to Externalizers to hardcoded indexes and @Marshallable annotation
by Galder Zamarreno (JIRA)
Switching to Externalizers to hardcoded indexes and @Marshallable annotation
----------------------------------------------------------------------------
Key: ISPN-125
URL: https://jira.jboss.org/jira/browse/ISPN-125
Project: Infinispan
Issue Type: Bug
Components: RPC
Affects Versions: 4.0.0.ALPHA5
Reporter: Galder Zamarreno
Assignee: Galder Zamarreno
Fix For: 4.0.0.BETA1
Currently, ConstantObjectTable uses an indexed List to figure out which Externalizer it needs to read.
This index is calculated based on the order EXTERNALIZERS.entrySet() but this order could vary depending
on the JDK and hence, different nodes could apply a different order. This would cause ISPN to malfunction.
Therefore, there's a need to hardcode these indexes somehow.
On the other hard, the way Externalizers and classes externalized are linked is not ideal since this is hardcoded.
Instead, a suggestion was made to create an annotation, i.e. @Mashallable? that is applied to classes that have
Externalizers associated to them. This annotation would also take a hardcoded index for it, i.e.
@Marshallable(externalizer=JGroupsAddressExternalizer.class, id=2)
public class JGroupsAddress implements Address {
...
The idea here is that instead of scanning for @Marshallable annotations at startup, instead,
ConstantObjectTable.getObjectWriter() would be enhanced to writers map and if the target type not present,
scan the object for Marshallable annotation and add it to the map accordingly.
Finally, ConstantObjectTable.objects list needs to be switched to something else, possibly a identity hashmap
so that free spaces are allowed. In the future, we could remove certain externalizers and hence that should leave
empty spots.
Note: We'd need some place where the next available index number for @Marshallable so that implementers can use it?
How would we make sure this is kept up 2 date? Idea: The indexes could be maintained in a separate class that
only contains indexes (as public static final) and @Marshallable annotations could just use them. That would give a global
view of the available indexes.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://jira.jboss.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira