JSF как обновление до Mojarra 2.1.21 в Netbeans7.1 (только сбой jsf-api.jar и jsf-impl.jar)
Я хочу обновить версию JSF Mojarra 2.1.3 в Netbeans7.1 (Glassfish 3.1.1).
Сначала вы можете спросить, почему я не просто обновляюсь до Netbeans7.3, и, как следствие, он запускает Glassfish 3.1.2.2 и что у меня есть другое стороннее программное обеспечение в моем веб-приложении, которое еще не совместимо с Glassfish выше 3.1.1, и, кроме того, он все равно имеет Mojarra 2.1.6.
Раньше я мог модернизировать Mojarra, просто заменив jsf-api.jar и jsf-impl.jar под /glassfish/modules, но это не сработает с:
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)
Я пробовал специфический JSF для веб-приложений, но это также не удалось:
glassfish изменит значение по умолчанию 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.
Благодарен за предложения.
Ответы
Ответ 1
Попробуйте выполнить следующие шаги.
- Загрузите jsf 2.1.21 jar из здесь
- Переименуйте его в javax.faces.jar.
- Сделайте резервную копию javax.faces.jar доступной в docroot\glassfish\modules
- Вставить и заменить старый javax.faces.jar с загруженным javax.faces.jar, доступным в docroot\glassfish\modules
- Удалить кеш osgi glassfish3\glassfish\osgi для изменений в
вступить в силу
Ответ 2
ОК У меня, наконец, есть 2 метода обхода (Moharra-2.1.21) с Netbeans7.1.
Во-первых, следующий рекомендуемый подход не так далеко, как я могу сказать, работать в Netbeans7.1, она упорно отказывается признать сервер установлен javax.faces.jar.
Из https://weblogs.java.net/blog/edburns/archive/2011/09/26/try-out-mojarra-220-snapshot?force=714:
Как только вы загрузите файл javax.faces.jar, вы должны сделать несколько шагов, чтобы установить его в GlassFish 3.1 или 3.1.1.
Удалите jsf-api.jar и jsf-impl.jar из каталога модулей.
Поместите javax.faces.jar в каталог модулей.
Вы должны изменить файл по умолчанию-web.xml в доменах /domain 1/config и lib/templates. В в каждом каталоге удалите все упоминания jsf-api.jar и jsf-impl.jar из файла default.web.xml. Вместо двух банок добавьте ссылку на javax.faces.jar.
Независимо от того, что я делаю с Netbeans7.1 (и независимо от того, насколько ясны кеши osgi-кеш и netbeans, или удаляйте, то повторно добавляете сервер в Netbeans7.1 или сколько раз я перезапускаю glassfish3.1.1 и/или netbeans7. 1), Netbeans7.1 НЕ увидит javax.faces.jar.
Если вы попытаетесь добавить javax.faces.jar(только) в свои веб-приложения и используйте это в glassfish-web.xml, чтобы использовать JSF для веб-приложений, это предотвратит импортные ошибки в вашем Netbeans7.1, но он все равно не будет работать:
<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.
Причина здесь описана: http://java.dzone.com/articles/upgrading-latest-mojarra
Проблема заключается в том, что существуют две версии ConfigurationResourceProvider в пути к классу: один в веб-приложении (ваш связанный файл jar), а второй - в загрузчике родительского класса уровня (предоставляется GlassFish). WeldFacesConfigProvider расширяет ConfigurationResourceProvider у загрузчика родительского класса, но он заканчивается добавьте это в ConfigurationResourceProvider в класс веб-приложения погрузчик.... Обходной путь: добавление отсутствующей зависимости к вашему приложению. Если вы не можете использовать броузеры классов, вы должны сделать доступную часть недоступной на правый класс-загрузчик. Не заменяя javax.faces.jar в вашем серверных модулей приводит к добавлению волшебного WeldFacesConfigProvider к ваше приложение. Он содержится в glassfish3\glassfish\modules\weld-integration.jar и просто добавив, что в качестве дополнительной библиотеки для вашего приложения вы также решить проблему.
Теперь у вас есть 2 обходной вариант:
-
Включите файл weld-integration.jar в свои веб-приложения и запустите с настройками JSF веб-приложения в glassfish-web.xml.
-
Грязный трюк: с помощью... /glassfish/modules/javax.faces.jar все еще на месте, а также в ваших веб-приложениях, отключите или раскомментируйте бит в вашем glassfish-web.xml. Затем он будет запускаться с сервером javax.faces.jar(и увидит /modules/weld -integration.jar), а Netbeans увидит специфическую для веб-приложения lib для импорта.
Это неудовлетворительно, я не рассматриваю вопрос полностью.
Q: Как запустить JSF Mojarra 2.1.21 в качестве сервера JSF для Glassfish3.1.1 в NetBeans7.1?
И снова причина, по которой я не могу просто обновить Netbeans + Glassfish, состоит в том, что у меня есть несколько проблем с ObjectDB с версиями Glassfish выше 3.1.1, поэтому я так категоричен в отношении установки JSF Mojarra 2.1.21 на Netbeans7 0,1 + Glassfish3.1.1.
Благодарен за любые дальнейшие предложения.