Компоненты JBoss, управляемые сообщениями, onMessage не вызывается

Я разрабатываю веб-приложение, используя JBoss 6.1 в качестве серверной части.
Я создал компонент, управляемый сообщениями, со свойством "destination": "queue/searchtabQueue" и свойством "destination type" "javax.jms.Queue".

Как описано в разделе https://community.jboss.org/wiki/HowToCreateJMSQueuetopicInAS6, мне удалось создать свой очередь "queue/searchtabQueue" ("searchtab-hornetq-jms.xml"):

<configuration xmlns="urn:hornetq"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="urn:hornetq /schema/hornetq-jms.xsd">
     <queue name="searchtabQueue">
     <entry name="/queue/searchtabQueue"/>
   </queue>
</configuration>

После развертывания в консоли администратора я вижу свою очередь в разделе «Очереди JMS» со статусом «вверх».

В bean-компоненте без сохранения состояния я ищу очередь, которая работает правильно, а также отправка не вызывает исключений:

Context ctx = new InitialContext(p); // Create the initial context
ConnectionFactory factory = (ConnectionFactory) ctx.lookup("ConnectionFactory");
Queue queue = (Queue) ctx.lookup("queue/searchtabQueue");
Connection connect = factory.createConnection();
javax.jms.Session session = connect.createSession(false, 0);
MessageProducer sender = session.createProducer(queue);
TextMessage msg = session.createTextMessage();
msg.setText("abc");
sender.send(msg);
connect.close();

Но метод onMessage компонента, управляемого сообщениями, не вызывается.

Что мне не хватает?

Заранее большое спасибо

Вольфганг

Обновление: мой MDB-код:

Мой компонент, управляемый сообщениями, имеет следующий код:

@MessageDriven(activationConfig =  {
        @ActivationConfigProperty(propertyName = "destinationType",
                                  propertyValue = "javax.jms.Queue"),
        @ActivationConfigProperty(propertyName = "destination",
                                  propertyValue = "queue/searchtabQueue"),
        @ActivationConfigProperty(propertyName = "acknowledgeMode",
                                  propertyValue = "Auto-acknowledge")
    })
public class SearchTableBean implements MessageListener {

   public void onMessage (Message message) {
  }
}

person Wolfgang Adamec    schedule 27.12.2012    source источник
comment
Можете ли вы добавить код для вашего MDB? Это удаленная очередь?   -  person CoolBeans    schedule 27.12.2012
comment
Привет, CoolBeans, я добавил код для своего MDB   -  person Wolfgang Adamec    schedule 09.01.2013


Ответы (2)


Теперь это работает, я изменил взгляд на вещи.

Код поиска:

Context ctx = new InitialContext(p); // Create the initial context
Queue queue = (Queue) ctx.lookup("java:jboss/exported/jms/queue/searchtab");
QueueConnectionFactory factory = (QueueConnectionFactory)
  ctx.lookup("ConnectionFactory");
QueueConnection connect = factory.createQueueConnection();
javax.jms.QueueSession session = connect.createQueueSession(false,
  QueueSession.AUTO_ACKNOWLEDGE);
TextMessage msg = session.createTextMessage("Hello World");
QueueSender sender = session.createSender(queue);
sender.send(msg);  
connect.close();

XML-файл создания очереди:

<configuration xmlns="urn:hornetq"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="urn:hornetq /schema/hornetq-jms.xsd">
   <queue name="searchtabQueue">
      <entry name="queue/searchtab"/>   
      <entry name="java:jboss/exported/jms/queue/searchtab"/>
   </queue>
</configuration>      

Код МДБ:

@MessageDriven(activationConfig =  {
        @ActivationConfigProperty(propertyName = "destinationType",
                                  propertyValue = "javax.jms.Queue"),
        @ActivationConfigProperty(propertyName = "destination",
                                  propertyValue = "queue/searchtab"),       
        @ActivationConfigProperty(propertyName = "acknowledgeMode",
                                  propertyValue = "Auto-acknowledge")
    })
public class SearchTableBean implements MessageListener {
  public void onMessage (Message message) {
    System.out.println("abc");
 }  
person Wolfgang Adamec    schedule 09.01.2013

Согласно спецификации, вы должны позвонить

connect.start(); 

чтобы активировать процесс доставки сообщений.

person Alex    schedule 23.04.2014