我正在尝试在WebLogic 10.3.5上创建MDB(EJB 3.0)。在外部AMQ服务器上侦听队列。经过大量工作和教程组合后,在WebLogic上部署时会出现以下错误。
[EJB:015027]消息驱动的EJB是事务性的,但JNDI名称引用的JMS连接工厂:ActiveMQXAConnectionFactory不是JMS XA连接工厂。
以下是我所做工作的简要说明:
我已将相应的库添加到我的WLS类路径中(遵循此tuturial http://amadei.com.br/blog/index.php/connecting-weblogic-and-activemq),并且已按照教程中的说明创建了相应的JMS模块。我最初使用ActiveMQConnectionFactory和稍后使用ActiveMQXAConnectionFactory,我也忽略了jms。表示法只是将普通名称作为testQueue。
然后使用以下结构创建一个简单的MDB。 我明确定义了“connectionFactoryJndiName”属性,因为否则它会假定找不到WebLogic连接工厂,然后引发错误。
@MessageDriven(
activationConfig = {
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
@ActivationConfigProperty(propertyName = "destination", propertyValue = "testQueue"),
@ActivationConfigProperty(propertyName = "connectionFactoryJndiName", propertyValue = "ActiveMQXAConnectionFactory")
},
mappedName = "testQueue")
public class ROMELReceiver implements MessageListener {
/**
* Default constructor.
*/
public ROMELReceiver() {
// TODO Auto-generated constructor stub
}
/**
* @see MessageListener#onMessage(Message)
*/
public void onMessage(Message message) {
System.out.println("Message received");
}
}
此时我遇到了上述错误。即使我使用ActiveMQXAConnectionFactory而不是简单的ActiveMQConnectionFactory,Web逻辑服务器中的JNDI资源树也会将org.apache.activemq.ActiveMQConnectionFactory显示为我配置的连接工厂的类。
我错过了什么吗?或者这只是一种完全错误的方式来连接WebLogic和AMQ?提前致谢。
答案 0 :(得分:0)
我知道它已经很晚了,但最近我不得不做同样的事情并且遇到了同样的错误。 这篇文章帮助了我:
https://community.oracle.com/thread/3903705
基本上它说在weblogic中的模块上的外部服务器选项的jndi属性中添加一个新参数。
XA =真。
因为默认情况下activemq没有使用Xa连接。