1

在此处输入图像描述

我有一个如上所示的设置。最近,我们的 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.mnsomecompany.com 都解析到同一个地址。开启 VPN 后,双归属进入,“ABCD1099.mnsomecompany.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)
4

2 回答 2

0

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

telnet 主机名端口#

或跟踪目的地?

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

于 2017-02-16T21:49:59.790 回答
0

我不知道这是否仍然是实际的,但是...初始查找响应一个对象的引用,具体取决于您的服务器正在使用的名称绑定 - 所以如果服务器响应的是对 ABCD1099.mnsomecompany.com 的引用,它不会无论您在命名提供程序 url 中输入什么,因为它仅用于初始查找,而响应将使用配置为响应的任何名称服务器...

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

于 2018-04-18T08:28:32.617 回答