java ee - JMS 2.0 QueueBrowser on Wildfly does not return messages -


i have 2 simple ejb beans. first 1 timer method called every second. in method add 10 random messages testqueue.

@singleton @startup public class timer {      @inject     private jmscontext context;      @resource(mappedname = "java:/jms/queue/testqueue")     private queue queue;      @schedule(hour = "*", minute = "*", second = "*/1", persistent = false)     @accesstimeout(unit = timeunit.days, value = 1)     public void addtoqueue() {         for(int = 0; i<30; i++)             context.createproducer().send(queue, "msg " + (new random().nextint(100)));         printqueuesize();     }      public void printqueuesize() {         queuebrowser qb = context.createbrowser(queue);         enumeration enumeration = null;         try {             enumeration = qb.getenumeration();         } catch (jmsexception e) {             e.printstacktrace();         }         int size = 0;         while(enumeration.hasmoreelements()) {             enumeration.nextelement();             size++;         }          system.out.println("queue size: " + size);     } } 

second bean mdb consumer. put thread.sleep(100) simulate long running task , make sure there messages in testqueue.

@messagedriven( activationconfig = {         @activationconfigproperty(propertyname = "destination", propertyvalue = "java:/jms/queue/testqueue"),         @activationconfigproperty(propertyname = "destinationtype", propertyvalue = "javax.jms.queue"),         @activationconfigproperty(propertyname = "maxsession", propertyvalue = "1") })  public class consumer implements messagelistener {      @override     public void onmessage(message msg) {         try {             thread.sleep(100);         } catch (interruptedexception e) {             e.printstacktrace();         }     } } 

the problem console output shows:

15:06:29,006 info  [stdout] (ejb default - 9) queue size: 0 15:06:30,006 info  [stdout] (ejb default - 10) queue size: 0 15:06:31,009 info  [stdout] (ejb default - 1) queue size: 0 

etc.

but in wildfly admin console can see there more , more messages every second:

enter image description here

the question is, why queuebrowser return empty enumeration? bug in hornetq implementation or there reason that?

although not answer question, show how queue size in hornetq, in ejb service:

    initialcontext initialcontext = null;     try {         // step 1. create initial context perform jndi lookup.         initialcontext = getcontext();          // step 2. perfom lookup on queue         queue queue = (queue) initialcontext.lookup("jmx/queue/your_queue_name");           // step 7. use jmx retrieve message counters using         // jmsqueuecontrol         objectname on = objectnamebuilder.default                 .getjmsqueueobjectname(queue.getqueuename());         jmxconnector connector = jmxconnectorfactory.connect(new jmxserviceurl("service:jmx:http-remoting-jmx://localhost:9990"), new hashmap<string, object>());//this url wildfly 8.2 (should work 8.x)         mbeanserverconnection mbsc = connector.getmbeanserverconnection();         jmsqueuecontrol queuecontrol = mbeanserverinvocationhandler.newproxyinstance(mbsc, on, jmsqueuecontrol.class, false);          // step 8. list message counters , convert them         // messagecounterinfo data structure.         string counters = queuecontrol.listmessagecounter();         messagecounterinfo messagecounter = messagecounterinfo.fromjson(counters);           queuecontrol.getconsumercount();//this returns consumer count         queuecontrol.getmessagesadded();//returns messages added last time checked         queuecontrol.ispaused();//prints out, whether queue paused (you can stop queue being processed e.g. jmx)         queuecontrol.getmessagecount();//message count far      } {         // step 17. sure close our jms resources!         if (initialcontext != null) {             initialcontext.close();         }     } 

Comments