У меня есть приложение 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. Пожалуйста, предложите мне несколько решений