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 :

[Hibernate][Spring] Session Hibernate initialisée


Sujet :

Hibernate Java

  1. #1
    Membre habitué
    Inscrit en
    Décembre 2002
    Messages
    186
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 186
    Points : 130
    Points
    130
    Par défaut [Hibernate][Spring] Session Hibernate initialisée
    g vu que pour utiliser le listener de spring OpenSessionInViewFilter il faut définir un LocalSessionFactoryBean avec les parametres de mapping, etc.
    ca marche, au demarage de la webapp il charge tout comme il faut

    mais comment j'accede à le session Hibernate qui a été initialisée par le filtre dans ma dao?
    je précise que pour le moment je n'utilise pas de template/callback

  2. #2
    Nouveau membre du Club
    Inscrit en
    Avril 2004
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 47
    Points : 37
    Points
    37
    Par défaut
    pkoi as tu besoin de recuperer la session d'hibernate

  3. #3
    Membre habitué
    Inscrit en
    Décembre 2002
    Messages
    186
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 186
    Points : 130
    Points
    130
    Par défaut
    session.createQuerry(...)
    session.load(...)

    je n'utilise pas les helper de spring, il me faut bien accéder moi meme a la session

  4. #4
    Nouveau membre du Club
    Inscrit en
    Avril 2004
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 47
    Points : 37
    Points
    37
    Par défaut
    avec Spring c un peu different d'hibernate

    tu passe par des service qui eux vont faire appelle aux methode que tu as defini dans ta DAO

    ta DAO par exemple va definir la methode executeQuery

    public List executeQuery(String aQuery)
    {
    return getHibernateTemplate().find(aQuery);
    }

    // getHibernateTemplate est fourni par spring qui va geerer les sessions
    // en fait tu te preocupe plus de recuperer la session

    ton service va definir une methode createQuery qui elle va appeler
    executeQuery de ta DAO

    et tu ne passe que par les services !!!!

    http://www.onjava.com/pub/a/onjava/2004/04/07/wiringwebapps.html?page=2
    un petit lien avec exemple telechargeable

  5. #5
    Membre habitué
    Inscrit en
    Décembre 2002
    Messages
    186
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 186
    Points : 130
    Points
    130
    Par défaut
    merci je vais essayer cette solution a base de template

    mais ce que je demandais c'était comment faire une dao sans les template Sring
    par ce qu'en cemoment je fais la migration des dao vers Hibernate et pour les tests je préfere pas utiliser de suite ces template.
    Pour l'instant j'utilise un HibernateUtil (suggéré dans la doc) qui me retourne des sessions (HibernateUtil.curentSession() ). et a partir cette session je fais mes services...

    donc la question: la session hibernate qui est managé par le listener Spring est elle accessible directement, si oui comment ???

  6. #6
    Nouveau membre du Club
    Inscrit en
    Avril 2004
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 47
    Points : 37
    Points
    37
    Par défaut
    je crois qu'elle n'est pas accessible directement

    Spring est une couche au dessus d'hibernate et en voulant utiliser les session hibernate tu perds un interet a utiliser le framework spring

  7. #7
    Membre éprouvé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2002
    Messages : 652
    Points : 1 151
    Points
    1 151
    Par défaut
    Pour ma part, j'hérite des DAO de Spring mais je n'utilise pas les templates (HibernateDaoSupport)

    Ainsi, pour récupérer ma session, un simple getSession() suffit !


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Criteria c = getSession().createCriteria(Compte.class);
    Clic me...
    CV en ligne

    Il y a 10 types de personnes, celui qui connait le binaire, et l'autre...

    Pas de réponse en MP...Merci

  8. #8
    Nouveau membre du Club
    Inscrit en
    Avril 2004
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 47
    Points : 37
    Points
    37
    Par défaut
    en effet c aussi une solution que de faire heriter tes dao de spring

  9. #9
    Membre habitué
    Inscrit en
    Décembre 2002
    Messages
    186
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 186
    Points : 130
    Points
    130
    Par défaut
    super ca marche

    c cette solution qui me convient le mieux

    pour ceux qui sont interessé par une solution, voici un exemple:

    fichier de config lu par le listener Spring au démarage de la webapp:
    <beans>

    <bean id="myDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="java:comp/env/jdbc/siteCom"/>
    </bean>

    <!-- Hibernate SessionFactory -->
    <bean id="hibSessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource">
    <ref local="myDataSource"/>
    </property>
    <property name="configLocation">
    <value>WEB-INF/hibernate.cfg.xml</value>
    </property>
    </bean>

    <bean id="clientManager" class="dao2.ClientDAOHib">
    <property name="sessionFactory">
    <ref bean="hibSessionFactory"/>
    </property>
    </bean>
    </beans>

    un exemple de dao:

    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
     
    public class ClientDAOHib extends HibernateDaoSupport implements ClientDAO  {
     
        public Client getClientById(int idClient) throws Exception {
            Session session = this.getSession();
            Transaction tx = session.beginTransaction();
     
            ...
     
            tx.commit();
            session.flush();  //ne pas fermer la session, le filtre spring s'en charge!
            // mais il faut flusher pour prendre en compte les trt
     
            return client;
        }

    merci a vous



    [EDIT] c curieux, il me parse 2 fois le fichier de config hibernate?!

  10. #10
    Membre éprouvé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2002
    Messages : 652
    Points : 1 151
    Points
    1 151
    Par défaut
    Si je puis me permettre, vire ton code sur la partie transactionnelle et utilise un org.springframework.transaction.interceptor.TransactionProxyFactoryBean

    Exemple !

    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
     
    <bean id="clientManagerTarget" class="dao2.ClientDAOHib">
       <property name="sessionFactory"><ref bean="hibSessionFactory"/></property>
    </bean>
     
    <bean id="clientManager" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" >
       <property name="transactionManager" ref="transactionManager" />
       <property name="target" ref="clientManagerTarget" />
       <property name="transactionAttributes">
          <props>
             <prop key="*">PROPAGATION_REQUIRED</prop>
          </props>
       </property>
     
    </bean>
    En normalisant les noms de tes méthodes, tu peu rendre générique les propagations aussi; par exemple, ta méthode getClientById normalisée en J2EE deviend findByPrimaryKey, getClientByCountry deviens findByCountry, etc...
    Tu pourras ainsi placer l'attribut tranfactionnel sur la cléf "find*" de ton DAO.
    Clic me...
    CV en ligne

    Il y a 10 types de personnes, celui qui connait le binaire, et l'autre...

    Pas de réponse en MP...Merci

  11. #11
    Membre éprouvé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2002
    Messages : 652
    Points : 1 151
    Points
    1 151
    Par défaut
    Autre chose, le filtre flush la connexion certe, mais ne libérè pas la connexion. Tu risque d'avoir des soucis assez rapidement genre Pool Exhausted
    En utilisant les transactions, plus de souci
    Clic me...
    CV en ligne

    Il y a 10 types de personnes, celui qui connait le binaire, et l'autre...

    Pas de réponse en MP...Merci

  12. #12
    Membre habitué
    Inscrit en
    Décembre 2002
    Messages
    186
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 186
    Points : 130
    Points
    130
    Par défaut
    merci du coup de main, je me plonge de suite dans la doc

    j'envisage d'injecter mes dao dans des SSLBs sur jboss (pas d'Entity). Est ce que g interet a garder les transactions de SPring?

    sinon pour le filtre, il fait bien son boulot (il ferme correctement la session) . Par contre, effectivement, sans le filtre, le flush ne suffit pas.

  13. #13
    Membre éprouvé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2002
    Messages : 652
    Points : 1 151
    Points
    1 151
    Par défaut
    Je ne saurais pas te dire pour les transactions déclarées via Spring vs via JBoss. De toute manière, les 2 utiliseront le JTS de JBoss je suppose donc...
    Clic me...
    CV en ligne

    Il y a 10 types de personnes, celui qui connait le binaire, et l'autre...

    Pas de réponse en MP...Merci

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

Discussions similaires

  1. [Framework] Spring/Hibernate et sessions (LazyInitializationException)
    Par stof dans le forum Spring
    Réponses: 4
    Dernier message: 18/02/2014, 15h45
  2. [Integration] [Spring/Hibernate/JSF] Session is closed!
    Par mr1azl dans le forum Spring
    Réponses: 4
    Dernier message: 15/03/2011, 08h39
  3. [Spring & Hibernate] Gestion des sessions Hibernate
    Par Fennec. dans le forum Hibernate
    Réponses: 5
    Dernier message: 26/08/2010, 16h42
  4. Hibernate/Spring : gestion des sessions
    Par herve91 dans le forum Hibernate
    Réponses: 5
    Dernier message: 13/05/2010, 11h15
  5. [Data] Session Hibernate Spring
    Par riderfun dans le forum Spring
    Réponses: 2
    Dernier message: 24/05/2009, 21h56

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