上記のような設定をしています。最近、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)