将 ActiveMQ Artemis 7.4 与 Weblogic 12.x 桥接时出现错误"Invalid broker URL"



我正在尝试在Oracle 12.x和Redhat ActiveMQ Artemis 7.4之间建立桥梁。这是为建立桥梁所做的工作:

  1. 将 artemis-jms-client-all-2.9.0.redhat-00005.jar 设置为 WL 类路径
  2. 将以下属性设置为 WL 类路径:
java.naming.factory.initial=org.apache.activemq.artemis.jndi.ActiveMQInitialContextFactory
connectionFactory.ConnectionFactory=amq.xaqcf.myqueue
queue.queues/myqueue=myqueue

但是,我收到以下错误:

java.lang.Exception: javax.resource.ResourceException: ConnectionFactory: failed to get initial context (InitialContextFactory =org.apache.activemq.artemis.jndi.ActiveMQInitialContextFactory, url = tcp://brokername:61616?type=XA_CF, user name = amq)
at weblogic.jms.adapter.JMSBaseConnection.throwResourceException(JMSBaseConnection.java:1750)
at weblogic.jms.adapter.JMSBaseConnection.startInternal(JMSBaseConnection.java:538)
at weblogic.jms.adapter.JMSBaseConnection.start(JMSBaseConnection.java:264)
at 
...
-------------- Linked Exception ------------
javax.naming.NamingException: Invalid broker URL
at org.apache.activemq.artemis.jndi.ActiveMQInitialContextFactory.getInitialContext(ActiveMQInitialContextFactory.java:85)

根据ActiveMQInitialContextFactory.java,这是由于以下块:

for (Map.Entry<?, ?> entry : environment.entrySet()) {
String key = entry.getKey().toString();
if (key.startsWith(connectionFactoryPrefix)) {
String jndiName = key.substring(connectionFactoryPrefix.length());
try {
data.put(jndiName, createConnectionFactory((String) environment.get(key), jndiName));
} catch (Exception e) {
e.printStackTrace();
throw new NamingException("Invalid broker URL");
}
}
}

以下是e.printStackTrace()的例外情况:

Exception: javax.naming.NameNotFoundException: amq.xaqcf.myqueue
at org.apache.activemq.artemis.jndi.ReadOnlyContext.lookup(ReadOnlyContext.java:236) 
at javax.naming.InitialContext.lookup(InitialContext.java:417)

我在Oracle Weblogic 12.x和ActiveMQ 6.3之间架起桥接没有问题。这里提出了类似的问题 是否有兼容Java 1.7的Artemis JMS客户端?但它适用于使用 Java 1.7 的 Oracle SOA 10.x。

我怎样才能让它工作?ActiveMQInitialContextFactory.java应该适应吗?

您的问题来自您尝试查找连接工厂amq.xaqcf.myqueue,但您实际上尚未在 JNDI 属性中定义该连接工厂。相反,你有这一行:

connectionFactory.ConnectionFactory=amq.xaqcf.myqueue

此行实际上定义了一个名为ConnectionFactory的连接工厂,其 URLamq.xaqcf.myqueue无效。试试这个:

connectionFactory.amq.xaqcf.myqueue=tcp://brokername:61616?type=XA_CF

这些属性的语法在 Artemis 文档中定义。

相关内容

  • 没有找到相关文章

最新更新