移除Wildfly 9.0.1中http-listener后远程EJB连接失败求助
解决Wildfly 9.0.1移除http-listener后远程EJB无法连接的问题
我来帮你拆解下这个问题的核心原因,再给出针对性的解决方案:
问题根源
在Wildfly 9中,远程EJB客户端默认采用HTTP Upgrade机制来建立remoting连接——简单说就是客户端先通过HTTP请求发起连接,再升级为remoting协议进行EJB调用。而你移除的<http-listener>正是Wildfly处理这个HTTP升级请求的核心入口。没有了它,客户端的连接请求找不到对应的端点完成协议升级,自然就无法建立远程EJB连接了。
解决方案
根据你的需求(不想保留对外的HTTP服务,但要让远程EJB正常工作),可以选择以下两种方案:
方案1:保留http-listener但限制访问范围
如果你只是不想对外暴露HTTP服务,可以修改http-listener的配置,将其绑定到本地回环地址,只允许服务器内部或本地客户端访问,不会对外暴露端口:
<http-listener name="default" socket-binding="http" redirect-socket="https" max-post-size="1717986920" interface="loopback"/>
这里的interface="loopback"会让http-listener只监听127.0.0.1,外部无法访问,但本地或容器内的远程EJB客户端可以正常使用HTTP Upgrade机制建立连接。
方案2:配置独立的纯remoting连接器
如果你完全不想依赖HTTP协议,可以配置一个独立的remoting端点,直接使用原生remoting协议(默认端口4447):
- 修改
standalone.xml中的remoting子系统,添加一个直接的remoting连接器:
<subsystem xmlns="urn:jboss:domain:remoting:3.0"> <endpoint/> <http-connector name="http-remoting-connector" connector-ref="default" security-realm="ApplicationRealm"/> <!-- 添加独立的remoting连接器 --> <connector name="remoting-connector" socket-binding="remoting" security-realm="ApplicationRealm"/> </subsystem>
- 确认socket绑定组中存在
remoting的绑定(默认已包含,端口4447):
<socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}"> <!-- 其他绑定... --> <socket-binding name="remoting" port="4447"/> <!-- 其他绑定... --> </socket-binding-group>
- 客户端连接时,改用纯remoting协议的URL,调整JNDI属性:
java.naming.factory.initial=org.jboss.naming.remote.client.InitialContextFactory java.naming.provider.url=remote://your-server-ip:4447 java.naming.security.principal=your-username java.naming.security.credentials=your-password
验证步骤
- 重启Wildfly后,查看服务器日志,确认remoting连接器已正常启动(日志中会出现类似
JBAS017100: Listening on 0.0.0.0:4447的信息)。 - 客户端测试时,可以开启JNDI debug日志,通过
-Dorg.jboss.logging.logger.level=DEBUG参数查看连接过程中的详细错误,帮助排查问题。
内容的提问来源于stack exchange,提问作者S.P Singh
相关产品推荐
相关产品推荐

