Liferay 6使用Common Service Builder层错误 - BeanLocatorException - 尚未设置BeanLocator

Kzv*_*vi 10 exception spring-mvc liferay maven-3 liferay-6

我们正在尝试将liferay服务构建器用作所有portlet的公共层.我们创建了一个单独的公共portlet项目,我们使用service.xml构建服务.这为我们生成了一个service.jar文件.我们正在将这个jar复制到所有portlet WEB-INF/lib目录.

当我们运行portlet时,它会在日志上抛出以下错误,并且Portlet暂时不可用消息显示在portlet上.

14:43:17,447 ERROR [jsp:154] com.liferay.portal.kernel.bean.BeanLocatorException: BeanLocator has not been set
    at com.liferay.portal.kernel.bean.PortletBeanLocatorUtil.locate(PortletBeanLocatorUtil.java:40)
    at com.cogs.common.service.CourseLocalServiceUtil.getService(CourseLocalServiceUtil.java:223)
    at com.cogs.common.service.CourseLocalServiceUtil.getCoursesCount(CourseLocalServiceUtil.java:187)
    at org.apache.jsp.jsps.course.course_005fview_jsp._jspService(course_005fview_jsp.java:542)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)
    at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:551)
    at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:488)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)
Run Code Online (Sandbox Code Playgroud)

我确信这种方法应该无缝地工作.但发现有几个人在liferay论坛上抱怨它,但还没有找到任何解决方案.如果您找到一种方法将服务构建器用作公共层并且它对您有用,请告诉我们.

我们正在使用maven来构建所有portlet项目.

Liferay版本是6.0.5我们正在使用Spring Portlet MVC进行portlet开发.

Mar*_*lin 0

我的 spring portlet 的 BeenLocator 的问题是我的 portlet 的 spring 上下文在 liferay 的 spring 上下文之前被初始化。

我在我的构造函数中使用 ClassName className = ClassNameLocalServiceUtil.getClassName(JournalArticle.class.getName());。LFeray 的上下文未加载,因此出现错误。我将这段代码移到了当(仅在那个时候)第一个请求需要它时被调用。问题解决了。

因此,在 portlet 初始化期间不要依赖 lifery,而是对 liferay 的依赖关系进行某种“惰性”连接。