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
相关产品推荐
相关产品推荐

