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

WildFly 9.x添加MySQL数据报错:No EJB receiver available

解决WildFly 9.x中"No EJB receiver available for handling"错误

这个错误在EJB远程调用时最常出现的原因就是JNDI名称不匹配或者远程连接配置缺失,结合你给出的信息,我来一步步帮你解决:

1. 首先修正JNDI查找名称

你代码里用的JNDI名称少了WildFly必须的java:jboss/exported/前缀,WildFly输出的完整JNDI地址是:

java:jboss/exported/examen2018-ear/examen2018-ejb/ServiceEmployee!tn.esprit.examen2018.services.EmployeeServiceRemote

所以你的客户端代码里的jndiName必须改成这个完整路径,同时还要补充远程连接的配置(这部分你之前大概率漏掉了),修改后的代码片段:

String jndiName = "java:jboss/exported/examen2018-ear/examen2018-ejb/ServiceEmployee!tn.esprit.examen2018.services.EmployeeServiceRemote";

// 添加远程连接配置属性
Properties props = new Properties();
props.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory");
props.put(Context.PROVIDER_URL, "http-remoting://localhost:8080"); // WildFly 9默认HTTP远程端口是8080
props.put(Context.SECURITY_PRINCIPAL, "admin"); // 替换成你的WildFly管理用户名
props.put(Context.SECURITY_CREDENTIALS, "your-password"); // 替换成对应的密码
props.put("jboss.naming.client.ejb.context", true); // 这个属性是WildFly远程EJB查找的关键配置

Context context = new InitialContext(props);
EmployeeServiceRemote employeeServiceRemote = (EmployeeServiceRemote) context.lookup(jndiName);

// 后续添加员工的代码不变
Employee emp1 = new Employee();
emp1.setFirstName("Mohamed");
emp1.setLastName("Boujouma");
emp1.setPassword("emp");
emp1.setEmployeeType(EmployeeType.EMP);
employeeServiceRemote.ajouterEmployee(emp1);

2. 验证EJB的注解与部署

  • 确保你的EmployeeServiceRemote接口上标注了@javax.ejb.Remote注解
  • 实现类ServiceEmployee上标注了@javax.ejb.Stateless(或者对应的EJB类型注解)
  • 检查你的EAR包结构是否正确:examen2018-ear包含examen2018-ejb模块,并且服务器上已经成功部署该EAR(可以在WildFly管理控制台的Deployments页面确认)

3. 确认客户端依赖齐全

你的客户端项目需要引入WildFly远程EJB客户端的相关依赖,如果你用Maven,可以添加以下BOM来管理版本:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.wildfly</groupId>
            <artifactId>wildfly-ejb-client-bom</artifactId>
            <version>9.0.2.Final</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

然后添加核心客户端依赖:

<dependency>
    <groupId>org.wildfly</groupId>
    <artifactId>wildfly-ejb-client</artifactId>
</dependency>

如果不用Maven,需要手动添加jboss-ejb-client.jar、jboss-remote-naming.jar、jboss-client.jar等相关jar包到客户端项目的classpath中。

其他排查点

  • 确保WildFly服务器正在运行,并且客户端能访问到服务器的端口(8080或者4447,如果你用的是传统远程端口)
  • 检查服务器日志,看是否有EJB部署失败的报错信息

内容的提问来源于stack exchange,提问作者Jamel Mustapha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:48:20