I am wondering how (if?) Infinispan handles versioning of my Value objects being placed in the cache?
No, versioning is not supported.
Some specific things that I am hoping the solution will satisfy are:
- Does the solution allow the shared cache to interoperate between 2 JVMs running a newer version and an older version of my Value object (i.e. would be a new version of my software rolled out to a subset of my enterprise -- avoid flash cut of the entire enterprise)?
No. But this is something you can implement as a layer on top of the cache, e.g., Google Protobufs as a marshalling layer and you then store the marshalled form in the cache. This way the layer above will contain versioning in the byte stream and be able to handle unmarshalling of these types.
In future we plan to make this simpler by allowing you to plug in your own marshalling mechanism for user-defined types (we already have an internal scheme for internal types, more on this below.
- Does the solution allow the shared cache to interoperate between 2 different JVM versions (i.e. an upgrade to the JVM)?
Yes, provided they are both supported JVMs.
Further, you could even run different versions of Infinispan (rolling upgrade) because internal marshalling and RPC layer is able to fall back to older marshalling schemes to be compatible. Byte streams are versioned, but this marshalling layer is not exposed to user types - which fall back to JDK serialization, which does not support versioning.