2015-05-21 10 views
1

Я использую Java 8/Tomcat 8/OpenWebBeans 1.5.0/MyFaces 2.2.8/DeltaSpike 1.3.0.omnifaces начиная с openwebbeans 1.5.0?

Как я хочу использовать модуль openwebbeans-tomcat7, я поместил следующие банки в TOMCAT/Lib:

  • openwebbeans-веб-1.5.0.jar
  • openwebbeans-tomcat7-1.5.0 .jar
  • openwebbeans-СПИ-1.5.0.jar
  • openwebbeans-ресурс-1.5.0.jar
  • openwebbeans-JSF-1.5.0.jar
  • openwebbeans-осущ-1.5.0.jar
  • openwebbeans-el22-1.5.0.jar
  • xbean видоискатель затененных-4.1.jar
  • xbean-asm5-затененных-4.1.jar
  • MyFaces-осущ-2.2.8.jar
  • MyFaces-апи-2.2.8.jar
  • Джеронимо-atinject_1.0_spec-1.0.jar
  • Джеронимо-annotation_1.2_spec-1.0.jar
  • Джеронимо-validation_1.0_spec-1.1.jar
  • Джеронимо -stax -api_1.0_spec-1.0.jar
  • Джеронимо-servlet_3.0_spec-1.0.jar
  • Джеронимо-jcdi_1.1_spec-1.0.jar
  • Джеронимо-interceptor_1.2_spec-1.0.jar
  • Обще-варочного -1.8.jar
  • Викисклада BeanUtils-1.8.3.jar
  • Викисклада коллекции-3.2.jar
  • Обще-каротаж 1.1.1.jar
  • Обще-кодек-1.3.jar

Я также люблю использовать огромную библиотеку памятников. Таким образом, мой webapp имеет всевозможные функции в зависимости от того, как в WEB-INF/lib

Существует проблема с CDI с двумя версиями, которые я использую, 1.8.1 и 2.0. Мне кажется, что всемогущества начинаются до того, как openwebbeans есть, и поэтому не находит CDI.

С 1.8.1 эта проблема вызывает исключение, но она не блокируется, поскольку CDI не является обязательным в этой версии. В версии 2.0 он предотвращает запуск Webapp, так как в omnifaces 2.0 есть CDI в качестве требования.

С 1.8.1, журнал:

21-May-2015 23:07:17.678 INFO [main] org.apache.catalina.core.StandardService.startInternal Démarrage du service Catalina 
21-May-2015 23:07:17.678 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet Engine: Apache Tomcat/8.0.20 
21-May-2015 23:07:17.690 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDescriptor Déploiement du descripteur de configuration /opt/apache-tomcat-8.0.20/conf/Catalina/localhost/apps#presences#edit.xml 
21-May-2015 23:07:18.914 INFO [localhost-startStop-1] org.apache.catalina.core.StandardContext.addApplicationListener The listener "org.apache.webbeans.servlet.WebBeansConfigurationListener" is already configured for this context. The duplicate definition has been ignored. 
21-May-2015 23:07:19.199 SEVERE [localhost-startStop-1] org.apache.webbeans.web.tomcat7.TomcatInstanceManager.inject Error is occured while injecting the OpenWebBeans dependencies for instance [email protected] 
javax.enterprise.inject.UnsatisfiedResolutionException: Api type [org.omnifaces.cdi.eager.BeansInstantiator] is not found with the qualifiers 
Qualifiers: [@javax.enterprise.inject.Default()] 
for injection into Field Injection Point, field name : eagerBeansRepository, Bean Owner : [null] 
    at org.apache.webbeans.util.InjectionExceptionUtil.throwUnsatisfiedResolutionException(InjectionExceptionUtil.java:65) 
    at org.apache.webbeans.container.InjectionResolver.getInjectionPointBean(InjectionResolver.java:271) 
    at org.apache.webbeans.inject.AbstractInjectable.inject(AbstractInjectable.java:82) 
    at org.apache.webbeans.inject.InjectableField.doInjection(InjectableField.java:65) 
    at org.apache.webbeans.portable.InjectionTargetImpl.injectFields(InjectionTargetImpl.java:220) 
    at org.apache.webbeans.portable.InjectionTargetImpl.inject(InjectionTargetImpl.java:206) 
    at org.apache.webbeans.portable.InjectionTargetImpl.inject(InjectionTargetImpl.java:196) 
    at org.apache.webbeans.inject.OWBInjector.inject(OWBInjector.java:57) 
    at org.apache.webbeans.web.tomcat7.TomcatUtil.inject(TomcatUtil.java:40) 
    at org.apache.webbeans.web.tomcat7.TomcatInstanceManager.inject(TomcatInstanceManager.java:122) 
    at org.apache.webbeans.web.tomcat7.TomcatInstanceManager.newInstance(TomcatInstanceManager.java:88) 
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4650) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5162) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:725) 
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:701) 
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:717) 
    at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:581) 
    at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1683) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 

