]
Bela Ban commented on JGRP-1860:
--------------------------------
Are you using JGroups directly? It shouldn't be difficult to port your app from 3.6 to
4.x.
{{Marshaller}} was moved out of {{RpcDispatcher}} into its own interface. {{UUID}} may not
be backwards-compatible, but it should be trivial to change your subclass...
Note that running 3.6 and 4.x instances in the same cluster is not supported. You have to
resort to an external package to make this happen: [1].
[1]
Custom classloader in RpcDispatcher
-----------------------------------
Key: JGRP-1860
URL:
https://issues.redhat.com/browse/JGRP-1860
Project: JGroups
Issue Type: Feature Request
Affects Versions: 3.2.13
Reporter: Dennis Reed
Assignee: Bela Ban
Priority: Major
Fix For: 3.4.5, 3.5
RpcDispatcher is hard-coded to use JGroups' classloader when marshalling the
users's custom objects over RPC.
RpcDispatcher uses Util.objectFromByteBuffer to unmarshall, which uses an
ObjectInputStream. ObjectInputStream uses the classloader of its caller's class
(Util).
RpcDispatcher does allow a custom marshaller to be used (implementing
RpcDispatcher.Marshaller), but since Util.objectFromByteBuffer hard-codes the use of
ObjectInputStream, a custom marshaller cannot simply set the classloader and then delegate
back to the default JGroups code.
Util.objectFromBuffer should be enhanced to use a custom ObjectInputStream implementation
that overrides resolveClass to use a custom classloader, and an API should be added to
RpcDispatcher to pass in the classloader to use.