You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WildFly部署EJB遇WFLYEJB0406错误求助

问题解决思路

一、WildFly 27.0.1 中的 WFLYEJB0406 错误

问题根源

直接注入泛型接口 IGenericDAO 时,EJB容器无法关联到具体的@Stateless实现类ClienteDAO——容器需要明确的、非泛型的接口或直接绑定标注了EJB注解的实现类。

解决方法

  • 直接注入具体实现类
    在ClienteController中将注入类型改为ClienteDAO:

    @EJB
    private ClienteDAO clienteDAO;
    

    容器可直接识别标注了@Stateless的ClienteDAO实例。

  • 为泛型接口定义具体子接口(保留泛型注入场景)
    先定义继承自IGenericDAO的具体子接口,再让ClienteDAO实现该接口:

    public interface IClienteDAO extends IGenericDAO<Cliente> {}
    
    @Stateless
    public class ClienteDAO extends GenericDAO<Cliente> implements IClienteDAO {}
    

    随后在Servlet中注入IClienteDAO:

    @EJB
    private IClienteDAO clienteDAO;
    

    容器即可识别对应的EJB实现。

  • 校验beans.xml位置
    Web应用中beans.xml需放在WEB-INF目录下,EJB模块放在META-INF目录,位置错误会导致CDI/EJB扫描失效。


二、WildFly 24.0.0 中的 NoClassDefFoundError: jakarta/servlet/http/HttpServlet

问题根源

WildFly 24基于Jakarta EE 9,所有EE API包名从javax.*迁移至jakarta.*。若项目依赖了javax.servlet-api,或servlet依赖的scope未设为provided,会与WildFly自带的Jakarta Servlet API冲突,引发类找不到的错误。

解决方法

  • 调整Servlet API依赖的scope
    在Maven的pom.xml中,将servlet依赖设置为provided(WildFly已内置Jakarta Servlet实现),并使用Jakarta版本的依赖:

    <dependency>
        <groupId>jakarta.servlet</groupId>
        <artifactId>jakarta.servlet-api</artifactId>
        <version>5.0.0</version>
        <scope>provided</scope>
    </dependency>
    

    若之前用的是javax.servlet:javax.servlet-api,需替换为上述Jakarta版本依赖。

  • 对齐项目Jakarta EE版本
    确保项目中所有EE相关依赖(EJB、CDI等)均使用Jakarta EE 9对应版本,避免javax与jakarta包混用。

  • 清理重构项目
    删除本地Maven仓库中冲突的依赖,执行mvn clean install重新构建后,再部署到WildFly 24。

内容的提问来源于stack exchange,提问作者Lucas Atolini

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 06:27:57