IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Hibernate Java Discussion :

Savoir quelle base de données est indisponible ?


Sujet :

Hibernate Java

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    759
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 759
    Points : 159
    Points
    159
    Par défaut Savoir quelle base de données est indisponible ?
    Bonjour,

    J'ai une application reliée à plusieurs bases de données.

    mais quand il y en a une qui est indisponible et qu'on veut en savoir plus dans les logs, ça crache juste bêtement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Caused by: org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot get a connection, pool error Timeout waiting for idle object
    	at org.apache.tomcat.dbcp.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:104)
    	at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:880)
    	at org.hibernate.connection.DatasourceConnectionProvider.getConnection(DatasourceConnectionProvider.java:69)
    	at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:417)
    	... 40 more
    Caused by: java.util.NoSuchElementException: Timeout waiting for idle object
    	at org.apache.tomcat.dbcp.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:958)
    	at org.apache.tomcat.dbcp.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:96)
    	... 43 more

    D'ailleurs je ne sais pas exactement comment marche ces logs mais si on pouvait désigner la bonne base on gagnerait du temps.

    Ces bases sont définies dans persistence.xml de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
      <persistence-unit name="Base1.hibernate" transaction-type="RESOURCE_LOCAL">
        <description>Base1 Persistence Unit</description>
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <class>com.myApp.domain.MyClass</class>
        <exclude-unlisted-classes>true</exclude-unlisted-classes>
        <properties>
          <property name="hibernate.connection.datasource"  value="java:comp/env/jdbc/Base1" />
          <property name="hibernate.format_sql"             value="true"/>
          <property name="hibernate.dialect"                value="org.hibernate.dialect.OracleDialect"/>	  
          <property name="hibernate.default_schema" 		value="schema1"/>
        </properties>
      </persistence-unit>
    Merci.

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    C'est à toi de gérer ça à plus haut niveau en traitant tes exception. Tu as eu une exception en gérant un persistance unit, affiche son nom toi même dans ton traitement, puisque le nom permet de savoir à quel db il est relié.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    759
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 759
    Points : 159
    Points
    159
    Par défaut
    Honnêtement un petit lien ou un bout de code serait apprécié car j'ai beau chercher ce que je peux faire autour de mon persistence unit pour gérer les erreurs je ne trouve rien sur mon problème.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    759
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 759
    Points : 159
    Points
    159
    Par défaut
    Désolé pour ceux qui pensaient trouver des réponses dans ce post, apparemment on n'ira pas plus loin...

    J'ai quand-même essayé de créer une datasource pour chacune de mes 4 connexions, puis je les ai mises dans un service TestConnexionService et je les tests une par une.
    A 1ère vue, ça semblait marcher mais en fait quand une tombe, elle impacte peu après les autres donc je ne peux toujours pas identifier proprement quelle connexion foire.

    dsDB1.getConnection() lance une exception par exemple quand en fait c'est dsDB3 qui est tombée.
    ce qui est marrant entre une datasource OK et une datasource KO quand j'observe le détail,n c'est que dans celle qui est KO il y a une variable datasource à NULL....sauf que la classe javax.sql.DataSource ne propose pas de méthode "getDatasource" pour ma...datasource...

  5. #5
    Membre extrêmement actif Avatar de ddoumeche
    Homme Profil pro
    Ingénieur recherche et développement
    Inscrit en
    Octobre 2007
    Messages
    1 676
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Singapour

    Informations professionnelles :
    Activité : Ingénieur recherche et développement

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 676
    Points : 2 009
    Points
    2 009
    Par défaut
    https://commons.apache.org/proper/co...iguration.html

    utilises testWhileIdle et validationQuery (par exemple select 1;) pour maintenir ouvert ton pool de connexions. Si l'erreur persiste, tes connexions ne sont sans doute pas libérées correctement dans ton application
    La joie de l'âme est dans la planification -- Louis Hubert Liautey

Discussions similaires

  1. [Xmlrpc] Savoir sur quelle base de données on travaille
    Par vernetk dans le forum Odoo (ex-OpenERP)
    Réponses: 2
    Dernier message: 16/07/2014, 09h05
  2. Réponses: 2
    Dernier message: 27/06/2006, 09h15
  3. Quelle base de donnée utiliser?
    Par VTwin dans le forum Décisions SGBD
    Réponses: 5
    Dernier message: 01/07/2005, 12h34
  4. Création de logiciel, oui, mais quelle base de donnée ?
    Par Acti dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 17/02/2005, 12h41
  5. Réponses: 5
    Dernier message: 28/10/2003, 15h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo