Селектор сообщений JMS в объектном сообщении - PullRequest
0 голосов
/ 22 октября 2018

Я работаю над свободой 18.0.0.2 с JavaEE 8.
Я создал пользовательское сообщение объекта jms, например:

public class MyTextMessage extends implements Serializable {
    private String text;
    private String destination;
    private LocalDateTime dateTime;

    public MyTextMessage(String text, String destination, LocalDateTime dateTime) {
        this.text = text;
        this.destination = destination;
        this.dateTime = dateTime;
    }

    public MyTextMessage() {
    }

    // Getter and Setter 

    @Override
    public String toString() {
        return "MyTextMessage{" +
                "text='" + text + '\'' +
                ", destination='" + destination + '\'' +
                ", dateTime=" + dateTime +
                '}';
    }
}

Как выбрать в очереди по свойству объекта?
это мойкод, но не работает:

JMSConsumer consumer = context.createConsumer(destination, "destination='abcdefg'");
 Message message = consumer.receiveNoWait();
 if (message != null) {
      MyTextMessage myTextMessage = message.getBody(MyTextMessage.class);
      System.out.println(myTextMessage);
 }    

1 Ответ

0 голосов
/ 22 октября 2018

Вы пытаетесь выбрать свойство реализации ObjectMessage, которое технически является частью тела сообщения.Однако в разделе 3.8.1 спецификации JMS 2 говорится:

Селекторы сообщений не могут ссылаться на значения тела сообщения.

Селектор сообщений соответствует сообщению, когда селектор оценивается как true, когдаПоле заголовка сообщения и значения свойств заменяются их соответствующими идентификаторами в селекторе.

Поэтому вам необходимо установить свойство сообщения со значением, которое вы можете выбрать (например, с помощью javax)..jms.Message.setStringProperty ("destination", "abcdefg") ).

...