找不到 CDI BeanManager

Posted

技术标签:

【中文标题】找不到 CDI BeanManager【英文标题】:Unable to find CDI BeanManager 【发布时间】:2019-05-30 00:27:06 【问题描述】:

我正在尝试设置一个简单的应用程序以在 Wildfly 14 上使用 SpringBoot 2.1.1 和 Java 11(因为 Eclipse 不支持 Wildfly 15)。

部署失败,因为 Wildfly 在项目中。我只是尝试遵循简单(官方)教程,所以我不明白为什么会出现错误。

这是代码:

pom.xml

<properties>
    <start-class>main</start-class>
</properties>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.1.RELEASE</version>
</parent>

<!-- Add typical dependencies for a web application -->
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

<!-- Package as an executable jar -->
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

Application.java

package main;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@EnableAutoConfiguration
public class Application 

    public static void main(String[] args) 
        SpringApplication.run(Application.class, args);
    


这是堆栈跟踪:

12:51:13,365 INFO [org.jboss.as.server.deployment](MSC 服务线程 1-8)WFLYSRV0027:开始部署“SpringBoot-0.0.1.war”(运行时名称:“SpringBoot- 0.0.1.战争”) 警告:发生了非法反射访问操作 警告:io.undertow.util.FlexBase64$1 的非法反射访问(jar:file:/C:/Users/87003556/Documents/Java/Wildfly%2014/modules/system/layers/base/io/undertow/core/main /undertow-core-2.0.13.Final.jar!/) 到构造函数 java.lang.String(char[],boolean) 警告:请考虑将此报告给 io.undertow.util.FlexBase64$1 的维护者 警告:使用 --illegal-access=warn 启用对进一步非法反射访问操作的警告 警告:所有非法访问操作将在未来版本中被拒绝 12:51:13,429 INFO [org.wildfly.extension.undertow](MSC 服务线程 1-6)WFLYUT0006:Undertow HTTPS 监听器 https 监听 127.0.0.1:8443 12:51:13,531 INFO [org.jboss.ws.common.management](MSC 服务线程 1-8)JBWS022052:启动 JBossWS 5.2.3.Final(Apache CXF 3.2.5.jbossorg-1) 12:51:15,606 WARN [org.jboss.as.ee](MSC 服务线程 1-1)WFLYEE0007:由于异常,未安装可选组件 org.springframework.http.server.reactive.ServletServerHttpResponse$ResponseAsyncListener(启用调试日志水平看原因) 12:51:15,606 WARN [org.jboss.as.ee](MSC 服务线程 1-1)WFLYEE0007:未安装可选组件 org.springframework.http.server.reactive.ServletHttpHandlerAdapter$HandlerResultAsyncListener 由于异常(启用调试日志水平看原因) 12:51:15,622 WARN [org.jboss.as.ee](MSC 服务线程 1-1)WFLYEE0007:由于异常,未安装可选组件 org.springframework.http.server.ServletServerHttpAsyncRequestControl(启用调试日志级别以查看原因) 12:51:15,622 WARN [org.jboss.as.ee](MSC 服务线程 1-1)WFLYEE0007:未安装可选组件 org.springframework.web.context.request.async.StandardServletAsyncWebRequest 由于异常(启用调试日志水平看原因) 12:51:15,622 WARN [org.jboss.as.ee](MSC 服务线程 1-1)WFLYEE0007:由于异常,未安装可选组件 org.springframework.http.server.reactive.ServletServerHttpRequest$RequestAsyncListener(启用调试日志水平看原因) 12:51:15,794 INFO [org.infinispan.factories.GlobalComponentRegistry](MSC 服务线程 1-7)ISPN000128:Infinispan 版本:Infinispan 'Estrella Galicia' 9.3.1.Final 12:51:15,966 INFO [org.jboss.as.clustering.infinispan](ServerService 线程池 -- 72)WFLYCLINF0002:从 ejb 容器启动客户端映射缓存 12:51:16,075 INFO [io.undertow.servlet](ServerService 线程池 -- 85)在类路径上检测到 1 个 Spring WebApplicationInitializers 12:51:16,153 INFO [javax.enterprise.resource.webcontainer.jsf.config](ServerService 线程池 -- 85)为上下文“/SpringBoot-0.0.1”初始化 Mojarra 2.3.5.SP2 12:51:16,761 严重 [javax.enterprise.resource.webcontainer.jsf.config](ServerService 线程池 -- 85)部署期间的严重错误::com.sun.faces.config.ConfigurationException:Factory 'javax.faces.lifecycle .ClientWindowFactory' 配置不正确。 在 com.sun.faces.config.processor.FactoryConfigProcessor.verifyFactoriesExist(FactoryConfigProcessor.java:357) 在 com.sun.faces.config.processor.FactoryConfigProcessor.process(FactoryConfigProcessor.java:243) 在 com.sun.faces.config.ConfigManager.initialize(ConfigManager.java:443) 在 com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:237) 在 io.undertow.servlet.core.ApplicationListeners.contextInitialized(ApplicationListeners.java:187) 在 io.undertow.servlet.core.DeploymentManagerImpl$1.call(DeploymentManagerImpl.java:216) 在 io.undertow.servlet.core.DeploymentManagerImpl$1.call(DeploymentManagerImpl.java:185) 在 io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:42) 在 io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43) ... 在 org.jboss.threads.JBossThread.run(JBossThread.java:485) 原因:javax.faces.FacesException: 在 com.sun.faces.application.ApplicationImpl.isJsf23(ApplicationImpl.java:2714) 在 com.sun.faces.application.ApplicationImpl.addELResolver(ApplicationImpl.java:549) ... 在 javax.faces.FactoryFinder.getFactory(FactoryFinder.java:292) 在 com.sun.faces.config.processor.FactoryConfigProcessor.verifyFactoriesExist(FactoryConfigProcessor.java:354) ... 29 更多

