2016-05-09 9 views
0

Tomcat 8.0.33で動作するOWB(MyFaces & Primeface)を取得しようとしています。それは、このスタックトレースが続く... ...私はこのエラーを取得し、物事を設定する方法に関係なく同じようOpenWebBeans + MyFaces + Tomcat = IllegalStateException

org.apache.myfaces.webapp.AbstractFacesInitializer.initFaces An error occured while initializing MyFaces: It's not allowed to call getBeans(Type, Annotation...) before AfterBeanDiscovery 

ようだ:私が読んherehere、としたものに基づいて

java.lang.IllegalStateException: It's not allowed to call getBeans(Type, Annotation...) before AfterBeanDiscovery 
    at org.apache.webbeans.container.InjectableBeanManager.checkAfterBeanDiscoveryProcessed(InjectableBeanManager.java:402) 
    at org.apache.webbeans.container.InjectableBeanManager.getBeans(InjectableBeanManager.java:121) 
    at org.apache.myfaces.cdi.util.CDIUtils.lookup(CDIUtils.java:45) 
    at org.apache.myfaces.flow.cdi.DefaultCDIFacesFlowProvider.getAnnotatedFlows(DefaultCDIFacesFlowProvider.java:51) 
    at org.apache.myfaces.flow.impl.AnnotatedFlowConfigurator.configureAnnotatedFlows(AnnotatedFlowConfigurator.java:42) 
    at org.apache.myfaces.config.FacesConfigurator.configureFlowHandler(FacesConfigurator.java:1666) 
    at org.apache.myfaces.config.FacesConfigurator.configure(FacesConfigurator.java:608) 
    at org.apache.myfaces.webapp.AbstractFacesInitializer.buildConfiguration(AbstractFacesInitializer.java:416) 
    at org.apache.myfaces.webapp.Jsp21FacesInitializer.initContainerIntegration(Jsp21FacesInitializer.java:73) 
    at org.apache.myfaces.webapp.AbstractFacesInitializer.initFaces(AbstractFacesInitializer.java:172) 
    at org.apache.myfaces.webapp.StartupServletContextListener.contextInitialized(StartupServletContextListener.java:121) 
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4809) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5251) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147) 
    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.manageApp(HostConfig.java:1696) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
    at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:300) 
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819) 
    at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801) 
    at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:484) 
    at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:433) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
    at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:300) 
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819) 
    at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801) 
    at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1471) 
    at javax.management.remote.rmi.RMIConnectionImpl.access$300(RMIConnectionImpl.java:76) 
    at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1312) 
    at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1404) 
    at javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:832) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:323) 
    at sun.rmi.transport.Transport$1.run(Transport.java:200) 
    at sun.rmi.transport.Transport$1.run(Transport.java:197) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at sun.rmi.transport.Transport.serviceCall(Transport.java:196) 
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:568) 
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:826) 
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$256(TCPTransport.java:683) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:682) 
    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) 

here(約5 bajillion他の場所)、私はでTomcatのプラグインの依存関係web.xmlで指定OWBリスナーを、それを試してみました、とさえとの両方ています そのうちの。私が何をしていても、MyFacesがジャンプして作業を始める前に、OWBにそのことを納得させるようなことはできないようです。異常に明白な何かが欠けていますか?

// Maven Dependencies 
com.amazonaws:aws-java-sdk-dynamodb:1.10.72 

org.apache.myfaces.core:myfaces-api:2.2.10 
org.apache.myfaces.core:myfaces-impl:2.2.10 

org.apache.openwebbeans:openwebbeans-spi:1.6.3 
org.apache.openwebbeans:openwebbeans-impl:1.6.3 
org.apache.openwebbeans:openwebbeans-web:1.6.3 
org.apache.openwebbeans:openwebbeans-jsf:1.6.3 
org.apache.openwebbeans:openwebbeans-el22:1.6.3 
org.apache.openwebbeans:openwebbeans-tomcat7:1.6.3 

org.apache.geronimo.specs:geronimo-atinject_1.0_spec:1.0 
org.apache.geronimo.specs:geronimo-jcdi_1.1_spec:1.0 
org.apache.geronimo.specs:geronimo-interceptor_1.2_spec:1.0 
org.apache.geronimo.specs:geronimo-annotation_1.2_spec:1.0 

javax.enterprise:cdi-api:1.2 
javax.validation:validation-api:1.1.0.Final 
org.hibernate:hibernate-validator:5.2.4.Final 

org.primefaces:primefaces:5.3 
org.primefaces.themes:dark-hive:1.0.10 

com.google.guava:guava:19.0 
com.google.code.gson:gson:2.5 

org.jetbrains:annotations:15.0 
+1

何かがMyFacesの課題トラッカーで調査されるように見えます。例を提出できる場合は、参考になるかもしれません。問題[ここ](https://issues.apache.org/jira/browse/MYFACES)を作成してください。 – lu4242

答えて

0

あなたがTomcatの共通クラスローダにロードされ

以下
private void addOwbListeners(StandardContext context) { 
    String[] oldListeners = context.findApplicationListeners(); 
    LinkedList<String> listeners = new LinkedList<String>(); 

    // 3rd 
    listeners.addFirst("org.apache.myfaces.webapp.StartupServletContextListener"); 
    // 2nd 
    listeners.addFirst("org.apache.webbeans.web.tomcat7.ContextLifecycleListener"); 
    // 1st 
    listeners.addFirst("org.apache.webbeans.servlet.WebBeansConfigurationListener"); 

    for (String listener : oldListeners) { 
    listeners.add(listener); 
    context.removeApplicationListener(listener); 
    } 

    for (String listener : listeners) { 
    context.addApplicationListener(listener); 
    } 
} 

からContextLifecycleListener.java

変更addOwbListeners()メソッドこのクラスを使用する必要があります。 webappコンテキストクラスローダーではありません。 https://tomcat.apache.org/tomcat-8.0-doc/class-loader-howto.html

/META-INF/context.xml

<Context> 
    <Listener className="mypackage.ContextLifecycleListener" /> 
    <Resource name="BeanManager" auth="Container" 
    type="javax.enterprise.inject.spi.BeanManager" 
    factory="org.apache.webbeans.container.ManagerObjectFactory" /> 
</Context> 

/WEB-INF/web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app 
    xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" 
    version="3.1" metadata-complete="false" 
> 
<servlet> 
    <servlet-name>facesServlet</servlet-name> 
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>facesServlet</servlet-name> 
    <url-pattern>*.xhtml</url-pattern> 
</servlet-mapping> 
<resource-ref> 
    <res-ref-name>BeanManager</res-ref-name> 
    <res-type>javax.enterprise.inject.spi.BeanManager</res-type> 
    <res-sharing-scope>Shareable</res-sharing-scope> 
</resource-ref> 
</web-app> 
+0

私は恐れることはほとんどありません。おそらくそれはMyFacesのバグです。私は似たようなものを見つけたことを覚えています。 OWBはそれを正しく行います。 例外がランダムなエラーを防止する理由:コンテナの起動時にgetBeans()を使用すると、異なるクラススキャン順序などによって発生するあらゆる種類のランダムな動作に終わる可能性があります。 CDIの仕様は既にあります。これは仕様によっても必要とされます。 – struberg

関連する問題