编写简易EJB客户端遇报错:操作状态为WAITING,无法注册EJB接收器
解决EJB客户端连接localhost:8080失败的问题
嘿,这个问题我之前帮好几个开发者排查过,本质就是EJB客户端没法和服务器建立远程连接,导致接收器注册失败,进而抛出那个WAITING状态的运行时异常。下面给你几个一步步排查的方向,应该能解决问题:
1. 先确认服务器是否正常运行且端口配置匹配
- 先打开浏览器访问
http://localhost:8080,看看服务器的欢迎页面能不能正常加载——如果连这个都打不开,那肯定是服务器没启动或者端口不对 - 注意:不同版本的JBoss/WildFly默认EJB远程端口可能不一样!比如WildFly 10+默认用8080,但老版本可能是4447。你可以去服务器的
standalone.xml或domain.xml里找remote-connector配置,核对端口号是否和客户端配置一致。
2. 检查jboss-ejb-client.properties配置文件
这个文件是EJB客户端的核心配置,必须确保参数正确:
remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false remote.connections=default remote.connection.default.host=localhost remote.connection.default.port=8080 # 这里必须和服务器的远程EJB端口完全匹配! remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
- 如果你的服务器开启了安全认证,还要加上用户名和密码配置:
remote.connection.default.username=your-server-username remote.connection.default.password=your-server-password
(服务器上的用户可以用add-user.sh/add-user.bat脚本创建)
3. 核对客户端依赖是否兼容
EJB客户端的依赖版本必须和服务器版本匹配,不兼容的依赖会直接导致连接失败。比如Maven项目里的依赖可以这么配(版本根据你的服务器调整):
<dependency> <groupId>org.jboss.ejb-client</groupId> <artifactId>jboss-ejb-client</artifactId> <version>4.0.3.Final</version> </dependency> <dependency> <groupId>org.jboss.xnio</groupId> <artifactId>xnio-api</artifactId> <version>3.8.4.Final</version> </dependency> <dependency> <groupId>org.jboss.xnio</groupId> <artifactId>xnio-nio</artifactId> <version>3.8.4.Final</version> </dependency>
4. 检查服务器的远程EJB配置
确保服务器的standalone.xml里已经开启了远程EJB连接器,比如:
<subsystem xmlns="urn:jboss:domain:remoting:4.0"> <endpoint/> <http-connector name="http-remoting-connector" connector-ref="default" security-realm="ApplicationRealm"/> </subsystem>
如果用了自定义安全域,也要确认安全域的配置正确,否则认证环节会失败。
5. 排查端口占用和防火墙问题
- 用
netstat -ano | findstr :8080(Windows)或lsof -i :8080(Linux/Mac)检查8080端口是否被其他程序占用,如果被占了,要么换服务器端口,要么关闭占用端口的程序 - 临时关闭本地防火墙试试,有时候防火墙会拦截客户端和服务器的本地连接
最后补充一句:那个WAITING异常其实是表象,本质是客户端一直在等服务器响应但连接根本没建立起来,解决了上面的连接问题,这个异常自然就消失了。
内容的提问来源于stack exchange,提问作者motek96
相关产品推荐
相关产品推荐