12:51:16,761 错误 [org.jboss.msc.service.fail] (ServerService 线程池 -- 85) MSC000001: 无法启动服务 jboss.deployment.unit."SpringBoot-0.0.1.war"。 undertow-deployment:服务 jboss.deployment.unit 中的 org.jboss.msc.service.StartException。“SpringBoot-0.0.1.war”.undertow-deployment:java.lang.RuntimeException:java.lang.RuntimeException:com.sun .faces.config.ConfigurationException:工厂'javax.faces.lifecycle.ClientWindowFactory'未正确配置。 在 org.wildfly.extension.undertow.deployment.UndertowDeploymentService$1.run(UndertowDeploymentService.java:81) 在 java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) ... 在 java.base/java.lang.Thread.run(Thread.java:825) 在 org.jboss.threads.JBossThread.run(JBossThread.java:485) 原因:java.lang.RuntimeException:java.lang.RuntimeException:com.sun.faces.config.ConfigurationException:工厂'javax.faces.lifecycle.ClientWindowFactory'未正确配置。 在 io.undertow.servlet.core.DeploymentManagerImpl.deploy(DeploymentManagerImpl.java:252) 在 org.wildfly.extension.undertow.deployment.UndertowDeploymentService.startContext(UndertowDeploymentService.java:96) 在 org.wildfly.extension.undertow.deployment.UndertowDeploymentService$1.run(UndertowDeploymentService.java:78) ... 8 更多 原因:java.lang.RuntimeException:com.sun.faces.config.ConfigurationException:工厂'javax.faces.lifecycle.ClientWindowFactory'未正确配置。 在 com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:315) 在 io.undertow.servlet.core.ApplicationListeners.contextInitialized(ApplicationListeners.java:187) 在 io.undertow.servlet.core.DeploymentManagerImpl$1.call(DeploymentManagerImpl.java:216) 在 io.undertow.servlet.core.DeploymentManagerImpl$1.call(DeploymentManagerImpl.java:185) 在 io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:42) ... 在 io.undertow.servlet.core.DeploymentManagerImpl.deploy(DeploymentManagerImpl.java:250) ... 10 更多 原因:com.sun.faces.config.ConfigurationException:未正确配置工厂“javax.faces.lifecycle.ClientWindowFactory”。 在 com.sun.faces.config.processor.FactoryConfigProcessor.verifyFactoriesExist(FactoryConfigProcessor.java:357) ... 在 com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:237) ... 26 更多 原因:javax.faces.FacesException: 在 com.sun.faces.application.ApplicationImpl.isJsf23(ApplicationImpl.java:2714) 在 com.sun.faces.application.ApplicationImpl.addELResolver(ApplicationImpl.java:549) 在 org.jboss.as.jsf.injection.weld.WeldApplication.(WeldApplication.java:60) 在 org.jboss.as.jsf.injection.weld.WeldApplicationFactory.getApplication(WeldApplicationFactory.java:52) 在 com.sun.faces.application.InjectionApplicationFactory.getApplication(InjectionApplicationFactory.java:88) ...在 javax.faces.FactoryFinder.getFactory(FactoryFinder.java:292) 在 com.sun.faces.config.processor.FactoryConfigProcessor.verifyFactoriesExist(FactoryConfigProcessor.java:354) ... 29 更多

