【发布时间】:2013-05-18 21:28:29
【问题描述】:
我想从 Netbeans7.1 (Glassfish 3.1.1) 中的 JSF 实现 Mojarra 2.1.3 升级。
您可能会首先问我为什么不直接升级到 Netbeans7.3,原因包括它运行 Glassfish 3.1.2.2 并且我的 Web 应用程序中有一些其他 3rd 方软件尚不兼容Glassfish 高于 3.1.1,而且它也只有 Mojarra 2.1.6。
我以前可以通过简单地替换 /glassfish/modules 下的 jsf-api.jar 和 jsf-impl.jar 来升级 Mojarra,但这不适用于:
https://maven.java.net/content/repositories/releases/com/sun/faces/jsf-api/2.1.21/jsf-api-2.1.21.jar https://maven.java.net/content/repositories/releases/com/sun/faces/jsf-impl/2.1.21/jsf-impl-2.1.21.jar
我收到以下错误:
SEVERE: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.sun.enterprise.glassfish.bootstrap.GlassFishMain.main(GlassFishMain.java:97)
at com.sun.enterprise.glassfish.bootstrap.ASMain.main(ASMain.java:55)
Caused by: com.sun.enterprise.module.ResolveError: Failed to start Bundle Id [301] State [INSTALLED] [org.glassfish.web.weld-integration(Weld integration for glassfish):3.1.1]
at org.jvnet.hk2.osgiadapter.OSGiModuleImpl.start(OSGiModuleImpl.java:177)
at org.jvnet.hk2.osgiadapter.OSGiModuleImpl$2$1$1.loadClass(OSGiModuleImpl.java:344)
at com.sun.hk2.component.LazyInhabitant.loadClass(LazyInhabitant.java:124)
at com.sun.hk2.component.LazyInhabitant.fetch(LazyInhabitant.java:111)
at com.sun.hk2.component.EventPublishingInhabitant.get(EventPublishingInhabitant.java:135)
at com.sun.hk2.component.AbstractInhabitantImpl.get(AbstractInhabitantImpl.java:76)
at org.jvnet.hk2.component.Habitat$5.get(Habitat.java:701)
at java.util.AbstractList$Itr.next(AbstractList.java:345)
at java.util.AbstractCollection.toArray(AbstractCollection.java:124)
at java.util.ArrayList.addAll(ArrayList.java:472)
at com.sun.enterprise.v3.server.SnifferManagerImpl.getSniffers(SnifferManagerImpl.java:92)
at com.sun.enterprise.v3.server.SnifferManagerImpl.getSniffer(SnifferManagerImpl.java:120)
at com.sun.enterprise.v3.server.ApplicationLifecycle.getSniffersFromApp(ApplicationLifecycle.java:2140)
at com.sun.enterprise.v3.server.ApplicationLoaderService.processApplication(ApplicationLoaderService.java:375)
at com.sun.enterprise.v3.server.ApplicationLoaderService.postConstruct(ApplicationLoaderService.java:219)
at com.sun.hk2.component.AbstractCreatorImpl.inject(AbstractCreatorImpl.java:131)
at com.sun.hk2.component.ConstructorCreator.initialize(ConstructorCreator.java:91)
at com.sun.hk2.component.AbstractCreatorImpl.get(AbstractCreatorImpl.java:82)
at com.sun.hk2.component.SingletonInhabitant.get(SingletonInhabitant.java:67)
at com.sun.hk2.component.EventPublishingInhabitant.get(EventPublishingInhabitant.java:139)
at com.sun.hk2.component.AbstractInhabitantImpl.get(AbstractInhabitantImpl.java:76)
at com.sun.enterprise.v3.server.AppServerStartup.run(AppServerStartup.java:253)
at com.sun.enterprise.v3.server.AppServerStartup.doStart(AppServerStartup.java:145)
at com.sun.enterprise.v3.server.AppServerStartup.start(AppServerStartup.java:136)
at com.sun.enterprise.glassfish.bootstrap.GlassFishImpl.start(GlassFishImpl.java:79)
at com.sun.enterprise.glassfish.bootstrap.GlassFishDecorator.start(GlassFishDecorator.java:63)
at com.sun.enterprise.glassfish.bootstrap.osgi.OSGiGlassFishImpl.start(OSGiGlassFishImpl.java:69)
at com.sun.enterprise.glassfish.bootstrap.GlassFishMain$Launcher.launch(GlassFishMain.java:117)
... 6 more
Caused by: org.osgi.framework.BundleException: Unresolved constraint in bundle org.glassfish.web.weld-integration [301]: Unable to resolve 301.0: missing requirement [301.0] package; (&(package=com.sun.faces.spi)(version>=2.1.0)) [caused by: Unable to resolve 213.1: missing requirement [213.1] package; (package=javax.faces) [caused by: Unable to resolve 211.1: missing requirement [211.1] package; (&(package=javax.el)(version>=2.2.1))]]
at org.apache.felix.framework.Felix.resolveBundle(Felix.java:3443)
at org.apache.felix.framework.Felix.startBundle(Felix.java:1727)
at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:922)
at org.jvnet.hk2.osgiadapter.OSGiModuleImpl.start(OSGiModuleImpl.java:169)
我尝试了特定于 Web 应用的 JSF,但也失败了:
glassfish change default jsf impl
添加到 web.xml:
<class-loader delegate="false" />
<property name="useBundledJsf" value="true" />
我得到错误:
Error occurred during deployment: Exception while loading the app :
java.lang.IllegalStateException: ContainerBase.addChild: start:
org.apache.catalina.LifecycleException: java.lang.RuntimeException:
com.sun.faces.config.ConfigurationException: CONFIGURATION FAILED!
org.glassfish.weld.jsf.WeldFacesConfigProvider cannot be cast to
com.sun.faces.spi.ConfigurationResourceProvider. Please see server.log for more details.
感谢您的建议。
【问题讨论】:
-
我尝试在 glassfish 替换 jsf-impl.jar 和 jsf-api.jar 后重新启动之前删除 glassfish/domains/domain1/osgi-cache 中的所有内容。 Mojarra 升级技术发生了哪些变化,新升级要求的参考/文档在哪里?
-
我刚从 BalusC 找到这个:stackoverflow.com/questions/12792222/…“只需将 Glassfish /modules 文件夹中的 jsf-api.jar 和 jsf-impl.jar 替换为单个 javax.faces.jar 文件即可。因为Mojarra 2.1.6 的构建系统已更改为符合 Java EE Maven 规则,另请参见 issue 2028。这导致 API 和 impl 被合并到一个 JAR 文件中。java.net/jira/browse/JAVASERVERFACES-2028"
-
我按照BalusC的建议做了,把jsf-api.jar和jsf-impl.jar都换成javax.faces.jar,但是Netbeans固执地拒绝看,javax.faces.jar不会出现在 Glassfish 服务器库(在 Netbeans7.1 中)下。我删除了 osgi-cache,我什至删除了 .netbeans/7.1/var/cache,但 Netbeans 看不到它。我收到 import javax.faces.bean.ManagedBean 之类的导入错误。
-
我尝试在 NetBeans7.1 中删除/添加服务器,但没有帮助。我已经删除了 osgi-cache 和 NetBeans ~/.netbeans/7.1/var/cache (在 Mac OS X 上)。 NetBeans7.1 顽固地拒绝在 Glassfish 服务器库下显示 javax.faces.jar,我仍然遇到导入错误。
-
另外,将 jsf-api.jar 和 jsf-impl.jar 替换为 javax.faces.jar 后,Netbeans7.1 将不再显示项目的框架,它会挂起。我从未如此频繁地使用 Mac OS X 的“强制退出”功能。我只是无法让 NetBeans7.1 看到 javax.faces.jar。
标签: jsf jsf-2 glassfish mojarra