21-May-2015 23:07:19.201 SEVERE [localhost-startStop-1] org.apache.webbeans.web.tomcat7.TomcatInstanceManager.inject Error is occured while injecting the OpenWebBeans dependencies for instance [email protected] 
javax.enterprise.inject.UnsatisfiedResolutionException: Api type [org.omnifaces.cdi.eager.BeansInstantiator] is not found with the qualifiers 
Qualifiers: [@javax.enterprise.inject.Default()] 
for injection into Field Injection Point, field name : eagerBeansRepository, Bean Owner : [null] 
    at org.apache.webbeans.util.InjectionExceptionUtil.throwUnsatisfiedResolutionException(InjectionExceptionUtil.java:65) 
    at org.apache.webbeans.container.InjectionResolver.getInjectionPointBean(InjectionResolver.java:271) 
    at org.apache.webbeans.inject.AbstractInjectable.inject(AbstractInjectable.java:82) 
    at org.apache.webbeans.inject.InjectableField.doInjection(InjectableField.java:65) 
    at org.apache.webbeans.portable.InjectionTargetImpl.injectFields(InjectionTargetImpl.java:220) 
    at org.apache.webbeans.portable.InjectionTargetImpl.inject(InjectionTargetImpl.java:206) 
    at org.apache.webbeans.portable.InjectionTargetImpl.inject(InjectionTargetImpl.java:196) 
    at org.apache.webbeans.inject.OWBInjector.inject(OWBInjector.java:57) 
    at org.apache.webbeans.web.tomcat7.TomcatUtil.inject(TomcatUtil.java:40) 
    at org.apache.webbeans.web.tomcat7.TomcatInstanceManager.inject(TomcatInstanceManager.java:122) 
    at org.apache.webbeans.web.tomcat7.TomcatInstanceManager.newInstance(TomcatInstanceManager.java:88) 
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4650) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5162) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:725) 
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:701) 
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:717) 
    at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:581) 
    at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1683) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 

21-May-2015 23:07:19.201 SEVERE [localhost-startStop-1] org.apache.webbeans.web.tomcat7.TomcatInstanceManager.inject Error is occured while injecting the OpenWebBeans dependencies for instance [email protected] 
javax.enterprise.inject.UnsatisfiedResolutionException: Api type [org.omnifaces.cdi.eager.BeansInstantiator] is not found with the qualifiers 
Qualifiers: [@javax.enterprise.inject.Default()] 
for injection into Field Injection Point, field name : eagerBeansRepository, Bean Owner : [null] 
    at org.apache.webbeans.util.InjectionExceptionUtil.throwUnsatisfiedResolutionException(InjectionExceptionUtil.java:65) 
    at org.apache.webbeans.container.InjectionResolver.getInjectionPointBean(InjectionResolver.java:271) 
    at org.apache.webbeans.inject.AbstractInjectable.inject(AbstractInjectable.java:82) 
    at org.apache.webbeans.inject.InjectableField.doInjection(InjectableField.java:65) 
    at org.apache.webbeans.portable.InjectionTargetImpl.injectFields(InjectionTargetImpl.java:220) 
    at org.apache.webbeans.portable.InjectionTargetImpl.inject(InjectionTargetImpl.java:206) 
    at org.apache.webbeans.portable.InjectionTargetImpl.inject(InjectionTargetImpl.java:196) 
    at org.apache.webbeans.inject.OWBInjector.inject(OWBInjector.java:57) 
    at org.apache.webbeans.web.tomcat7.TomcatUtil.inject(TomcatUtil.java:40) 
    at org.apache.webbeans.web.tomcat7.TomcatInstanceManager.inject(TomcatInstanceManager.java:122) 
    at org.apache.webbeans.web.tomcat7.TomcatInstanceManager.newInstance(TomcatInstanceManager.java:88) 
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4650) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5162) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:725) 
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:701) 
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:717) 
    at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:581) 
    at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1683) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 

