Я пытался запустить свое веб-приложение на основе Primefaces на клиентской машине WAS 6.1.0.23. Я пробовал как эталонную, так и Myfaces-реализации JSF2, у последней из которых есть инструкции по установке на этой конкретной версии сервера (http://wiki.apache.org/myfaces/Websphere_Installation).
Я включил необходимые библиотеки (перечислены ниже для каждой реализации отдельно) в файле .war приложения.
Эталонная реализация
- простые лица-5.0.jar
- jstl-api.jar
- jstl-impl.jar (оба 1.2.2)
- эль-апи-2.2.jar
- эль-импл-2.2.jar
- эль-ри-1.0.jar
- javax.faces.jar
- JDK 1.5
Реализация Myfaces
- Commons-beanutils-1.8.3.jar
- Commons-коллекции-3.2.jar
- общий кодек-1.3.jar
- Commons-дайджестер-1.8.jar
- commons-el.jar/(el-api-2.2.jar, el-impl-2.2.jar, el-ri-1.0.jar) [пробовал оба, похоже, распознается только последний]
- мои лица API-2.1.1
- myfaces-bundle-2.1.17.jar
- myfaces-импл-2.1.17.jar
- JDK 1.5
Я установил приложение для загрузки приложения классов в первую очередь.
Enterprise Applications > MyWebApp_war > Manage Modules > MyWebApp.war
Class loader order:
Classes loaded with application class loader first
При использовании эталонной реализации я постепенно добавлял необходимые библиотеки в файл .war, пока не получил исключение, которое не смог обойти.
[7/9/15 16:09:42:909 EDT] 00001183 WebApp E Exception caught while initializing context
java.lang.RuntimeException: java.lang.NoClassDefFoundError: java/util/ServiceLoader
at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:280)
at com.ibm.ws.wswebcontainer.webapp.WebApp.notifyServletContextCreated(WebApp.java:652)
at com.ibm.ws.webcontainer.webapp.WebApp.commonInitializationFinish(WebApp.java:355)
at com.ibm.ws.wswebcontainer.webapp.WebApp.initialize(WebApp.java:292)
at com.ibm.ws.wswebcontainer.webapp.WebGroup.addWebApplication(WebGroup.java:92)
at com.ibm.ws.wswebcontainer.VirtualHost.addWebApplication(VirtualHost.java:157)
at com.ibm.ws.wswebcontainer.WebContainer.addWebApp(WebContainer.java:671)
at com.ibm.ws.wswebcontainer.WebContainer.addWebApplication(WebContainer.java:624)
at com.ibm.ws.webcontainer.component.WebContainerImpl.install(WebContainerImpl.java:335)
at com.ibm.ws.webcontainer.component.WebContainerImpl.start(WebContainerImpl.java:551)
at com.ibm.ws.runtime.component.ApplicationMgrImpl.start(ApplicationMgrImpl.java:1274)
at com.ibm.ws.runtime.component.DeployedApplicationImpl.fireDeployedObjectStart(DeployedApplicationImpl.java:1138)
at com.ibm.ws.runtime.component.DeployedModuleImpl.start(DeployedModuleImpl.java:569)
at com.ibm.ws.runtime.component.DeployedApplicationImpl.start(DeployedApplicationImpl.java:817)
at com.ibm.ws.runtime.component.ApplicationMgrImpl.startApplication(ApplicationMgrImpl.java:921)
at com.ibm.ws.runtime.component.ApplicationMgrImpl$1.run(ApplicationMgrImpl.java:1461)
at com.ibm.ws.security.auth.ContextManagerImpl.runAs(ContextManagerImpl.java:4132)
at com.ibm.ws.security.auth.ContextManagerImpl.runAsSystem(ContextManagerImpl.java:4229)
at com.ibm.ws.security.core.SecurityContext.runAsSystem(SecurityContext.java:245)
at com.ibm.ws.runtime.component.ApplicationMgrImpl.startApplication(ApplicationMgrImpl.java:1466)
at sun.reflect.GeneratedMethodAccessor789.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:36)
at sun.reflect.GeneratedMethodAccessor41.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:243)
at javax.management.modelmbean.RequiredModelMBean.invokeMethod(RequiredModelMBean.java:1073)
at javax.management.modelmbean.RequiredModelMBean.invoke(RequiredModelMBean.java:954)
at com.sun.jmx.mbeanserver.DynamicMetaDataImpl.invoke(DynamicMetaDataImpl.java:213)
at com.sun.jmx.mbeanserver.MetaDataImpl.invoke(MetaDataImpl.java:220)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:815)
at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:784)
at com.ibm.ws.management.AdminServiceImpl$1.run(AdminServiceImpl.java:1106)
...
С реализацией Myfaces последовал тот же процесс. Однако запустить приложение с файлом commons-el.jar не удалось. Таким образом, переключение на el-api-2.2.jar, el-impl-2.2.jar и el-ri-1.0.jar привело к запуску приложения и перехвату NameNotFoundException в пространстве имен JSTL.
Warning: The page /template/common/commonLayout.xhtml declares namespace http://xmlns.jcp.org/jsf/core and uses the tag f:view , but no TagLibrary associated to namespace.
Следующий фрагмент представляет собой дополнение к WEB-INF/web.xml, которое изменилось на использование предоставленной реализации языка выражений. За ним следует дамп System out.
<context-param>
<param-name>org.apache.myfaces.EXPRESSION_FACTORY</param-name>
<param-value>com.sun.el.ExpressionFactoryImpl</param-value>
</context-param>
<context-param>
<param-name>com.sun.faces.expressionFactory</param-name>
<param-value>com.sun.el.ExpressionFactoryImpl</param-value>
</context-param>
Извините, SystemOut.log слишком длинный для прямой вставки: http://pastebin.com/JQ2br2Dq
Итак, мой вопрос: кто-нибудь успешно получил веб-приложение на основе JSF2 (Primefaces) для работы на WAS 6.1, и каковы пошаговые инструкции для этого? Спасибо большое за помощь.
Также Н.Б. известно, что это приложение работает со всеми версиями Apache Tomcat, поддерживающими JSF2.