我有如上所示的设置。最近,我们的Oracle数据库被移动到受防火墙保护的受保护网络段。
Hashtable table = new Hashtable();
table.put("java.naming.factory.initial", "com.ibm.websphere.naming.WsnInitialContextFactory");
table.put("java.naming.provider.url", "corbaloc:iiop:ABCD1099.x.somecompany.com:2811");
InitialContext iContext = new InitialContext(table);
Object object = iContext.lookup("ejb/com/somecompany/sandbox/vpn/tests/SandboxSessionEJBHome");
SandboxSessionEJBHome sandbox_home = (SandboxSessionEJBHome) PortableRemoteObject.narrow(object, SandboxSessionEJBHome.class);
try {
SandboxSessionEJB bean = (SandboxSessionEJB) sandbox_home.create();
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (CreateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
场景#1 :当没有启用VPN(Cisco Anyconnect)时,我的EJB 2.1客户端可以绑定并创建初始上下文。我可以查找我的无状态会话EJB 2.1。到目前为止一切都很好。我还没有编写任何对Oracle数据库的调用。所以,请注意,此时,我没有任何调用Oracle,甚至尝试任何类型的JDBC连接。
场景#2 :现在,当我打开VPN时,我无法创建初始上下文,绑定失败。
我进一步挖掘,问题的症结在于:
在打开VPN之前,ABCD1099.x.somecompany.com和ABCD1099.m.n.somecompany.com都会解析为相同的地址。一旦VPN打开,双归属就会出现," ABCD1099.m.n.somecompany.com"变得无法解决但是" ABCD1099.x.somecompany.com"仍然可以路由。
在我的整个代码和WAS配置文件的创建中,我使用了可路由的主机名。但是,InitialContext不断提取不可路由的主机名。我也尝试过使用IP地址。那没起效。我一直得到以下例外。
16:19:05.133 com.ibm.ws.orbimpl.transport.WSTCPTransportConnection createSocket(server,client) P=943838:O=0:CT ORBRas[default] Bind Client Socket To A Specific NIC card=true, client=ABCD1099.x.somecompany.com/10.25.95.13:0, server=ABCD1099.m.n.somecompany.com/10.7.225.141:2811, LocalHost=ABCD1099.x.somecompany.com, ConnectTimeout=10000ms
16:19:15.164 com.ibm.ws.orbimpl.transport.WSTCPTransportConnection connect:406 P=943838:O=0:CT ORBRas[default] java.net.SocketTimeoutException: connect timed out
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:381)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:243)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:230)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:377)
at java.net.Socket.connect(Socket.java:539)
at com.ibm.ws.orbimpl.transport.WSTCPTransportConnection.createSocket(WSTCPTransportConnection.java:367)
at com.ibm.CORBA.transport.TransportConnectionBase.connect(TransportConnectionBase.java:359)
at com.ibm.ws.orbimpl.transport.WSTransport.getConnection(WSTransport.java:436)
at com.ibm.CORBA.transport.TransportBase.getConnection(TransportBase.java:187)
at com.ibm.rmi.iiop.TransportManager.get(TransportManager.java:93)
at com.ibm.rmi.iiop.GIOPImpl.getConnection(GIOPImpl.java:130)
at com.ibm.rmi.iiop.GIOPImpl.locate(GIOPImpl.java:219)
at com.ibm.rmi.corba.Corbaloc.locateUsingINS(Corbaloc.java:307)
at com.ibm.rmi.corba.Corbaloc.resolve(Corbaloc.java:378)
at com.ibm.rmi.corba.ORB.objectURLToObject(ORB.java:3796)
at com.ibm.CORBA.iiop.ORB.objectURLToObject(ORB.java:3263)
at com.ibm.rmi.corba.ORB.string_to_object(ORB.java:3694)
at com.ibm.ws.naming.util.WsnInitCtxFactory.stringToObject(WsnInitCtxFactory.java:1645)
at com.ibm.ws.naming.util.WsnInitCtxFactory.getWsnNameService(WsnInitCtxFactory.java:1502)
at com.ibm.ws.naming.util.WsnInitCtxFactory.getRootContextFromServer(WsnInitCtxFactory.java:1040)
at com.ibm.ws.naming.util.WsnInitCtxFactory.getRootJndiContext(WsnInitCtxFactory.java:962)
at com.ibm.ws.naming.util.WsnInitCtxFactory.getInitialContextInternal(WsnInitCtxFactory.java:614)
at com.ibm.ws.naming.util.WsnInitCtx.getContext(WsnInitCtx.java:128)
at com.ibm.ws.naming.util.WsnInitCtx.getContextIfNull(WsnInitCtx.java:765)
at com.ibm.ws.naming.util.WsnInitCtx.lookup(WsnInitCtx.java:164)
at com.ibm.ws.naming.util.WsnInitCtx.lookup(WsnInitCtx.java:179)
at javax.naming.InitialContext.lookup(InitialContext.java:436)
at EJBInvocationTest.main(EJBInvocationTest.java:34)
答案 0 :(得分:0)
当VPN开启时,您可以从服务器上的命令行telnet到目的地吗?
telnet主机名端口#
或traceroute目的地?
当VPN打开时,当目的地可路由时它是否仍然可以通过阻止端口的防火墙?我想我们需要查看traceroute输出以查看目标是否可达,以及是否是在端口上telnet到该目的地时发生的情况。
答案 1 :(得分:0)
我不知道这是否仍然是实际的...... 初始查找响应对象的引用,具体取决于您的服务器正在使用的名称绑定 - 因此,如果服务器响应ABCD1099.mnsomecompany.com的引用,那么您在命名提供程序URL中放置的内容并不重要,因为这只是用于初始查找,而响应将使用服务器配置为响应的任何名称...
服务器和客户端都在通信中使用其名称(已配置),您必须确保它们都是可解析和可路由的。