Liferay 6 Использование общего уровня Service Builder Ошибка - BeanLocatorException - BeanLocator не был установлен - PullRequest
10 голосов
/ 10 июня 2011

Мы пытаемся использовать Liferay Service Builder в качестве общего слоя для всех наших портлетов. Мы создали отдельный общий проект портлета, в котором мы создаем сервис с использованием service.xml. Он генерирует для нас файл service.jar. Мы копируем этот jar-файл во все портлеты WEB-INF / lib dir.

Когда мы запускаем портлет, он выдает следующую ошибку в журналах, и портлет временно недоступен, в портлете отображается сообщение.

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)

Я уверен, что этот подход должен работать без проблем. Но нашел несколько человек, жалующихся на это на форумах LifeRay, но не нашел никакого решения еще. Пожалуйста, дайте нам знать, если вы нашли способ использовать построитель сервисов в качестве общего слоя, и он сработал для вас.

Мы используем maven для создания всех проектов портлетов.

Liferay версия 6.0.5 И мы используем Spring Portlet MVC для разработки нашего портлета.

Ответы [ 11 ]

0 голосов
/ 18 ноября 2011

Проблема с BeenLocator с моим весенним портлетом для меня заключалась в том, что весенний контекст моего портлета инициализировался раньше, чем весенний контекст liferay.

Я использовал ClassName className = ClassNameLocalServiceUtil.getClassName(JournalArticle.class.getName()); в своем конструкторе.Контекст LIferay не был загружен, следовательно, ошибка.Я переместил этот фрагмент кода для вызова, когда (только в тот раз) первый запрос нуждался в этом.Проблема была решена.

Так что не зависите от времени жизни во время инициализации вашего портлета, сделайте своего рода «ленивое» соединение зависимостей с liferay.

...