Jboss客户端连接EJB,javax.naming.CommunicationException [Root exception is java.rmi.Co

本文介绍了解决EJB远程调用时遇到的javax.naming.CommunicationException异常的方法。异常发生在客户端尝试连接127.0.0.1时。解决方案包括修改Linux主机名配置文件或启动JBoss时指定正确的主机名。
在使用远程连接,调用ejb过程中,出现异常javax.naming.CommunicationException [java.rmi.ConnectException: Connection refused to host: 127.0.0.1]。远程服务器为Linux,jboss-4.0.3.



2008-05-22 11:07:19 ERROR [http-8080-Processor24] (?:?) - javax.naming.CommunicationException [Root exception is java.rmi.ConnectException: Connection refused to host: 127.0.0.1; nested exception is:
java.net.ConnectException: Connection refused: connect]
javax.naming.CommunicationException [Root exception is java.rmi.ConnectException: Connection refused to host: 127.0.0.1; nested exception is:
java.net.ConnectException: Connection refused: connect]
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:663)
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:520)
at javax.naming.InitialContext.lookup(InitialContext.java:347)
at com.ccit.nwca.webapp.proxy.RemoteServiceLocator.getHome(Unknown Source)
at com.ccit.nwca.webapp.proxy.CertTabProxy.getCertByCertSn(Unknown Source)
at com.ccit.neg.node.rawebproxy.business.client.UnitKeyRecoverBl.userentform(UnitKeyRecoverBl.java:42)
at com.ccit.neg.web.controller.operatorservice.realletter.ResumeKeyAction.execute(ResumeKeyAction.java:67)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

原因:
客户端程序向服务端请求一个对象的时候,返回的stub对象里面包含了服务器的hostname,客户端的后续操作根据这个hostname来连接服务器端。
查看linux的hostname配置。hostname -i,
如果返回的是127.0.0.1,客户端肯定会抛如标题的异常了。

解决办法:
1:修改hostname.
vi /etc/hosts
将 127.0.0.1 改为真实地址,如:192.168.100.72。这样客户端就能得到真实的ip了。
2:在启动jboss时显示指定hostname.
如:nohup ./run.sh --host="192.168.100.72" &

使用1或2即可解决此异常.
### 异常原因分析 `javax.naming.NameNotFoundException` 和 `javax.naming.LinkException` 是 JNDI(Java Naming and Directory Interface)相关异常。以下是对这两种异常的详细分析和解决方案。 #### 1. `javax.naming.NameNotFoundException` 此异常表明在 JNDI 上下文中找不到指定的名称。根据引用内容,问题可能来源于以下几个方面[^2]: - **JNDI 数据源未正确配置**:即使项目中没有显式使用 JNDI,某些框架(如 Spring)可能会尝试查找 JNDI 数据源。 - **Spring 配置错误**:如果 Spring 的配置文件中存在与 JNDI 相关的配置项,但实际环境中未定义这些资源,就会抛出此异常。 - **依赖冲突**:某些 jar 包可能导致 Spring 内部逻辑错误地尝试加载 JNDI 资源。 解决方法包括: - 检查 Spring 配置文件,确保没有多余的 `<jee:jndi-lookup>` 或类似配置[^4]。 - 如果确实不需要 JNDI,可以在 `web.xml` 中添加上下文参数以明确环境: ```xml <context-param> <param-name>spring.profiles.active</param-name> <param-value>dev</param-value> </context-param> ``` - 确保数据库连接池(如 Druid)的配置正确,避免 Spring 错误地解析为 JNDI 数据源[^3]。 #### 2. `javax.naming.LinkException` 此异常通常表示 JNDI 查找过程中发生链接错误,可能是由于以下原因: - **网络问题**:JNDI 服务不可用或端口配置错误。 - **JNDI 上下文绑定失败**:例如,在 JBoss 中,服务绑定的端口号未正确配置[^3]。 解决方案包括: - 检查 JNDI 服务是否启动,并验证其端口是否正确。例如,在 JBoss 中可以配置如下 Bean 来绑定命名服务端口: ```xml <bean class="org.jboss.services.binding.ServiceBindingMetadata"> <property name="serviceName">jboss:service=Naming</property> <property name="bindingName">Port</property> <property name="port">1099</property> <property name="description">The listening socket for the Naming service</property> </bean> ``` - 确保客户端和服务端的 JNDI 配置一致,例如 `jndi.properties` 文件中的 `java.naming.provider.url` 参数。 ### 示例代码 以下是配置 Druid 数据源时避免 JNDI 查找的示例代码: ```java @Bean public DataSource dataSource() { DruidDataSource dataSource = new DruidDataSource(); dataSource.setUrl("jdbc:mysql://localhost:3306/test"); dataSource.setUsername("root"); dataSource.setPassword("password"); return dataSource; } ``` ### 注意事项 - 如果仍然遇到问题,可以尝试启用 JNDI 调试日志以定位具体原因: ```properties -Djava.naming.debug=true ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值