21-May-2015 23:07:19.240 INFO [localhost-startStop-1] org.apache.webbeans.lifecycle.AbstractLifeCycle.bootstrapApplication OpenWebBeans Container is starting... 
21-May-2015 23:07:19.242 INFO [localhost-startStop-1] org.apache.webbeans.plugins.PluginLoader.startUp Adding OpenWebBeansPlugin : [TomcatWebPlugin] 
21-May-2015 23:07:19.242 INFO [localhost-startStop-1] org.apache.webbeans.plugins.PluginLoader.startUp Adding OpenWebBeansPlugin : [OpenWebBeansJsfPlugin] 
21-May-2015 23:07:19.246 INFO [localhost-startStop-1] org.apache.webbeans.corespi.scanner.AbstractMetaDataDiscovery.addWebBeansXmlLocation added beans archive URL: file:/mnt/ssd/home_bis/dev/git/presences/presences_modules/editpresences/target/edit%23%231.0-SNAPSHOT/WEB-INF/classes/META-INF/beans.xml 
21-May-2015 23:07:19.252 INFO [localhost-startStop-1] org.apache.webbeans.corespi.scanner.AbstractMetaDataDiscovery.addWebBeansXmlLocation added beans archive URL: jar:file:/mnt/ssd/home_bis/dev/git/presences/presences_modules/editpresences/target/edit%23%231.0-SNAPSHOT/ 

С 2,0, это:

