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 :

Question pour Hibernate avec une DataSource


Sujet :

Hibernate Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2006
    Messages : 25
    Points : 22
    Points
    22
    Par défaut Question pour Hibernate avec une DataSource
    J'ai réussi à bien configurer le tout cependant j'ai un problème : À chaque fois que je démarre le serveur, je peux faire exaxtement 3 accès à la base de données, la 4ieme requête loop toujours indéfiniment. Je ne sais pas si quelqu'un a une idée du problème...

    J'utilise:

    Hibernate 3
    MySQL 4.1
    Common DBCP
    Tomcat 5.5
    Voici ma config dans hibernate.cfg.xml:
    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
    19
    20
    21
    <hibernate-configuration>
     
    <session-factory>
     
    	<property name="connection.datasource">java:comp/env/jdbc/InoukDB</property>
     
    	<!--### Apache DBCP Connection Pool ###-->
    	<!--connection pool-->
    	<property name="hibernate.dbcp.maxActive">10</property>
    	<property name="hibernate.dbcp.whenExhaustedAction">1</property>
    	<property name="hibernate.dbcp.maxWait">100</property>
    	<property name="hibernate.dbcp.maxIdle">10</property>
     
    	<mapping resource="mapping/Departement.hbm.xml" />
    	<mapping resource="mapping/Poste.hbm.xml" />
    	<mapping resource="mapping/Staff.hbm.xml" />
    ...
     
    </session-factory>
     
    </hibernate-configuration>
    Voici mon code pour initialiser ma connexion dans une classe "Helper":
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
     
    public class HibernateHelper {
     
    	private static final SessionFactory sessionFactory;
    	private static final ThreadLocal threadSession = new ThreadLocal();
    	private static final ThreadLocal threadTransaction = new ThreadLocal();
    	private static DataSource ds = null;
     
    	static{
    		try{
                Configuration cfg = new Configuration();
                cfg.configure("mapping/hibernate.cfg.xml");
                sessionFactory = cfg.buildSessionFactory();
     
                Context ctx = new InitialContext();
                ds = (DataSource)ctx.lookup("java:comp/env/jdbc/InoukDB");
     
    	    } catch (Throwable ex) {
    	        ex.printStackTrace();
    	        throw new ExceptionInInitializerError(ex);
    	      }
    	}
     
        /**
         * Return a unique session object
         *
         */
        public static Session getSession() {
     
        	Session session = (Session) threadSession.get();
     
        	//Open a new Session, if this thread has none yet
        	try{
        		if(session == null){
     
        			try {
     
    					session = sessionFactory.openSession( ds.getConnection() );
    	    			threadSession.set(session);
     
    				} catch (SQLException e) {
    					e.printStackTrace();
    				}
     
        		}
        	}
        	catch(HibernateException ex){
        		ex.getMessage();
        	}
     
        	return session;
        }
     
    ...
    Bon voila en espérant de l'aide

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    548
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 548
    Points : 635
    Points
    635
    Par défaut
    Lance le serveur en debug et regarde là où ça boucle.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2006
    Messages : 25
    Points : 22
    Points
    22
    Par défaut
    Merci, j'ai pu remarquer que le " l'erreur" se produit à la ligne suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    session = sessionFactory.openSession( ds.getConnection() );
    cependant je ne comprend toujours pas le problème puisque pour les trois accès précédents à la base de données ont fonctionné...ce n'est qu'à la 4ieme fois que cette ligne est exécutée que le problème survient...

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2006
    Messages : 25
    Points : 22
    Points
    22
    Par défaut
    Je voudrais juste spécifier que le problème arrive non pas à la 4ieme exécution de ds.getDatasource() mais bien à la 9ieme...jai tenté de modifier le paramètre maxActive=20 et maxIdle=20 mais sans succès. Avec un datasource dois-je fermer la connection après utilisation moi-même ?

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2006
    Messages : 25
    Points : 22
    Points
    22
    Par défaut
    Et bien j'ai trouvé le problème...j'ai l'impression que je me parle à moi-même Mais je vais partager la solution au cas ou quelqu'un aurait le même problème dans le futur:

    Je ne fermais simplement pas la connection...je croyais qu'avec un datasource je n'avais pas à le faire.

    tout ce que je fais c'est que je fais maConnection.close() avant d'appeler session.close() voila! Voici mon code pour ouvrir et fermer la session d'hibernate:
    .
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    .
    	private static DataSource ds = null;
    	private static Connection dsConnection = null;
    ...
    
        public static Session getSession() {
        	
        	Session session = (Session) threadSession.get();
        	
        	//Open a new Session, if this thread has none yet
        	try{
        		if(session == null){
        			
        			try {
        				dsConnection = ds.getConnection();
    
    					session = sessionFactory.openSession( dsConnection );
    	    			threadSession.set(session);
    	    			
    				} catch (SQLException e) {
    					e.printStackTrace();
    				}
    				
        		}
        	}
        	catch(HibernateException ex){
        		ex.getMessage();
        	}
        	
        	return session;
        }
    
        public static void closeSession(){
        	Session session = (Session)threadSession.get();
        	try{
    			threadSession.set(null);
    			if(session != null && session.isOpen()){
    				dsConnection.close();
    				session.close();
    			}
    		}
    		catch(HibernateException ex){
    			ex.printStackTrace();
    		}
    		catch(SQLException ex){
    			ex.printStackTrace();
    		}
        }
    ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 06/08/2007, 19h28
  2. Réponses: 6
    Dernier message: 19/03/2007, 20h04
  3. [C#] Comment lier un label avec une DataSource ?
    Par LE NEINDRE dans le forum ASP.NET
    Réponses: 3
    Dernier message: 29/08/2006, 14h17
  4. Quelques questions pour débuter avec FOP
    Par lr dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 08/04/2006, 13h09
  5. [Kylix] Erreur "File not Found : Windows.dcu"
    Par derrick23_2003 dans le forum EDI
    Réponses: 4
    Dernier message: 27/12/2005, 11h18

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