最近,在利用应用程序客户端访问服务器端JNDI服务时,发现了一个有趣的现象:客户端与服务端在同一台机器上时程序顺利执行,但不在同一台机器上时会报JNDI查询错误。
所报错误信息中的关键字主要有“org.omg.CORBA.TRANSIENT”,“Connection refused”,"connect:host=localhost",“port=****”,“minor code:4942F301”,这个错误让我抓狂了好几天,仔细查看源代码也没有什么错误,防火墙全关了也不行,在网上搜索了半天也没有什么结果(有同样的问题,但没有结果),最后在IBM的网站上看到了一篇关于此类错误的文章,心里一下豁然开朗。
原来,默认的websphere服务器端口设置中,BOOTSTRAP_ADDRESS的主机被设为了“localhost”。这样,当客户端与服务器端交互的时候,服务器端传给客户端的服务器主机名为“localhost”,客户端利用此主机名“localhost”来与服务器交互时,实际上是给自己所在的主机(localhost)发送信息,这当然就会失败了。
所以,只需要将BOOTSTRAP_ADDRESS中的主机设为服务器的IP,或者服务器的DNS主机名(不能是一般的主机名)即可。
同样的道理,如果服务器使用的是WSAD中的测试服务器,只需要在服务器配置端口页中,设置正确的主机名就可以了。
呵,终于给搞定了…………,这样自己的测试服务器就不用开了,直接连到别的服务器上就OK了,自己的机器快的不少哇,本来IBM的东西就比较耗内存,公司又比较扣门,只给1G的内存,开个测试服务器就卡的要命,还怎么写程序…………
写个Blog祝贺一下~~