问题描述
我在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 (将#修改为@)