Du code ci-dessous j'essaie d'accéder à EJB sur une machine distante.Comment régler le délai de recherche JNDI sur glassfish
Le code fonctionne sur Glassfish 4.1. dans une application Web.
Properties props = new Properties();
props.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.enterprise.naming.SerialInitContextFactory");
props.setProperty("org.omg.CORBA.ORBInitialHost","X.X.X.X");
props.setProperty("org.omg.CORBA.ORBInitialPort","3700");
//timeouts
props.setProperty("sun.rmi.transport.connectionTimeout","5000");
props.setProperty("sun.rmi.transport.tcp.handshakeTimeout","5000");
props.setProperty("sun.rmi.transport.tcp.responseTimeout","5000");
props.setProperty("sun.rmi.transport.tcp.readTimeout","5000");
props.setProperty("com.sun.corba.ee.transport.ORBWaitForResponseTimeout","5000");
props.setProperty("com.sun.corba.ee.transport.ORBTCPConnectTimeouts", "100:500:100:500");
props.setProperty("com.sun.corba.ee.transport.ORBTCPTimeouts", "500:2000:50:1000");
System.setProperty("com.sun.corba.ee.transport.ORBWaitForResponseTimeout","5000");
System.setProperty("com.sun.corba.ee.transport.ORBTCPConnectTimeouts","100:500:100:500");
System.setProperty("com.sun.corba.ee.transport.ORBTCPTimeouts","500:2000:50:1000");
System.setProperty("sun.rmi.transport.connectionTimeout","5000");
System.setProperty("sun.rmi.transport.tcp.handshakeTimeout","5000");
System.setProperty("sun.rmi.transport.tcp.responseTimeout","5000");
System.setProperty("sun.rmi.transport.tcp.readTimeout","5000");
//timeout
InitialContext ctx = new InitialContext(props);
MyRemoteInterface bean = (MyRemoteInterface)
ctx.lookup("ejbname#EjbName");
Si la recherche aboutit, tout fonctionne correctement.
Cependant, le problème est que si la machine distante n'est pas disponible, le code se bloque ctx.lookup("ejbname#EjbName");
. Le temps est différent sur la cause, pour plus 1 min 20 seconds
si l'IP est inexistante et plus 10 minutes
si la machine distante est derrière un pare-feu jusqu'à ce qu'il jette rechercher exception d'échec:
Severe: org.omg.CORBA.COMM_FAILURE: FINE: 00410001: Connection failure:
...
...
Caused by: java.nio.channels.UnresolvedAddressException
at sun.nio.ch.Net.checkAddress(Net.java:101)
at sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:622)
at com.sun.corba.ee.impl.misc.ORBUtility.openSocketChannel(ORBUtility.java:110)
at org.glassfish.enterprise.iiop.impl.IIOPSSLSocketFactory.createSocket(IIOPSSLSocketFactory.java:329)
Et est une autre cause ici:
Caused by: java.net.ConnectException: Connection timed out: connect
at sun.nio.ch.Net.connect0(Native Method)
at sun.nio.ch.Net.connect(Net.java:454)
at sun.nio.ch.Net.connect(Net.java:446)
at sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:648)
at com.sun.corba.ee.impl.misc.ORBUtility.openSocketChannel(ORBUtility.java:110)
at org.glassfish.enterprise.iiop.impl.IIOPSSLSocketFactory.createSocket(IIOPSSLSocketFactory.java:329)
Je ne veux pas attendre si longtemps pour découvrir que la recherche a échoué. Tous les délais d'attente que j'ai définis ci-dessus n'ont pas aidé. Comment puis-je définir un délai d'attente de recherche ou existe-t-il une autre solution de contournement?
Merci.
Voulez-vous dire ** JNDI ** lookout timeout? Si oui, votre titre et vos tags sont incorrects. – EJP
@EJP oui JNDI - merci - l'a corrigé. – Plirkee