[jboss-jira] [JBoss JIRA] (JGRP-1860) Custom classloader in RpcDispatcher

Dennis Reed (JIRA) issues at jboss.org
Mon Jul 21 12:23:30 EDT 2014


    [ https://issues.jboss.org/browse/JGRP-1860?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12986767#comment-12986767 ] 

Dennis Reed commented on JGRP-1860:
-----------------------------------

> BTW: there is no objectFromByteBuffer() method in 3.2.13, only objectToBuffer(). Are we looking at different versions 
> (I'm looking at tag JGroups-3.2.13.Final) ?

Sorry about that, I've been looking at it in different versions.  The method was objectFromByteBuffer in earlier versions, but was renamed to objectFromBuffer. (and the same for objectTo*Buffer).

> So you want an implementer of a custom marshaller to be able to (re)use the {{Util.objectToFromBuffer()} methods, but still be 
> able to pass in a class loader ? This in order to prevent having to implement something equivalent themselves ?

That's correct.
Since the classloader is currently hard-coded, the entire marshalling code has to be reproduced in a custom marshaller.

With an additional request to be able to set a ClassLoader on RpcDispatcher and have it just handle it, to also skip the step of creating a custom marshaller.
(In a non-flat classloader environment, setting the classloader would be a common need for users of RpcDispatcher, so it should be as simple as possible).


> Custom classloader in RpcDispatcher
> -----------------------------------
>
>                 Key: JGRP-1860
>                 URL: https://issues.jboss.org/browse/JGRP-1860
>             Project: JGroups
>          Issue Type: Feature Request
>      Security Level: Public(Everyone can see) 
>    Affects Versions: 3.2.13
>            Reporter: Dennis Reed
>            Assignee: Bela Ban
>             Fix For: 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.



--
This message was sent by Atlassian JIRA
(v6.2.6#6264)


More information about the jboss-jira mailing list