21-May-2015 23:32:12.076 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet Engine: Apache Tomcat/8.0.20 
21-May-2015 23:32:12.090 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDescriptor Déploiement du descripteur de configuration /opt/apache-tomcat-8.0.20/conf/Catalina/localhost/apps#presences#edit.xml 
21-May-2015 23:32:13.389 INFO [localhost-startStop-1] org.apache.catalina.core.StandardContext.addApplicationListener The listener "org.apache.webbeans.servlet.WebBeansConfigurationListener" is already configured for this context. The duplicate definition has been ignore 
d. 
21-May-2015 23:32:13.641 INFO [localhost-startStop-1] org.omnifaces.ApplicationInitializer.logOmniFacesVersion Using OmniFaces version 2.0 
21-May-2015 23:32:13.644 SEVERE [localhost-startStop-1] org.omnifaces.ApplicationInitializer.checkCDIAvailable 
████████████████████████████████████████████████████████████████████████████████ 
▌       ▐█  ▐            ▐ 
▌ ▄     ▄█▓█▌ ▐ OmniFaces failed to initialize!    ▐ 
▌ ▐██▄    ▄▓░░▓▓ ▐            ▐ 
▌ ▐█░██▓   ▓▓░░░▓▌ ▐ This OmniFaces version requires CDI, but ▐ 
▌ ▐█▌░▓██   █▓░░░░▓  ▐ none was found on this environment.   ▐ 
▌ ▓█▌░░▓█▄███████▄███▓░▓█  ▐            ▐ 
▌ ▓██▌░▓██░░░░░░░░░░▓█░▓▌  ▐ OmniFaces 2.x requires a minimum of JSF 2.2.▐ 
▌  ▓█████░░░░░░░░░░░░▓██  ▐ Since this JSF version, the JSF managed bean▐ 
▌  ▓██▓░░░░░░░░░░░░░░░▓█  ▐ facility @ManagedBean is semi-official  ▐ 
▌  ▐█▓░░░░░░█▓░░▓█░░░░▓█▌  ▐ deprecated in favour of CDI. JSF 2.2 users ▐ 
▌  ▓█▌░▓█▓▓██▓░█▓▓▓▓▓░▓█▌  ▐ are strongly encouraged to move to CDI.  ▐ 
▌  ▓▓░▓██████▓░▓███▓▓▌░█▓  ▐            ▐ 
▌ ▐▓▓░█▄▐▓▌█▓░░▓█▐▓▌▄▓░██  ▐ OmniFaces goes a step further by making CDI ▐ 
▌ ▓█▓░▓█▄▄▄█▓░░▓█▄▄▄█▓░██▌ ▐ a REQUIRED dependency next to JSF 2.2. This ▐ 
▌ ▓█▌░▓█████▓░░░▓███▓▀░▓█▓ ▐ not only ensures that your web application ▐ 
▌ ▐▓█░░░▀▓██▀░░░░░ ▀▓▀░░▓█▓ ▐ represents the state of art, but this also ▐ 
▌ ▓██░░░░░░░░▀▄▄▄▄▀░░░░░░▓▓ ▐ makes for us easier to develop OmniFaces, ▐ 
▌ ▓█▌░░░░░░░░░░▐▌░░░░░░░░▓▓▌ ▐ without the need for all sorts of hacks in ▐ 
▌ ▓█░░░░░░░░░▄▀▀▀▀▄░░░░░░░█▓ ▐ in order to get OmniFaces to deploy on  ▐ 
▌ ▐█▌░░░░░░░░▀░░░░░░▀░░░░░░█▓▌ ▐ environments without CDI.     ▐ 
▌ ▓█░░░░░░░░░░░░░░░░░░░░░░░██▓ ▐            ▐ 
▌ ▓█░░░░░░░░░░░░░░░░░░░░░░░▓█▓ ▐ You have 3 options:       ▐ 
██████████████████████████████████ 1. Downgrade to OmniFaces 1.x.    ▐ 
█░▀░░░░▀█▀░░░░░░▀█░░░░░░▀█▀░░░░░▀█ 2. Install CDI in this environment.   ▐ 
█░░▐█▌░░█░░░██░░░█░░██░░░█░░░██░░█ 3. Switch to a CDI capable environment.  ▐ 
█░░▐█▌░░█░░░██░░░█░░██░░░█░░░██░░█            ▐ 
█░░▐█▌░░█░░░██░░░█░░░░░░▄█░░▄▄▄▄▄█ For additional instructions, check   ▐ 
█░░▐█▌░░█░░░██░░░█░░░░████░░░░░░░█ http://omnifaces.org/cdi     ▐ 
█░░░█░░░█▄░░░░░░▄█░░░░████▄░░░░░▄█            ▐ 
████████████████████████████████████████████████████████████████████████████████ 
21-May-2015 23:32:13.645 SEVERE [localhost-startStop-1] org.apache.catalina.core.StandardContext.startInternal Error during ServletContainerInitializer processing 
javax.servlet.ServletException: java.lang.ExceptionInInitializerError 
    at org.omnifaces.ApplicationInitializer.checkCDIAvailable(ApplicationInitializer.java:101) 
    at org.omnifaces.ApplicationInitializer.onStartup(ApplicationInitializer.java:50) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5151) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:725) 
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:701) 
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:717) 
    at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:581) 
    at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1683) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: java.lang.ExceptionInInitializerError 
    at org.omnifaces.ApplicationInitializer.checkCDIAvailable(ApplicationInitializer.java:64) 
    ... 13 more 
Caused by: java.lang.IllegalStateException: CDI BeanManager instance is not available in JNDI. 
    at org.omnifaces.config.BeanManager.<init>(BeanManager.java:106) 
    at org.omnifaces.config.BeanManager.<clinit>(BeanManager.java:49) 
    ... 14 more 

