VPN上的初始上下文查找失败

时间:2017-02-16 05:30:28

标签: websphere vpn ejb-2.x initial-context

enter image description here

我有如上所示的设置。最近,我们的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)

2 个答案:

答案 0 :(得分:0)

当VPN开启时,您可以从服务器上的命令行telnet到目的地吗?

telnet主机名端口#

或traceroute目的地?

当VPN打开时,当目的地可路由时它是否仍然可以通过阻止端口的防火墙?我想我们需要查看traceroute输出以查看目标是否可达,以及是否是在端口上telnet到该目的地时发生的情况。

答案 1 :(得分:0)

我不知道这是否仍然是实际的...... 初始查找响应对象的引用,具体取决于您的服务器正在使用的名称绑定 - 因此,如果服务器响应ABCD1099.mnsomecompany.com的引用,那么您在命名提供程序URL中放置的内容并不重要,因为这只是用于初始查找,而响应将使用服务器配置为响应的任何名称...

服务器和客户端都在通信中使用其名称(已配置),您必须确保它们都是可解析和可路由的。