2015-10-01 3 views
1

Это мой класс отправителя:JMS Получить сообщение/ответ от EJB

private void sendJMSMessage(Object data) throws JMSException { 
     Connection con = null; 
     Session s = null; 
     try { 
      con = context.createConnection(); 
      s = con.createSession(false, Session.CLIENT_ACKNOWLEDGE); 
      MessageProducer producer = s.createProducer(glassFishQueue); 
      ObjectMessage msg = s.createObjectMessage(); 
      ArrayList list = new ArrayList(); 
      list.add("name"); 
      msg.setObject(p); 
      producer.send(msg); 
     } 

И мое сообщение управляемого Bean:

public void onMessage(Message message) { 
    try { 
     ObjectMessage om = (ObjectMessage) message; 
     ArrayList al = (ArrayList) om.getObject(); 
     System.out.println("Msg: " + al.get(0)); 

    } catch (JMSException jex) { 
     System.out.println("Exception: " + jex); 
    } 

Я получил сообщение, отправленное из класса отправителя, но мне нужен сообщение от EJB до отправителя. Я делаю веб-клиент с таблицей, но мне нужно заполнить его, чтобы получить информацию из базы данных удаленно, я действительно не знаю, что я должен использовать, чтобы сделать это, поэтому, если я делаю правильно, дайте мне знать или скажите мне какое-нибудь предложение

Спасибо и

+0

Выполняет ли ваш EJB 'javax.jms.MessageListener'? –

+0

Да, там, где я переопределяю onMessage() – LuisM

ответ

1

JMS асинхронный, поэтому он не будет работать в стиле запроса-ответа из коробки.

Если вы хотите отправить ответ, один из способов - использовать отдельную очередь. Ваш MDB может написать ответ на эту вторую очередь, и ваш клиент может прослушать эту очередь, создав QueueReceiver.

Другим способом является использование QueueRequestor. От Javadocs:

Это создает TemporaryQueue для ответов и предоставляет запрос метод, который отправляет сообщение с запросом и ожидает его ответа.

Посмотрите here и hereQueueRequestor для примеров.