21-May-2015 23:32:13.651 SEVERE [localhost-startStop-1] org.apache.catalina.core.StandardContext.startInternal Erreur de démarrage du contexte [/apps/presences/edit] suite aux erreurs précédentes 
21-May-2015 23:32:13.657 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDescriptor Deployment of configuration descriptor /opt/apache-tomcat-8.0.20/conf/Catalina/localhost/apps#presences#edit.xml has finished in 1 566 ms 
21-May-2015 23:32:13.659 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployWAR Déploiement de l'archive /opt/apache-tomcat-8.0.20/webapps/edit##1.0-SNAPSHOT.war de l'application web 
21-May-2015 23:32:14.649 INFO [localhost-startStop-1] org.apache.catalina.core.StandardContext.addApplicationListener The listener "org.apache.webbeans.servlet.WebBeansConfigurationListener" is already configured for this context. The duplicate definition has been ignored. 
21-May-2015 23:32:14.767 INFO [localhost-startStop-1] org.apache.webbeans.lifecycle.AbstractLifeCycle.bootstrapApplication OpenWebBeans Container is starting... 
21-May-2015 23:32:14.773 INFO [localhost-startStop-1] org.apache.webbeans.corespi.scanner.AbstractMetaDataDiscovery.addWebBeansXmlLocation added beans archive URL: file:/opt/apache-tomcat-8.0.20/webapps/edit%23%231.0-SNAPSHOT/WEB-INF/classes/META-INF/beans.xml 
21-May-2015 23:32:14.779 INFO [localhost-startStop-1] org.apache.webbeans.corespi.scanner.AbstractMetaDataDiscovery.addWebBeansXmlLocation added beans archive URL: jar:file:/opt/apache-tomcat-8.0.20/webapps/edit%23%231.0-SNAPSHOT/WEB-INF/lib/deltaspike-core-impl-1.3.0.jar!/ME 

Проблема возникает только с omnifaces. OWB работает в моем webapp.

