Настройте прослушиватель очереди в контексте Tomcat. xml - PullRequest
0 голосов
/ 05 августа 2020

У меня есть приложение Tomcat с конфигурацией компонента очереди ниже в контексте. xml папки Tomcat.

<Resource CHAN="CLIENTCONNECTION" 
         HOST="sdgtestmq.int.westgroup.com" PORT="1414" 
         QMGR="VERITY" TRAN="1" 
         auth="Container" 
         description="JMS Queue Connection Factory for sending messages" 
         factory="com.ibm.mq.jms.MQQueueConnectionFactoryFactory" 
         name="jms/messagetrigger_a" type="com.ibm.mq.jms.MQQueueConnectionFactory"/>
         
         <Resource
        name="jms/messagetriggerQ_a"
        auth="Container"
        type="com.ibm.mq.jms.MQQueue"
        factory="com.ibm.mq.jms.MQQueueFactory"
        description="JMS Queue Connection Factory for sending messages"
        QU="COMSERV.SRCHEXT.EVENTS.PUBLISH.TEST.Q01"
       />
      
      

Я обращаюсь к нему через код java, как показано ниже:

class Test{

public static void main(String[] args) throws Exception {
        System.out.println("inside main method");
        Context ctx = null;
        System.out.println("creating context");
        ctx = new InitialContext();
        System.out.println("create QueueConnectionFactory");
        QueueConnectionFactory factory = (QueueConnectionFactory) ctx.lookup("jms/messagetrigger_a");
        System.out.println("create queue");
        Queue queue =(Queue)ctx.lookup("jms/messagetriggerQ_a");
        System.out.println("create queueconnection");
        QueueConnection con=factory.createQueueConnection();
        System.out.println("create session");
        QueueSession session = con.createQueueSession(true, Session.AUTO_ACKNOWLEDGE);
        System.out.println("session: "+session);
        MessageConsumer consumer = session.createConsumer(queue);
        System.out.println("conusmer created");
        MessageTrigger_ABean msgTrigger = new MessageTrigger_ABean();
        consumer.setMessageListener(msgTrigger);
        con.start();
         
        }
    }

Ниже приведен код слушателя (MessageTrigger_ABean)

public class MessageTrigger_ABean
    implements MessageListener {

    /**
     * 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());
            
        }
        
    }

    
}

В основном методе класса Test код выполняется только до строки ctx = new InitialContext (); а потом останавливается и выходит из потока. Может кто-нибудь сказать мне, почему строка QueueConnection con = factory.createQueueConnection (); не работает и не выдает исключений? он просто останавливается на этом месте. Я не хочу использовать ejb или spring. Пожалуйста, предложите мне несколько решений

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...