在 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 问题的主要内容,如果未能解决你的问题,请参考以下文章