Bonjour,
J'ai 200 bases Informix sur 200 serveurs.
J'ai un EJB3 qui doit etablire une connexion JDBC sur une des bases suivant un paramétre.
Les connexions fonctionnent bien en général. Mais je viens de me rendre compte d'un probleme.
Je fais une premiere demande sur une base1 non joignable (en erreur) et bien toutes les autres demandes de connexion se trouvent bloqués en attendant que ma premiere demande retourne une erreure.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 private Statement getStatement(HotelsSystem hotelSystem) throws BusinessException{ Logger.getLogger(HotelBean.class.getName()).finest("connect to -- : " + hotelSystem.getHotelid()); Connection connection; Statement hotelStatement = null; try { Class.forName("com.informix.jdbc.IfxDriver", true, Thread.currentThread().getContextClassLoader()).newInstance(); Logger.getLogger(HotelBean.class.getName()).finest("------> loaded" ); connection = DriverManager.getConnection("jdbc:informix-sqli://"+hotelSystem.getHotelid()+":port/bddname:INFORMIXSERVER="+hotelSystem.getIdBdd()+";user=user;password=pwd", "", ""); Logger.getLogger(HotelBean.class.getName()).finest("REF CON ------>" + connection.toString()); ... Logger.getLogger(HotelBean.class.getName()).exiting(this.getClass().getName(), "Private_getStatement"); } catch (Exception e) { ... } return hotelStatement;
Dans les logs je vais voir
C'est "DriverManager.getConnection" qui bloque. Comment faire en sorte que le DriverManger puisse marcher en multi thread (ou autre) qu'il ne bloque pas tous le monde ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 connect to -- : hotel1 ------> loaded connect to -- : hotel2 ------> loaded ........... (1 min) Erreur de connexion sur hotel1 Exit REF CON ------> gfkjqfhllal (hotel2) Exit
Partager