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.

Благодарен за любые дальнейшие предложения.