Свойство IBM MQ Message имеет значение null в MDB

Я публикую текстовое сообщение JMS в теме, и потребитель может потребителю ( MDB) текстовое сообщение. Но не удалось получить свойство Message Object и String. это ноль в стороне потребителя MDB. Я определил MDB в ejb-jar.xml в папке META-INF. я использую

TomEE plus 7.0.2 JMS 2.0 IBM MQ 8 JDK 1.8 Тема

Я привел ниже упомянутый официальный пример Томи. В примере они использовали tomee.xml, вместо этого я использовал resource.xml и не использовал web.xml

Потребитель - MessageDrivenBean

Потребитель может получить текстовое или объектное сообщение. Но свойство Message имеет значение null.

http://tomee.apache.org/tomee-and-webspheremq.html

@Resource(name = "qcf") 
    private ConnectionFactory connectionFactory; 
    @Resource(name = "wmq-javax.jms.Topic") 
    private Topic topic; 
    Connection connection = connectionFactory.createConnection(); 
    Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); 
    MessageProducer producer = session.createProducer(topic); 
    TextMessage message = session.createTextMessage(); 
    message.setText("Test Message"); 
    message.setObjectProperty("a","b"); 
    message.setStringProperty("c","D"); 
    connection.start(); 
    producer.send(message); 
    session.close(); 
    connection.close(); 

потребитель

<ejb-jar id="ejb-jar_ID" version="3.1"
      xmlns="http://java.sun.com/xml/ns/javaee"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                          http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd">

  <display-name>SampleTransactionMDB</display-name>
  <enterprise-beans>
    <message-driven>
      <display-name>SampleTransactionMDB</display-name>
      <ejb-name>SampleTransactionMDB</ejb-name>
      <ejb-class>com.example.SampleTransactionMDB</ejb-class>
      <transaction-type>Container</transaction-type>
      <activation-config>
        <activation-config-property>
          <activation-config-property-name>destinationType</activation-config-property-name>
          <activation-config-property-value>javax.jms.Queue</activation-config-property-value>
        </activation-config-property>
        <activation-config-property>
          <activation-config-property-name>destination</activation-config-property-name>
          <activation-config-property-value>openejb:Resource/projectname/topicname</activation-config-property-value>
        </activation-config-property> 
      </activation-config>

        <activation-config-property>
          <activation-config-property-name>useJNDI</activation-config-property-name>
          <activation-config-property-value>true</activation-config-property-value>
        </activation-config-property>

        <activation-config-property>
          <activation-config-property-name>HostName</activation-config-property-name>
          <activation-config-property-value>x.x.x.x</activation-config-property-value>
        </activation-config-property>

        <activation-config-property>
          <activation-config-property-name>Port</activation-config-property-name>
          <activation-config-property-value>123</activation-config-property-value>
        </activation-config-property>
        <activation-config-property>
          <activation-config-property-name>QueueManager</activation-config-property-name>
          <activation-config-property-value>xxxxx</activation-config-property-value>
        </activation-config-property>
        <activation-config-property>
          <activation-config-property-name>Channel</activation-config-property-name>
          <activation-config-property-value>xxxx</activation-config-property-value>
        </activation-config-property>
        <activation-config-property>
          <activation-config-property-name>TransportType</activation-config-property-name>
          <activation-config-property-value>CLIENT</activation-config-property-value>
        </activation-config-property>
        <activation-config-property>
          <activation-config-property-name>subscriptionName</activation-config-property-name>
          <activation-config-property-value>xxxxxx</activation-config-property-value>
        </activation-config-property>
        <activation-config-property>
          <activation-config-property-name>sharedSubscription</activation-config-property-name>
          <activation-config-property-value>true</activation-config-property-value>
        </activation-config-property>


    </message-driven>  
  </enterprise-beans>
  <assembly-descriptor>
  </assembly-descriptor>
</ejb-jar>

Укажите, почему в сообщении MDB свойство сообщения имеет значение null.

2 ответа

Решение

Я нашел основную причину проблемы. это моя ошибка. Целевым клиентом TopicProxy должен быть JMS. Я неправильно настроен как MQ. так что я смог получить сообщение, но не собственность.

После изменения значения targetClient на JMS. Я могу получить сообщение и собственность

http://tomee.apache.org/tomee-and-webspheremq.html

MessageProducer продюсер = session.createProducer(очередь);

Если вы публикуете сообщение в теме, то почему вы используете переменную с именем "очередь"? Строка темы обычно выглядит как "test/ABC/one" (без кавычек).

Во-вторых, почему вы не опубликовали код для потребителя? Обновите исходную публикацию, включив в нее код потребителя.

Другие вопросы по тегам