weblogic12c - 将 ActiveMQ Artemis 7.4 与 Weblogic 12.x 桥接时出现“无效代理 URL”错误
问题描述
我正在尝试在 Oracle 12.x 和 Redhat ActiveMQ Artemis 7.4 之间建立桥梁。这是建立桥接器所做的:
- 将 artemis-jms-client-all-2.9.0.redhat-00005.jar 设置为 WL 类路径
- 将以下属性设置为 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
URL调用的连接工厂。amq.xaqcf.myqueue
试试这个:
connectionFactory.amq.xaqcf.myqueue=tcp://brokername:61616?type=XA_CF
这些属性的语法在Artemis 文档中定义。
推荐阅读
- python - 具有持续部署的 Celery
- javascript - Webpack4 splitChunks & html-webpack-plugin MPA
- c# - System.DllNotFoundException:'无法加载 DLL'libwkhtmltox':找不到指定的模块。(来自 HRESULT 的异常:0x8007007E)'
- ajax - aAuto 只刷新 div ajax
- c - 我找不到编译器中指出的函数
- es6-modules - 何时将多个导入合并到一个文件中
- python - 如何通过给定的列列表对 pandas datafame 列进行排序
- docker - 重启 docker Windows 10 命令行
- javascript - babel 转译代码使用绝对导入
- ruby - 根据哈希中的键获取值