users@shoal.java.net

Re: [Shoal-Users] Re: send message after join

From: Jerry Raj <jerryr_at_sun.com>
Date: Fri, 19 Jun 2009 09:48:41 +0530

Joseph Fialli wrote:
> Jerry Raj wrote:
>> Any suggestions?
>> Or at least a way to check whether join is complete before calling send?
>>
> Jerry,
>
> It is not that join is not complete for the sender, the sender is
> definitely part of the group when join returns.
OK.
> It could be the other members of the group probably have not joined yet.
I have only two members in the group. Both run identical code. The first one
starts up, joins the group and sends a message (which goes nowhere, but thats
ok). Now I start the second one. When the second member sends a message, it
should be received by the first one, but that does not happen. Unless I add a
delay between join() and send() calls.

The same identical code worked fine with Shoal 1.0.

I hope this clarifies the use-case.
-Jerry

> However, there is not enough information in your original post to
> confirm or deny this.
>
> You could delay sending a message to the group until there is certain
> number of members joined or
> you could wait for all members to have joined via JoinNotification event.
>
> Pull API:
>
> List<String> members = gms.getGroupHandle().getAllCurrentMembers();
> <wait to send first message until all expected number of members have
> joined>
>
> Event driven API:
>
> gms.addActionFactory( new JoinNotificationActionFactoryImpl( new
> JoinNotificationCallBack( serverName ) ) );
> gms.join();
> <wait till all expected instances have joined before sending message;
> use info calculated from JoinNotificationCallback>
>
> private class JoinNotificationCallBack implements CallBack {
>
> private String serverName;
>
> public JoinNotificationCallBack( String serverName ) {
> this.serverName = serverName;
> }
>
> // called for every instance joining the gms group.
> public void processNotification( Signal notification ) {
> <record instance has joined>;
> }
> }
>
> A non-coding way to check this out is to start all your receiving
> clients first.
> Wait 10 seconds (like your initial test).
> Then start your sending gms client.
> There is no need a sleep between the join and send since all the other
> members
> will have already joined. Hope this helps.
>
> -Joe
>> Thanks
>> -Jerry
>>
>> Jerry Raj wrote:
>>
>>> Hello,
>>> I have code like this:
>>> <snip>
>>> gms.join();
>>> // Commented: Thread.sleep(10000);
>>> GroupHandle gh = gms.getGroupHandle();
>>>
>>> gh.sendMessage(blah);
>>>
>>> </snip>
>>>
>>> This used to work fine in Shoal 1.0. The node would join the group
>>> and the
>>> message would be recd by other members in the group. But this does
>>> not happen
>>> with Shoal 1.1 unless I uncomment the sleep(10000) between join() and
>>> send(). I
>>> expect this is because the join operation has not completed
>>> successfully when
>>> send() is called. Is there a way to be notified when join is
>>> complete? I tried
>>> looking at JoinedAndReadyNotificationActionImpl but that does not
>>> seem to work?
>>>
>>> I'm using Shoal 1.1 from the download link on the front page of the
>>> Shoal website.
>>>
>>> -Jerry
>>>
>>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe_at_shoal.dev.java.net
>> For additional commands, e-mail: users-help_at_shoal.dev.java.net
>>
>>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe_at_shoal.dev.java.net
> For additional commands, e-mail: users-help_at_shoal.dev.java.net
>