Подтвердить что ты не робот

Возврат строки из jms

Я пишу автономный основной метод, который вызывает производителя (для ввода данных в очередь), а затем вызывает пользователя, который продолжает слушать эту тему.

Я переопределил onMessage, и я могу получить сообщение из очереди, но я не могу вернуть сообщение вызывающему методу.

Собственно, я хочу передать сообщение браузеру, поэтому хотел проверить, могу ли я переносить его по крайней мере до основного.

Пожалуйста, помогите;

class TextMessageListener implements MessageListener {
        String msgData;

        public String getMsgData() {
            return msgData;
        }

        public void setMsgData(String msgData) {
            this.msgData = msgData;
        }

        public void onMessage(Message message) {
            try {
                if (message instanceof TextMessage) {
                    TextMessage textMessage = (TextMessage) message;
                    System.out.println("Received message in  ::" + textMessage.getText() + " '");
                    setMsgData(textMessage.getText());
                }
            } catch (JMSException e) {
                System.out.println("Caught:" + e);
                e.printStackTrace();
            }
        }
    }
4b9b3361

Ответ 1

Наконец-то получил ответ,

извлечение значения из прослушивателя сообщений и печать в главном файле

В этом классе пользователь привел пример:

@Stateful
public class AManagerBean implements ejb.AManagerRemote {
@Resource(mappedName = "jms/QueueConnectionFactory")
private ConnectionFactory queueConnectionFactory;
@Resource(mappedName = "jms/Queue")
private Queue queue;

private static int fineAmt;

......

static class AListener implements MessageListener{
    public void onMessage(Message message){
         .....
         fineAmt = msg.getInt("fineAmt"); 
        // I NEED FINEAMT TO SHOW IN MAIN CLASS

         .....
    }
}

public int returnFine(){
     return fineAmt;
 }

В основном классе...

public class Main {

    @EJB
    public static AManagerRemote amr;

    public static void main(String[] args) {
         ......
         System.out.println(amr.returnFine());
         // ALWAYS RETURN 0

Прежде всего, не конечные статические переменные в EJB запрещены. Там есть запись об этом в FAQ EJB Restrictionc FAQ

Нефинальные поля статического класса запрещены в EJB, потому что такие поля делают предприятие bean трудным или невозможным для распространения. Поля статических классов распределяются между всеми экземплярами определенного класса, но только внутри одной виртуальной машины Java (JVM). Обновление поля статического класса подразумевает намерение использовать значение поля для всех экземпляров класса. Но если класс работает в нескольких JVM одновременно, только те экземпляры, которые работают в одной JVM как экземпляр обновления, будут иметь доступ к новому значению. Другими словами, нефинальное статическое поле класса будет вести себя по-разному, если работает в одном JVM, чем в нескольких JVM. Контейнер EJB резервирует возможность распределения предприятия beans на нескольких JVM (работающих на одном сервере или на любом кластере серверов). Нефинальные поля статического класса запрещены, поскольку экземпляры предприятия bean будут вести себя по-разному в зависимости от того, распространяются они или нет. Во-вторых, вы определили сеанс состояния bean. Ожидается, что сеанс с состоянием bean должен иметь диалоговое состояние, а клиент (обычно) имеет дескриптор одного и того же состояния bean в течение всего срока его службы. Я не вижу ничего в разговоре в вашем примере (я предполагаю, что, поскольку вы вырезали какой-то код), действительно ли это должно быть состоянием bean?

Итак, я бы предположил, что первое, что вы делаете, это сделать перепроектирование и попытаться запустить пример реальной жизни.