Liferay 消息侦听器(消息总线)类路径



我在Liferay(CE 6.2.5 GA6)中实现了消息侦听器,以将创建/更新的DLFileEntry异步存储在外部DMS中(调用外部WS来存储它们)。

我创建了一个JAR文件,其中包含我的WS类的接口,该类位于tomcat的lib/ext文件夹中。

我在这个JAR文件中有一个ServiceLocator类,它是在我的web应用程序的Spring上下文中初始化的。服务定位器的初始化似乎工作得很好,我能够访问其他 Web 应用程序中的服务实例。但是,当我尝试从 MessageListener 类访问服务定位器服务时,实例为空。

据我了解,MessageListener 类是通过 web.xml portalContextConfigLocation context-param 使用 spring-messaging.xml 文件实例化的。我怀疑运行消息侦听器的 thready 与我的 web 应用程序具有不同的类加载器。这就是我尝试打印运行消息侦听器的线程的类路径的原因。我很惊讶类路径不包含来自 tomcat 的 lib/ext 文件夹中的任何 JAR 文件。

这是有意的还是错误?有没有人遇到类似的问题?

任何帮助,不胜感激。

我想我已经找到了解决方案。似乎我只需要将消息传递弹簧.xml上下文初始化从 web 中的上下文参数更改为portalContextConfigLocation上下文参数.xml如下所示contextConfigLocation

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-context/portlet-application-context.xml, /META-INF/messaging-spring.xml</param-value>
</context-param>

消息侦听器与我的 Web 应用程序的其余部分一样位于同一个类加载器中。

相关内容

最新更新