users@grizzly.java.net

Re: grizzly-cometd-bayeux not sending messages to all subscribed clients.

From: victorng <victor.ng_at_cibc.com>
Date: Mon, 17 Aug 2009 11:15:11 -0700 (PDT)

I can reproduce this behaviour with the following code:

I'm using GF v2.1 with the stock grizzly.

I *thought* I saw this working but I guess I was delusional on Friday. :)

I'm sending messages via JMS to a queue - I can see the messages get
through, the cometcontext is properly acquired and I can see the
CometHandlers all there - but nothing comes through on the website.


The demo app I'm using is grizzly-cometd-chat-1.9.9.war
(http://download.java.net/maven/2/com/sun/grizzly/samples/grizzly-cometd-chat/1.9.9/)
and the MDB I'm using is at the bottom of this message.

If it's of use, here's my Jython JMS code:

def send():
    context = get_context()
    qfactory = context.lookup("jms/MyConnectionFactory")
    qconnection = qfactory.createQueueConnection('senduser', 'sendpass')
    qsession = qconnection.createQueueSession(False,
Session.AUTO_ACKNOWLEDGE)
    qsender = qsession.createSender(context.lookup("jms/MyQueue"))
    msg = qsession.createTextMessage()
    msg.setText('this is a test message')
    qsender.send(msg)
 
Is there something I should be doing to flush the messages down to the
CometHandlers?

thanks,
vic


Server logs:

[#|2009-08-17T14:03:07.688-0400|INFO|sun-appserver2.1|javax.enterprise.system.stream.out|_ThreadID=40;_ThreadName=p:
thread-pool-1; w: 47;|
Got message: this is a test message|#]

[#|2009-08-17T14:03:07.688-0400|INFO|sun-appserver2.1|javax.enterprise.system.stream.out|_ThreadID=40;_ThreadName=p:
thread-pool-1; w: 47;|
Engine:
com.sun.enterprise.web.connector.grizzly.comet.CometEngine_at_1ef2fd3|#]

[#|2009-08-17T14:03:07.688-0400|INFO|sun-appserver2.1|javax.enterprise.system.stream.out|_ThreadID=40;_ThreadName=p:
thread-pool-1; w: 47;|
ContextPath: /cometd/cometd|#]

[#|2009-08-17T14:03:07.688-0400|INFO|sun-appserver2.1|javax.enterprise.system.stream.out|_ThreadID=40;_ThreadName=p:
thread-pool-1; w: 47;|
Context: /cometd/cometd|#]

[#|2009-08-17T14:03:07.688-0400|INFO|sun-appserver2.1|javax.enterprise.system.stream.out|_ThreadID=40;_ThreadName=p:
thread-pool-1; w: 47;|
Sent {chat=Wake up call from the chatroom :-) to /chat/demo,
user=ChatPinger} back down to the comet context|#]

[#|2009-08-17T14:03:07.688-0400|INFO|sun-appserver2.1|javax.enterprise.system.stream.out|_ThreadID=40;_ThreadName=p:
thread-pool-1; w: 47;|
Found handler: com.sun.grizzly.cometd.DataHandler_at_11ab4ec|#]

[#|2009-08-17T14:03:07.688-0400|INFO|sun-appserver2.1|javax.enterprise.system.stream.out|_ThreadID=40;_ThreadName=p:
thread-pool-1; w: 47;|
Found handler: com.sun.grizzly.cometd.BayeuxCometHandler_at_eaa683|#]

[#|2009-08-17T14:03:07.688-0400|INFO|sun-appserver2.1|javax.enterprise.system.stream.out|_ThreadID=40;_ThreadName=p:
thread-pool-1; w: 47;|
Completed try block|#]

--- code snip ---

package com.crankycoder;
import javax.ejb.MessageDriven;
import javax.jms.MessageListener;
import javax.jms.Message;
import javax.jms.TextMessage;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import com.sun.enterprise.web.connector.grizzly.comet.CometContext;
import com.sun.enterprise.web.connector.grizzly.comet.CometEngine;
import com.sun.grizzly.cometd.CometdNotificationHandler;
import com.sun.grizzly.cometd.CometdRequest;
import com.sun.enterprise.web.connector.grizzly.comet.CometHandler;
import com.sun.grizzly.cometd.CometdResponse;
import com.sun.grizzly.cometd.bayeux.Data;
import com.sun.grizzly.cometd.bayeux.DeliverResponse;

@MessageDriven(mappedName="jms/MyQueue")
public class HelloMDB implements MessageListener {

    public void onMessage(Message msg) {
      try {
        if (msg instanceof TextMessage) {
          TextMessage txtmsg = (TextMessage) msg;
          String cpath = "/cometd/cometd";
          String topic ="/chat/demo";
          CometHandler handler = null;
          System.out.println("Got message: "+txtmsg.getText());
          CometEngine engine = CometEngine.getEngine();
          System.out.println("Engine: " + engine);
          CometContext context = engine.getCometContext(cpath);
          System.out.println("ContextPath: " + cpath);
          System.out.println("Context: " + context);

          Map<String, Object> map = new HashMap<String, Object>();
          map.put("chat", "Wake up call from the chatroom :-) to "+topic);
          map.put("user", "ChatPinger");
          Data data = new Data();
          data.setMapData(map);
          data.setChannel(topic);
          DeliverResponse deliverResponse = new DeliverResponse();
          deliverResponse.setChannel(topic);
          deliverResponse.setData(data);
          deliverResponse.setLast(true);
          deliverResponse.setFollow(true);
          context.notify(deliverResponse);
          System.out.println("Sent "+map+" back down to the comet context");
          for (Iterator iter = context.getCometHandlers().iterator() ;
iter.hasNext() ;) {
              handler = (CometHandler) iter.next();
              System.out.println("Found handler: " + handler);
          }
          System.out.println("Completed try block");
        }
      } catch (Exception e) { System.out.println(e.toString()); }
    }
}

-- 
View this message in context: http://www.nabble.com/grizzly-cometd-bayeux-not-sending-messages-to-all-subscribed-clients.-tp24460710p25011615.html
Sent from the Grizzly - Users mailing list archive at Nabble.com.