12:51:16,762 错误 [org.jboss.as.controller.management-operation](控制器引导线程)​​WFLYCTL0013:操作(“部署”)失败 - 地址:([(“部署”=>“SpringBoot- 0.0.1.war")]) - 失败描述:"WFLYCTL0080: 失败的服务" => "jboss.deployment.unit.\"SpringBoot-0.0.1.war\".undertow-deployment" => "java .lang.RuntimeException:java.lang.RuntimeException:com.sun.faces.config.ConfigurationException:工厂'javax.faces.lifecycle.ClientWindowFactory'未正确配置。 原因:java.lang.RuntimeException:java.lang.RuntimeException:com.sun.faces.config.ConfigurationException:工厂'javax.faces.lifecycle.ClientWindowFactory'未正确配置。 原因:java.lang.RuntimeException:com.sun.faces.config.ConfigurationException:工厂'javax.faces.lifecycle.ClientWindowFactory'未正确配置。 原因:com.sun.faces.config.ConfigurationException:未正确配置工厂“javax.faces.lifecycle.ClientWindowFactory”。 原因:javax.faces.FacesException:无法找到 CDI BeanManager" 12:51:16,762 INFO [org.jboss.as.server](ServerService 线程池 -- 42)WFLYSRV0010:部署“SpringBoot-0.0.1.war”(运行时名称:“SpringBoot-0.0.1.war”) 12:51:16,762 INFO [org.jboss.as.controller](控制器引导线程)​​WFLYCTL0183:服务状态报告 WFLYCTL0186:无法启动的服务:service jboss.deployment.unit."SpringBoot-0.0.1.war".undertow-deployment: java.lang.RuntimeException: java.lang.RuntimeException: com.sun.faces.config.ConfigurationException : 工厂 'javax.faces.lifecycle.ClientWindowFactory' 未正确配置。

【问题讨论】:

您是否考虑将 cdi-api 添加到您的 pom.xml 依赖项中?它不包含在您指定的依赖项中。 javax.enterprisecdi-api1.2 它有效,谢谢。我不明白为什么 Spring 在其父 POM 中不包含 CDI(或者,至少指定它需要此依赖项):/ 酷!我很高兴它奏效了。如果您不介意,我将在下面发布相同的信息作为答案?使用格式会更容易阅读。如果这解决了问题,您是否介意通过单击旁边的灰色复选标记将其变为绿色来接受答案? @Assafs 不需要提示用户给你代表。系统正常工作。 【参考方案1】:

正如我们在 cmets 中所讨论的,解决方案可能就像将 cdi-api 添加到您的 pom.xml 依赖项中一样简单。它不包含在您指定的依赖项中。

<dependency> 
    <groupId>javax.enterprise</groupId> 
    <artifactId>cdi-api</artifactId> 
    <version>1.2</version> 
</dependency>

【讨论】:

如果出现错误,请在下面添加依赖项org.reactivestreamsreactive-streams1.0.1【参考方案2】:

记住,必须包含启动 CDI 配置的上下文。

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

You can check the all setup here

或者您可以查看此blog

【讨论】:

这为我解决了这个问题,因为我的项目不是 maven。【参考方案3】:

与您的问题没有直接关系,但可能对其他人有帮助。

我们正在使用带有joinfaces 的SpringBoot,在我们的例子中,问题是由faces-config.xml 中的错误引起的 - 特别是在标题部分&lt;faces-config ...&gt; 中。如果该文件最近更新,请检查您的git

【讨论】:

以上是关于找不到 CDI BeanManager的主要内容,如果未能解决你的问题,请参考以下文章

JSF-2.3 找不到我的 @Named CDI-1.2 托管 bean

在 WEB-INF/lib 内的 JAR 中找不到 CDI 实例

获取 CDI 托管 bean 实例的规范方法:BeanManager#getReference() 与 Context#get()

是否有可能在运行时检测CDI托管bean的范围?

为啥在 CDI 中使用构造函数而不是 setter 注入?

java.lang.NoClassDefFoundError: Ljavax/enterprise/inject/spi/BeanManager;