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

WildFly 10查找EJB遇java.net.UnknownHostException问题求助

解决WildFly 10中EJB查找的java.net.UnknownHostException问题

我看你在WildFly 10上用JDK 8尝试查找EJB时碰到了java.net.UnknownHostException: http-remoting://localhost的异常,这问题根源在于你还在使用旧版JBoss AS的命名配置,而WildFly 10已经采用了全新的EJB客户端命名机制,旧配置自然不兼容。下面一步步帮你解决:

1. 移除过时的JNP相关配置

你代码里的这些属性都是旧版JBoss的遗留配置,WildFly 10已经不再支持了,直接删掉就行:

properties.put("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
properties.put("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces");

2. 配置WildFly 10正确的EJB客户端参数

替换成以下符合WildFly 10规范的配置:

Properties properties = new Properties();
// 使用WildFly官方的远程命名工厂
properties.put(javax.naming.Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory");
// http-remoting协议地址,旧工厂无法识别该协议才导致主机解析错误
properties.put(javax.naming.Context.PROVIDER_URL, "http-remoting://localhost:9080");
// 开启EJB上下文支持,这个属性可以保留
properties.put("jboss.naming.client.ejb.context", "true");

// 如果你的EJB配置了认证,需要添加以下两行(替换成你的用户名密码)
// properties.put(javax.naming.Context.SECURITY_PRINCIPAL, "your-username");
// properties.put(javax.naming.Context.SECURITY_CREDENTIALS, "your-password");

3. 确保依赖正确引入

WildFly 10的EJB客户端需要特定的依赖包,如果你用Maven管理项目,直接在pom.xml里添加:

<dependency>
    <groupId>org.wildfly</groupId>
    <artifactId>wildfly-ejb-client-bom</artifactId>
    <version>10.1.0.Final</version>
    <type>pom</type>
    <scope>provided</scope>
</dependency>

如果是手动管理依赖,要确保项目里包含jboss-ejb-client.jar、jboss-remote-naming.jar等相关Jar包(这些都可以从WildFly安装目录的client文件夹里找到)。

4. 完整的EJB查找示例代码

给你一个完整的可参考代码片段,包含WildFly专属的JNDI命名格式:

InitialContext initialContext = null;
try {
    Properties properties = new Properties();
    properties.put(javax.naming.Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory");
    properties.put(javax.naming.Context.PROVIDER_URL, "http-remoting://localhost:9080");
    properties.put("jboss.naming.client.ejb.context", "true");

    initialContext = new InitialContext(properties);

    // WildFly EJB的JNDI格式:ejb:[应用名]/[模块名]/[唯一标识]/[Bean类名]![远程接口全限定名]
    // 示例:假设你的EJB部署在MyApp应用,模块是MyEJBModule,Bean是UserServiceBean,远程接口是com.example.UserServiceRemote
    String jndiName = "ejb:MyApp/MyEJBModule//UserServiceBean!com.example.UserServiceRemote";
    UserServiceRemote ejbRemote = (UserServiceRemote) initialContext.lookup(jndiName);

    // 调用EJB方法
    ejbRemote.sayHello();
} catch (NamingException e) {
    e.printStackTrace();
} finally {
    if (initialContext != null) {
        try {
            initialContext.close();
        } catch (NamingException e) {
            e.printStackTrace();
        }
    }
}

5. 额外排查点

  • 确认WildFly 10服务器正在运行,且standalone.xml里配置的http端口确实是9080(默认是8080,如果你改了端口才用9080);
  • 试试把localhost换成127.0.0.1,避免本地主机名解析问题;
  • 如果是远程服务器,确保防火墙开放了对应的http-remoting端口。

内容的提问来源于stack exchange,提问作者subbu royal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:58:44