我在Liferay(CE 6.2.5 GA6)中实现了一个消息监听器,以便在外部DMS中异步存储创建/更新的DLFileEntries(调用外部WS来存储它们)。
我创建了一个JAR文件,其中包含我的WS类的接口,该类位于tomcat的lib / ext文件夹中。
我在这个JAR文件中有一个ServiceLocator类,它在我的webapp的Spring上下文中初始化。服务定位器的初始化似乎工作正常,我能够访问其他Web应用程序中的服务实例。但是,当我尝试从MessageListener类访问服务定位器服务时,instances为null。
据我所知,MessageListener类是使用spring-messaging.xml文件通过web.xml portalContextConfigLocation context-param实例化的。我怀疑消息监听器运行的时间与我的webapp有不同的类加载器。这就是为什么我试图打印消息监听器运行的线程的类路径的原因。我很惊讶类路径不包含来自tomcat的lib / ext文件夹的任何JAR文件。
这是故意还是错误?有没有人遇到过类似的问题?
感谢任何帮助。
答案 0 :(得分:0)
我想我找到了解决方案。好像我只需要将messaging-spring.xml上下文初始化从web.xml中的portalContextConfigLocation
上下文参数更改为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>
消息监听器与我的webapp的其余部分在同一个类加载器中。