linux下,jndi 远程获取dataSource 报错,windows下测试没错

J2EE 码拜 10年前 (2015-04-12) 1459次浏览 0个评论

背景
    局域网内,有两台linux系统,一台windows系统  
    linux 服务器A :192.168.1.11,防火墙已经关闭
    linux 普通机B:
执行过程
     A上装了jboss应用服务器,现在要在 B 上获取此A的数据源(已经配好 <local-tx-datasource>******* </local-tx-datasource>),
     将客户端调用程序打成jar包,在windows下执行没有任何错误,在B下调用报错如下:
     

Caused by: java.rmi.ConnectException: Connection refused to host: 192.168.1.11; nested exception is: 
	java.net.ConnectException: Connection timed out
	at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:619)
	at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:216)
	at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:202)
	at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:128)
	at org.jboss.invocation.jrmp.server.JRMPInvoker_Stub.invoke(Unknown Source)
	at org.jboss.invocation.jrmp.interfaces.JRMPInvokerProxy.invoke(JRMPInvokerProxy.java:133)
	at org.jboss.invocation.InvokerInterceptor.invokeInvoker(InvokerInterceptor.java:241)
	at org.jboss.invocation.InvokerInterceptor.invoke(InvokerInterceptor.java:181)
	at org.jboss.proxy.ClientMethodInterceptor.invoke(ClientMethodInterceptor.java:74)
	at org.jboss.proxy.ClientContainer.invoke(ClientContainer.java:101)
	... 27 more

客户端程序如下
  

 try {
	           	 Context ctx;
	           	 Properties p = new Properties();
	           	 p.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory"); 
	           	 p.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
	           	 p.put(Context.PROVIDER_URL, "jnp://192.168.1.11:1099");
	   				ctx = new InitialContext(p);
	   				dataSource = (javax.sql.DataSource) ctx.lookup("OracleDataSource");
	   				System.out.println(dataSource);

	   			} catch (Exception e) {
	   				// TODO Auto-generated catch block
	   				e.printStackTrace();
	   			}

   

linux下,jndi 远程获取dataSource 报错,windows下测试没错
20分
在linux A服务器里输入hostname -i,看看输出的是不是192.168.1.11,如果不是,就要设置/etc/hosts了。
linux下,jndi 远程获取dataSource 报错,windows下测试没错
引用 1 楼 fangmingshijie 的回复:

在linux A服务器里输入hostname -i,看看输出的是不是192.168.1.11,如果不是,就要设置/etc/hosts了。

现在linuxA上已经有Web程序了,如果我修改了/etc/hosts,会对Web程序有影响吗? 

linux下,jndi 远程获取dataSource 报错,windows下测试没错
检查下 jnp://192.168.1.11:1099   端口号和ip
linux下,jndi 远程获取dataSource 报错,windows下测试没错
引用 2 楼 l_ji_l 的回复:
Quote: 引用 1 楼 fangmingshijie 的回复:

在linux A服务器里输入hostname -i,看看输出的是不是192.168.1.11,如果不是,就要设置/etc/hosts了。

现在linuxA上已经有Web程序了,如果我修改了/etc/hosts,会对Web程序有影响吗? 

输出的不是192.168.1.11,后来把127.0.0.1改成192.168.1.11,但还是报一样的错,怎么回事呢?

linux下,jndi 远程获取dataSource 报错,windows下测试没错
引用 3 楼 magi1201 的回复:

检查下 jnp://192.168.1.11:1099   端口号和ip

这个都检查过的,没有问题。windows下都可以的

linux下,jndi 远程获取dataSource 报错,windows下测试没错
20分
在windows下请求的192.168.1.11怎么可以的?之前ip不是127.0.0.1吗
linux下,jndi 远程获取dataSource 报错,windows下测试没错
引用 4 楼 l_ji_l 的回复:

输出的不是192.168.1.11,后来把127.0.0.1改成192.168.1.11,但还是报一样的错,怎么回事呢?

A 机器输出的ip地址是多少?然后在代码中使用那个ip去连接
127.0.0.1 是本机ip,在B机器上调用A机器的数据源,使用127.0.0.1,代码会寻找B机器上面的数据源连接

linux下,jndi 远程获取dataSource 报错,windows下测试没错
引用 6 楼 huxiweng 的回复:

在windows下请求的192.168.1.11怎么可以的?之前ip不是127.0.0.1吗

ip一直是127.0.0.1的,没有改过,但不知道什么原因,windows下确实没有问题,放到linux下就Connection refused,后来也试了改成192.168.1.11还是一样的错误,windows下也没有问题。怀疑是不是有什么端口没有对linux B开放呢?

linux下,jndi 远程获取dataSource 报错,windows下测试没错
引用 7 楼 magi1201 的回复:
Quote: 引用 4 楼 l_ji_l 的回复:

输出的不是192.168.1.11,后来把127.0.0.1改成192.168.1.11,但还是报一样的错,怎么回事呢?

A 机器输出的ip地址是多少?然后在代码中使用那个ip去连接
127.0.0.1 是本机ip,在B机器上调用A机器的数据源,使用127.0.0.1,代码会寻找B机器上面的数据源连接

A输出的是127.0.0.1 ,不能用这个吧? 后来把A 的/etc/hosts改成真实的192.168.1.11,B用192.168.1.11去连,还是有问题

linux下,jndi 远程获取dataSource 报错,windows下测试没错
找到问题了,原来linux服务器A上有个RMI Object专用端口没有开,谢谢大家的回复。但不知道为什么windows却可以连?
linux下,jndi 远程获取dataSource 报错,windows下测试没错
60分
引用 10 楼 l_ji_l 的回复:

找到问题了,原来linux服务器A上有个RMI Object专用端口没有开,谢谢大家的回复。但不知道为什么windows却可以连?

RMI Object专用端口,是1099吗还是?
刚才午休的时候,还在想,如果实在不行,找你们安装服务器的同事,把网络重新设置下。


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明linux下,jndi 远程获取dataSource 报错,windows下测试没错
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!