Стартовая последовательность все еще очень колеблется, в зависимости от контейнера (см., Например, http://javaeesquad.blogspot.fr/2015/03/getting-notified-when-java-ee.html).

Я вижу, что OmniFaces уже обрабатывает Glassfish особый случай:

общественного класса ApplicationInitializer реализует ServletContainerInitializer {

// Constants ------------------------------------------------------------------------------------------------------ 

    private static final Logger logger = Logger.getLogger(ApplicationInitializer.class.getName()); 

    // Actions -------------------------------------------------------------------------------------------------------- 

    @Override 
    public void onStartup(Set<Class<?>> c, ServletContext servletContext) throws ServletException { 
      logOmniFacesVersion(); 
      checkCDIAvailable(servletContext); 
      FacesViews.registerFilter(servletContext); 
    } 

    private void logOmniFacesVersion() { 
      logger.info("Using OmniFaces version " + getClass().getPackage().getSpecificationVersion()); 
    } 

    private void checkCDIAvailable(ServletContext servletContext) throws ServletException { 
      if (Hacks.isCDIAvailableInGlassFish(servletContext)) { 
        return; // Okay. Don't proceed, because GF4 fails to scan JNDI during servlet container initialization. 
      } 

      try { 
        BeanManager.INSTANCE.toString(); 
      } 
      catch (Throwable e) { 
        logger.severe("" 
          + "\n████████████████████████████████████████████████████████████████████████████████" 
          + "\n▌       ▐█  ▐            ▐" 
          + "\n▌ ▄     ▄█▓█▌ ▐ OmniFaces failed to initialize!    ▐" 
          + "\n▌ ▐██▄    ▄▓░░▓▓ ▐            ▐" 
          + "\n▌ ▐█░██▓   ▓▓░░░▓▌ ▐ This OmniFaces version requires CDI, but ▐" 
          + "\n▌ ▐█▌░▓██   █▓░░░░▓  ▐ none was found on this environment.   ▐" 
          + "\n▌ ▓█▌░░▓█▄███████▄███▓░▓█  ▐            ▐" 
          + "\n▌ ▓██▌░▓██░░░░░░░░░░▓█░▓▌  ▐ OmniFaces 2.x requires a minimum of JSF 2.2.▐" 
          + "\n▌  ▓█████░░░░░░░░░░░░▓██  ▐ Since this JSF version, the JSF managed bean▐" 

и в классе Hacks:

// GlassFish related ---------------------------------------------------------------------------------------------- 

    /** 
    * Returns <code>true</code> if CDI is available in GlassFish. 
    * @param servletContext The involved servlet context. 
    * @return <code>true</code> if CDI is available in GlassFish. 
    */ 
    public static boolean isCDIAvailableInGlassFish(ServletContext servletContext) { 
      return servletContext.getAttribute("org.glassfish.jsp.beanManagerELResolver") instanceof ELResolver; 
    } 

Можно ли иметь такое специальный случай для OWB? Тестирование, что атрибут установлен, будет достаточно справедливым для меня.

Или можно отложить введение инстинкта?

Наконец, почему бы не ждать уведомления CDI, с помощью метода, такие как:

public class CDIStartup { 

    public void postConstruct(@Observes @Initialized(ApplicationScoped.class) Object o) { 
     // CDI Ready } 
} 
+1

Мы видели это раньше. Правильная интеграция OWB в простой Tomcat является хлопотной. Вот почему TomEE существует. Там работает безупречно. Если вам действительно нужен Tomcat, подумайте об этом вместо Weld. Тем временем мы будем размышлять над тем, как это можно обойти. Расширение CDI невозможно, так как для этого требуется CDI. – BalusC

+0

Я понимаю ваш ответ и в любом случае благодарю вас за предоставление нам всех. Очевидно, что трудно полностью поддерживать все контейнеры. Но в некоторых местах вы не можете выбрать свой контейнер. Не так давно я не мог поместить банки в tomcat/lib ... Итак ... Я не понимаю твое последнее предложение «Расширение CDI невосприимчиво, поскольку оно требует CDI». Мне кажется, что его запуск с помощью CDI обеспечит доступность этого последнего ... Это будет только для 2.0, конечно. –

+0

> «Правильно интегрировать OWB в простой Tomcat - хлопотно». Извините Bauke @BalusC, это ПОЛНОСТЬЮ неправильно! OpenWebBeans предоставляет только два способа интеграции. Простой «сервлет», который работает переносимо даже в GAE и других контейнерах, отличных от EE. А затем полный EE-интегральный способ. Дело в том, что вы полностью уничтожили все стандартные примеры использования сервлетов с Omnifaces-2.0! Вернитесь назад и снова удалите эту проверку и будьте счастливы. – struberg

ответ

3

OmniFaces необходимо изменить код проверки, как это не является переносимым. Спецификация CDI не определяет, что BeanManager и любой Контекст должны быть доступны в ServletContainerInitializer. Это сильно зависит от сценария целевой среды и интеграции и, следовательно, очень не переносимы. Это также регрессия по сравнению с более старыми версиями, где она безупречно работала.

Переместить его ServletContextListener или сделать его предупреждением и сделать.

+0

CDI инициализируется в 'ServletContainerInitializer'. И Weld, и OpenWebBeans делают это. OmniFaces имеет 'web-fragment.xml' с' ', чтобы заставить его загружаться после всех остальных (таким образом, также после CDI impl, который не имеет никакого заказа, даже не' '). Почему именно это происходит в Tomcat для OpenWebBeans, но не для Weld? Я хотел бы знать это, чтобы я мог понять правильное обнаружение. – BalusC

+0

> «Как Weld, так и OpenWebBeans делают это» Нет, это неправильно, нет задействованного сервлетаContainerInitializer. И я должен это знать, поскольку написал большую часть Apache OpenWebBeans. Из спецификации сервлета 8.2.4: «Метод onStartup для ServletContainerInitializer будет вызываться, когда приложение подходит до того, как будут запущены какие-либо события слушателя." И в нормальных случаях контейнер CDI запускается в контексте ServletContextListener # contextInitialized. Только в контейнере EE он _might_ загружается раньше. #ChickenEggProblem. Не стесняйтесь пинговать меня в списке CDI EG, чтобы получить официальное разъяснение. – struberg

+0

ваша проверка в ServletContextListener тоже? ЧТО гарантированно работает;) Возможно, вы также можете сделать это намного проще: у вас уже есть расширение, поэтому вы также можете просто установить флаг в BeforeBeanDiscovery, чтобы контейнер CDI загрузился. в статической карте может быть TCCL (конечно же, не забывайте о очистке BeforeShutdown для предотвращения утечек памяти) – struberg