Re: [jgroups-users] v3->v4 move, problem with castMessage

Questions/problems related to using JGroups <[email protected]> Thu, 2 Nov 2017 12:44:32 -0400
Newsgroups gmane.comp.java.javagroups.general
Message-ID <mailman.23207.1509641100.12767.javagroups-users@lists.sourceforge.net>
>
>
>> Am having various problems with our v3->v4 change. Trying to focus on
>> them one at a time, I wanted to ask about the castMessage change. We were
>> doing this before to send a message out to every node, collect responses,
>> etc:
>>
>>          RspList<MyOb> rspList = md.castMessage(null,
>>              new Message(null, myString), ro);
>>
>> ...where myString is actually a constant starting with "n" and MyOb is a
>> Serializable object with some primitive data in it and one Address object
>> (*).
>>
>
> I don't see a myObj instance getting passed to the call?


Where would that go? I don't see it in the v3 or v4 APIs. With jgroups v3,
we've been using that for years now and it always returns what I'd expect.
When I iterate over "for (Rsp<MyOb> rsp : rspList.values())" rsp.getValue()
always returns a MyOb.

I changed the castMessage contents to use Util.objectToByteBuffer instead
of string (our handle() method could get a couple different things instead
of strings), used the proper byte array length, and that all works fine.
Thanks for the information. So far each rsp.value is a MyOb, so it's
working.

Which leads me to the last question (for this thread anyway):


>> (*) Related: am getting a lot of FindBugs warnings now because we have a
>> couple Serializable objects we pass around that include Address objects,
>> and that isn't marked Externalizable any more. Any advice there would also
>> be appreciated.
>>
>
> I removed Serializable / Externalizable from Address, so they cannot be
> serialized with Java serialization (which is a bad idea anyway!). Use
> Util.writeAddress()/readAddress() instead
>

Am not following yet. In the MyOj case above, the object used to be
something like (simplified):

public class MyOb implements Serializable {
    private static final long serialVersionUID = // stuff
    private final String this;
    private final String that;
    private final boolean a;
    private final boolean b;
    private final Address addr;

    // code
}

Now I've marked 'addr' transient and set it when I iterate over the
RspList. That's working ok I think. But we have other cases, like the
object used to store shared cluster state, that's more like this:

public class MyOb2 implements Serializable {
    private static final long serialVersionUID = // stuff
    private String[] something;
    private Address[] addresses1;
    private Address[] addresses2;

    // code
}

In v3.X that could all be sent over the wire because everything was
Serializable. Is there a suggested way to handle this in v4.X to reuse
jgroups util code as much as possible?

Thanks,
Bobby

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot

_______________________________________________
javagroups-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/javagroups-users