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 :

[STRUS/HIBERNATE] Popup et duplication de connexion


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    85
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 85
    Par défaut [STRUS/HIBERNATE] Popup et duplication de connexion
    Salut la compagnie !

    Aujourd'hui dans la série problème à deux balles je vous présente le nouveau venu.

    Ma MOA m'a demandé de faire un fichier Excel depuis mon IHM. Pour faire à la volée sur mon appli web je créé depuis un lien une popup qui ouvre un nouveau formulaire Strus afin d'écrire directement dans le

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    response.getOutputStream();
    Mes données Excel.

    Je m'en sors à merveille jusque ce que Oracle me fasse la gueule, comme quoi gnagnagna j'ai 30 connexion en cours...



    Oula y a comme un hic.

    Et oui à chaque popup j'aurai une dupplication de connexion.

    Là je comprend pas...

    Mon hibernateUtils est tiré du site officiel :

    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
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    public class HibernateUtil {
    	private static SessionFactory sessionFactory;
     
    	private static Configuration configuration;
     
    	static {
    		// Create the initial SessionFactory from the default configuration
    		// files
    		try {
    			// Read hibernate.properties, if present
    			configuration = new Configuration();
    			// Use annotations: configuration = new AnnotationConfiguration();
     
    			// Read hibernate.cfg.xml (has to be present)
    			configuration.configure();
     
    			// Build and store (either in JNDI or static variable)
    			rebuildSessionFactory(configuration);
     
    		} catch (Throwable ex) {
    			// We have to catch Throwable, otherwise we will miss
    			// NoClassDefFoundError and other subclasses of Error
    			throw new ExceptionInInitializerError(ex);
    		}
    	}
     
    	/**
             * Returns the Hibernate configuration that was used to build the
             * SessionFactory.
             * 
             * @return Configuration
             */
    	public static Configuration getConfiguration() {
    		return configuration;
    	}
     
    	public static Session getSession() {
    		return HibernateUtil.getSessionFactory().getCurrentSession();
    	}
     
    	/**
             * Returns the global SessionFactory either from a static variable or a JNDI
             * lookup.
             * 
             * @return SessionFactory
             */
    	private static SessionFactory getSessionFactory() {
    		String sfName = configuration.getProperty(Environment.SESSION_FACTORY_NAME);
    		if (sfName != null) {
    			try {
    				return (SessionFactory) new InitialContext().lookup(sfName);
    			} catch (NamingException ex) {
    				throw new RuntimeException(ex);
    			}
    		} else if (sessionFactory == null) {
    			rebuildSessionFactory();
    		}
    		return sessionFactory;
    	}
     
    	/**
             * Closes the current SessionFactory and releases all resources.
             * <p>
             * The only other method that can be called on HibernateUtil after this one
             * is rebuildSessionFactory(Configuration).
             */
    	public static void shutdown() {
    		// Close caches and connection pools
    		getSessionFactory().close();
     
    		// Clear static variables
    		sessionFactory = null;
    	}
     
    	/**
             * Rebuild the SessionFactory with the static Configuration.
             * <p>
             * Note that this method should only be used with static SessionFactory
             * management, not with JNDI or any other external registry. This method
             * also closes the old static variable SessionFactory before, if it is still
             * open.
             */
    	public static void rebuildSessionFactory() {
    		rebuildSessionFactory(configuration);
    	}
     
    	/**
             * Rebuild the SessionFactory with the given Hibernate Configuration.
             * <p>
             * HibernateUtil does not configure() the given Configuration object, it
             * directly calls buildSessionFactory(). This method also closes the old
             * static variable SessionFactory before, if it is still open.
             * 
             * @param cfg
             */
    	public static void rebuildSessionFactory(Configuration cfg) {
    		if (sessionFactory != null && !sessionFactory.isClosed())
    			sessionFactory.close();
    		if (cfg.getProperty(Environment.SESSION_FACTORY_NAME) != null) {
    			cfg.buildSessionFactory();
    		} else {
    			sessionFactory = cfg.buildSessionFactory();
    		}
    		configuration = cfg;
    	}
    Question : A part faire un closeSession() tout moche dans mon formulaire Struts lié à la popup y aurait pas une autre solution ? Ou alors je gère mal le fait d'avoir le fichier Excel écris à la volée, et que la solution de la popup c'est pas génial ?

    Ouais je sais j'ai de ces question moi...

  2. #2
    Membre averti
    Inscrit en
    Novembre 2003
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 47
    Par défaut
    En general (pour tes autres actions) tu close ou ta session ? En tout ds ce genre d'application hibernate conseille l'utilisation de filtre servlet (qui ouvre la connexion avant le passage ds l'action et la referme juste apres).

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    85
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 85
    Par défaut
    Je ne ferme jamais ma session. J'ai un singleton pour la récupérer dans mon HibernateUtil.

    D'où mon étonnement pour la connexion qui est doublée...

  4. #4
    Membre averti
    Inscrit en
    Novembre 2003
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 47
    Par défaut
    Moi ca me parait tout a fait normal ...A chaque requete (thread) que tu envoies une nouvelle session(jdbc) est créée car HibernateUtil.getSessionFactory().getCurrentSession(); creer une nouvelle session pour ta nouvelle requete (thread).

    HibernateUtil garantie une instance de sessionFactory mais pas une seul session hibernate(=session jdbc)...

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    85
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 85
    Par défaut
    C'est ce que j'ai compris en fait.

    Apparemment le fait d'ouvrir une popup créé un nouveau Thread Java (Je suis sous Struts 1.2) du coup il me créé une nouvelle Session hibernate.

    Le truc à faire donc est de fermer la session une fois mon traitement effectué non ?

    PS : Bon j'ai fait un petit close session et mon popup s'ouvre via une balise <a target ='_blank'>. Une fois déployée sur Jonas plus de duplication de session.

    Sans vraiment savoir pourquoi.

    Je passe à résolu. Merci pour tout.

  6. #6
    Membre averti
    Inscrit en
    Novembre 2003
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 47
    Par défaut
    Hibernate conseille d'utiliser le pattern 'open session in view' qui consiste en fait a utiliser un filtre sur la servlet controleur de struts pour ouvrir et fermer les connexions avant le que l'action ne soit executé !

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

Discussions similaires

  1. [SGBD] Connexion de Eclipse (Hibernate) vers SQL Server
    Par Michel38 dans le forum Hibernate
    Réponses: 4
    Dernier message: 11/03/2012, 16h39
  2. [Hibernate] Problemes de connexion d'un sous domaine
    Par sylvain_neus dans le forum Hibernate
    Réponses: 15
    Dernier message: 09/05/2006, 10h49
  3. [Hibernate] utilisation de JNDI pour connexion MySql
    Par michaelbob dans le forum Hibernate
    Réponses: 1
    Dernier message: 14/03/2006, 16h08
  4. [hibernate][C3PO] connexion mySQL qui tombe ....
    Par michaelbob dans le forum Hibernate
    Réponses: 14
    Dernier message: 27/09/2005, 15h02
  5. [Hibernate] pool de connexion
    Par asx9 dans le forum Hibernate
    Réponses: 16
    Dernier message: 17/05/2005, 10h47

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