在 Liferay 中集成 ActiveMQ 的 Spring 问题

Posted

技术标签:

【中文标题】在 Liferay 中集成 ActiveMQ 的 Spring 问题【英文标题】:Spring problems integrating ActiveMQ inside Liferay 【发布时间】:2013-12-10 10:37:37 【问题描述】:

我正在修改一个使用服务层的基于 Maven 的 Liferay portlet (6.1.1)。

我的需要是向 portlet 添加一个 ActiveMQ 侦听器(用于与外部产品通信)。

我正在尝试使用集成的 spring 引擎 (3.0.7) 来实例化侦听器。

所以,首先,在 ext-sping.xml(由 Liferay 自动管理)中,我定义了以下 bean: - 一个连接工厂:org.apache.activemq.ActiveMQConnectionFactory - 一个缓存连接工厂 (org.springframework.jms.connection.CachingConnectionFactory),其中 targetConnectionFactory 引用了以前的 bean。

在部署时我得到的错误是:

Cannot convert value of type [org.apache.activemq.ActiveMQConnectionFactory] to 
required type [javax.jms.ConnectionFactory] for property 
'targetConnectionFactory': no matching editors or conversion strategy found

显然org.apache.activemq.ActiveMQConnectionFactory 实现了javax.jms.ConnectionFactory,实际上如果我尝试通过代码设置值,则部署成功完成。

在我的 pom.xml 中,我尝试将依赖项添加到 activemq-core(只是 activemq)或 activemq-all(还包含 javax.jms 包),但没有成功。

这怎么可能?

谢谢

【问题讨论】:

【参考方案1】:

可能是类加载器问题 - 加载 CachingConnectionFactory 的类加载器解析为与加载 ActiveMQ 工厂的 javax.jms.ConnectionFactory 不同的 javax.jms.ConnectionFactory

在命令行上使用-verbose 运行以查看正在从哪些 jar(s) 类加载。

【讨论】:

是的......事实上另一个 jms.jar 文件存在于 tomcat lib 文件夹中。但它是否存在强制类加载器或类加载选项的方法?

以上是关于在 Liferay 中集成 ActiveMQ 的 Spring 问题的主要内容,如果未能解决你的问题,请参考以下文章

消息中间件MQ及ActiveMQ介绍

在Spring下集成ActiveMQ

在网站中集成 Paymetric.com

在SpringBoot中集成单元测试

在SpringBoot中集成单元测试

如何在 IOS 中集成 Javascript