【问题标题】:"BeanLocator is null for servlet context", when using imported service.jar使用导入的 service.jar 时,“BeanLocator 对于 servlet 上下文为空”
【发布时间】:2023-03-15 13:18:02
【问题描述】:

我将来自一个portlet(我们称之为Portlet A)的service.jar 包含到另一个客户端Portlet 的WEB-INF/lib 文件夹中,以便客户端可以使用*LocalServiceUtil。请注意,这是我以前成功做过很多次的事情。

但是在这种情况下,我在调用 LocalServiceUtil 时遇到了这个运行时异常:

[PortletBeanLocatorUtil:38] BeanLocator is null for servlet context [Portlet A's portlet-name]

我几乎可以肯定 Portlet A 的项目属性或构建配置有问题,但我不知道该从哪里查看。 Liferay 论坛到处都是 BeanLocator 相关的问题,但每个人都有不同的解决方案

这两个项目都是为相同的 Liferay SDK 和 Tomcat 服务器版本设计和部署的。

有解决 BeanLocator 问题的想法吗?

【问题讨论】:

    标签: liferay-6 liferay-service-builder


    【解决方案1】:

    *service.jar 仅包括来自 portlet A 的服务的签名,即 *LocalService 和 *Service 接口、模型接口和 util 类(以及通常驻留在项目的 docroot 下的服务文件夹中的所有内容)树)而不是实现类。 因此,要使其工作,两个portlet 必须同时部署在服务器中(否则将找不到实现类)。 如果也是这种情况,您可以更改 portlet B 的 liferay-plugin-package.properties 文件并将 portlet A 添加为所需的部署上下文。这会自动注入后者的service.jar。

    【讨论】:

    • 感谢您的回答。但恐怕这不是我的情况,因为我将两个 webapps 都部署在同一个 tomcat 中。还有其他想法吗?
    • 您是否尝试将第二个 portlet 作为必需的部署上下文添加到第一个的 liferay-plugin-package.properties 中?
    • 很抱歉,我现在不能做这个测试。我终于采用了另一种解决方法:我没有在 Portlet B 中使用 portletA-services,而是在 Portlet A 中导入和使用 portletB-services,顺便说一句,它工作得很好。在第一次机会中,我会尝试您的建议,并会报告回来,但这需要稍等片刻。感谢您的帮助!
    猜你喜欢
    • 2016-01-12
    • 2011-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-19
    • 2022-11-04
    • 2021-07-18
    相关资源
    最近更新 更多