在TomEE中配置消息驱动Bean

问题描述

我在TomEE中为消息驱动Bean进行了以下配置。 下面是ejb-jar.xml

<ejb-jar xmlns="http://java.sun.com/xml/ns/javaee" Metadata-complete="true">
  <enterprise-beans>

    <message-driven>

      <ejb-name>SearchExtract</ejb-name>
      <ejb-class>com.tlr.searchextract.messages.MessageTrigger_ABean</ejb-class>

      <messaging-type>javax.jms.MessageListener</messaging-type>

      <activation-config>
        <activation-config-property>
          <activation-config-property-name>destination</activation-config-property-name>
          <activation-config-property-value>COMSERV.Queue</activation-config-property-value>
        </activation-config-property>
        <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>channel</activation-config-property-name>
          <activation-config-property-value>CLIENTCONNECTION</activation-config-property-value>
        </activation-config-property>
         <activation-config-property>
          <activation-config-property-name>host</activation-config-property-name>
          <activation-config-property-value>reese</activation-config-property-value>
        </activation-config-property>
         <activation-config-property>
          <activation-config-property-name>port</activation-config-property-name>
          <activation-config-property-value>1414</activation-config-property-value>
        </activation-config-property>
         <activation-config-property>
          <activation-config-property-name>transportType</activation-config-property-name>
          <activation-config-property-value>1</activation-config-property-value>
        </activation-config-property>
      </activation-config>

      <resource-ref>
        <res-ref-name>java:comp/env/QueueConnectionFactory</res-ref-name>
        <res-type>javax.jms.ConnectionFactory</res-type>
        <injection-target>
          <injection-target-class>com.tlr.searchextract.messages.MessageTrigger_ABean</injection-target-class>
          <injection-target-name>connectionFactory</injection-target-name>
        </injection-target>
      </resource-ref>

      <resource-env-ref>
        <resource-env-ref-name>java:comp/env/AnswerQueue</resource-env-ref-name>
        <resource-env-ref-type>javax.jms.Queue</resource-env-ref-type>
        <mapped-name>AnswerQueue</mapped-name>
        <injection-target>
          <injection-target-class>com.tlr.searchextract.messages.MessageTrigger_ABean</injection-target-class>
          <injection-target-name>answerQueue</injection-target-name>
        </injection-target>
      </resource-env-ref>

    </message-driven>

  </enterprise-beans>
</ejb-jar>

下面是实现MessageListener的代码

import javax.jms.*;
import javax.ejb.EJBException;
import javax.ejb.MessageDriven;
import javax.ejb.MessageDrivenBean;
import javax.ejb.MessageDrivenContext;
import javax.ejb.Stateless;
import javax.inject.Inject;
import javax.annotation.Resource;
import javax.ejb.ActivationConfigProperty;
/**
 * Bean implementation class for Enterprise Bean: MessageTrigger_A
 */

public class MessageTrigger_ABean
    implements MessageListener {
    @Resource(name = "COMSERV.Queue")
    private ConnectionFactory connectionFactory;
    

    /**
     * onMessage
     */
    public void onMessage(Message msg) {
        
        String messageText = "";
         System.out.println("inside onMessage of MessageTrigger_ABean ");
        try {

            if (msg instanceof BytesMessage) {

                int length;
                byte[] buf2 = new byte[100];
                StringBuffer sb = new StringBuffer();
                BytesMessage bytesMessage = ((BytesMessage) msg);
                do {
                    length = bytesMessage.readBytes(buf2);
                    if (length != -1) {
                        for (int i = 0; i < length; i++) {
                            //System.out.print((char) buf2[i]);
                            sb.append((char) buf2[i]);
                        }
                    }
                }
                while (length >= 100);
                messageText = sb.toString();

            }
            else if (msg instanceof TextMessage) {
                messageText = ((TextMessage) msg).getText();
            }

            int angleLeft = 0;
            angleLeft = messageText.indexOf("<");
            messageText = messageText.substring(angleLeft,messageText.length());
            
            MessageHandler mh = new MessageHandler();
            System.out.println("messagehandler java file:"+messageText);
            //mh.processMessages(messageText);

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

使用上述配置,即使消息存在于队列中,应用程序也不会从MQ读取消息。现在根本不触发onMessage方法。请帮我哪里错了。 TomEE版本8.0.4 Java 1.8

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)