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

Spring Java Discussion :

Erreur: No Hibernate Session bound to thread [Data]


Sujet :

Spring Java

  1. #1
    Candidat au Club
    Inscrit en
    Juin 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Erreur: No Hibernate Session bound to thread
    Je suis débutant avec Spring et tente d'utiliser ce dernier avec Hibernate3. (Je me base sur "12.2.5 Implementing DAO based on plain Hibernate 3 API" de la doc de spring)

    Je suis bloqué à cette erreur:

    org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here

    Quelquechose m'aurait-il échappé ?
    merci


    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
     
    public class DomaineDAOImpl implements DomaineDAO {
    	private SessionFactory sessionFactory;
     
    	public void setSessionFactory(SessionFactory sessionFactory) {
            this.sessionFactory = sessionFactory;
            }
     
           (...)
     
    	public void saveDomaine(Domaine domaine) {		
    		this.sessionFactory.getCurrentSession().saveOrUpdate(domaine);
    	}
    }
    context.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
    22
     
       <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean" name="sessionFactory">
            <property name="dataSource">
                <ref local="dataSource" />
            </property>
            <property name="mappingDirectoryLocations">
                <value>mappings</value>
            </property>
            <property name="hibernateProperties">
                <props>
                    <prop key="hibernate.dialect">${sessionFactory.hibernate.dialect}</prop>
                    <prop key="hibernate.connection.pool_size">1</prop>
                    <prop key="hibernate.hbm2ddl.auto">update</prop>
    				<prop key="hibernate.show_sql">${sessionFactory.hibernate.show_sql}</prop>
                    <prop key="hibernate.default_schema">${sessionFactory.hibernate.default_schema}</prop>
                    </props>
            </property>        
        </bean>   
     
        <bean id="domaineDAO" class="dictionnaire.dao.hibernate.DomaineDAOImpl" name="domaineDAO">
        	<property name="sessionFactory" ref="sessionFactory"/>
        </bean>
    Trace:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Exception in thread "main" org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here
    	at org.springframework.orm.hibernate3.LocalSessionFactoryBean$TransactionAwareInvocationHandler.invoke(LocalSessionFactoryBean.java:1087)
    	at $Proxy0.getCurrentSession(Unknown Source)
    	at dictionnaire.dao.hibernate.DomaineDAOImpl.saveDomaine(DomaineDAOImpl.java:35)
    	at dictionnaire.ProjetManager.createAndStoreProjetDomaine(ProjetManager.java:53)
    	at dictionnaire.ProjetManager.main(ProjetManager.java:29)

  2. #2
    Membre averti
    Profil pro
    Développeur Java
    Inscrit en
    Novembre 2007
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2007
    Messages : 301
    Points : 368
    Points
    368
    Par défaut
    Tout est dans le message d'erreur. Tu as probablement oublié dans ta méthode createAndStoreProjetDomaine de gérer les transactions. Je te conseils à ce propos d'utiliser Spring pour les gérer de manière automatique. Cf. documentation.

  3. #3
    Candidat au Club
    Inscrit en
    Juin 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    En effet, je n'avais aucune session j'ai cherché la raison du "configuration does not allow creation of non-transactional one here" mais je me suis résigné et j'ai ajouté les transactions. Encore ici j'ai un problème "Bean name must not be empty" pourtant tout mes beans on un nom :

    (J'ai tenté aussi avec les annotations, mais toujours la même erreur)

    Erreur:
    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
    Exception in thread "main" java.lang.ExceptionInInitializerError
    	at dictionnaire.ProjetManager.createAndStoreProjetDomaine(ProjetManager.java:53)
    	at dictionnaire.ProjetManager.main(ProjetManager.java:29)
    Caused by: java.lang.IllegalArgumentException: Bean name must not be empty
    	at org.springframework.util.Assert.hasText(Assert.java:168)
    	at org.springframework.beans.factory.config.RuntimeBeanReference.<init>(RuntimeBeanReference.java:55)
    	at org.springframework.beans.factory.config.RuntimeBeanReference.<init>(RuntimeBeanReference.java:43)
    	at org.springframework.transaction.config.TxNamespaceHandler$TxAdviceBeanDefinitionParser.doParse(TxNamespaceHandler.java:116)
    	at org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser.parse(AbstractSingleBeanDefinitionParser.java:32)
    	at org.springframework.beans.factory.xml.DefaultXmlBeanDefinitionParser.parseCustomElement(DefaultXmlBeanDefinitionParser.java:416)
    	at org.springframework.beans.factory.xml.DefaultXmlBeanDefinitionParser.parseBeanDefinitions(DefaultXmlBeanDefinitionParser.java:374)
    	at org.springframework.beans.factory.xml.DefaultXmlBeanDefinitionParser.registerBeanDefinitions(DefaultXmlBeanDefinitionParser.java:206)
    	at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:388)
    	at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:259)
    	at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:209)
    	at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:184)
    	at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:126)
    	at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:142)
    	at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:113)
    	at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:81)
    	at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:89)
    	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:279)
    	at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:87)
    	at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:72)
    	at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:63)
    	at dictionnaire.dao.DAORegistry.<clinit>(DAORegistry.java:12)
    	... 2 more
    context.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
    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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns:aop="http://www.springframework.org/schema/aop"
         xmlns:tx="http://www.springframework.org/schema/tx"
         xsi:schemaLocation="
         http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
         http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
         http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
     
        <bean id="myPropertyConfigurer"
              class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
              name="propertyConfigurer">
            <property name="location">
                <value>classpath:project.properties</value>
            </property>
        </bean>
     
     
    	<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" name="dataSource">
            <property name="driverClassName" value="${dataSource.driverClassName}" />
            <property name="url" value="${dataSource.url}" />
            <property name="username" value="${dataSource.username}" />
            <property name="password" value="${dataSource.password}" />
        </bean>
     
     
        <bean id="mySessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean" name="sessionFactory">
            <property name="dataSource">
                <ref local="myDataSource" />
            </property>
            <property name="mappingDirectoryLocations">
                <value>mappings</value>
            </property>
            <property name="hibernateProperties">
                <props>
                    <prop key="hibernate.dialect">${sessionFactory.hibernate.dialect}</prop>
                    <prop key="hibernate.connection.pool_size">1</prop>
                    <prop key="hibernate.hbm2ddl.auto">update</prop>
    				<prop key="hibernate.show_sql">${sessionFactory.hibernate.show_sql}</prop>
                    <prop key="hibernate.default_schema">${sessionFactory.hibernate.default_schema}</prop>
     
                </props>
            </property>        
        </bean>   
     
        <!--  <tx:annotation-driven  /> -->
     
     
        <bean id="myTransactionManager" name="transactionManager" 
    			class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    		<property name="sessionFactory" ref="sessionFactory"/>
    	</bean> 
     
    	<aop:config>
    		<aop:pointcut id="pcDomaineMethodes" expression="execution(* dictionnaire.DomaineDAO.*(..) )" />
    		<aop:advisor advice-ref="txAdvice" pointcut-ref="pcDomaineMethodes" />
    	</aop:config>
     
        <tx:advice id="txAdvice" transaction-manager="transactionManager">
        	<tx:attributes>
        		<tx:method name="save*" propagation="REQUIRED"/>
        		<tx:method name="*" read-only="true"/>
        	</tx:attributes>
        </tx:advice>
     
        <bean id="myDomaineDAO" class="dictionnaire.dao.hibernate.DomaineDAOImpl" name="domaineDAO">
        	<constructor-arg ref="sessionFactory"/>
        	<property name="transactionManager" ref="myTransactionManager"/>
        </bean>
     
     
    </beans>
    DAORegistry:
    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
     
    public class DAORegistry {
        private static ApplicationContext ctx;
     
        static {
            ctx = new ClassPathXmlApplicationContext("context.xml");
        }
     
        private void DaoRegistry(){
        }
     
     
        public static DomaineDAO getDomaineDAO(){ 
        	return (DomaineDAO) ctx.getBean("domaineDAO");
        }
    }
    ProjetManager (classe de "test"):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public class ProjetManager {
    	public static void main(String[] args) {
    		ProjetManager mgr = new ProjetManager();
     
            	mgr.createAndStoreProjetDomaine(new Date());
            }
     
    	private void createAndStoreProjetDomaine(Date dateCreation) {        
    		Domaine d = new Domaine("domaine1");
                    DAORegistry.getDomaineDAO().saveDomaine(d);
            }
    }

  4. #4
    Membre averti
    Profil pro
    Développeur Java
    Inscrit en
    Novembre 2007
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2007
    Messages : 301
    Points : 368
    Points
    368
    Par défaut
    Enlève tous les "name" de tes beans. Cela ne sert à rien si tu utilises id.

  5. #5
    Candidat au Club
    Inscrit en
    Juin 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    J'ai enfin trouvé le problème !!!

    J'utilisais des librairies de Spring qui venait avec un exemple (version 2.0) fait auparavant avec d'autres de la plus récente version !!

    À partir de ce moment le tout s'est mis à bien fonctionner

  6. #6
    Nouveau membre du Club
    Inscrit en
    Octobre 2010
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 33
    Points : 27
    Points
    27
    Par défaut No Hibernate Session bound to thread
    Bonjour,

    Je vois que t'as eu la même erreur que moi mais je ne sais pas si il s'agit d'un même problème; en effet je suis débutante et je développe une application java/spring/hibernate.

    Mon application est composée de deux interfaces : une page login (formulaire html) et une page d'accueil

    Pour l'exécution de mon application, je rentre correctement mes identifiants (login+password) et lorsque je clique sur "valider" j'ai une page qui m'affiche l'erreur Etat HTTP 500 avec le message suivant :
    org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here
    org.springframework.orm.hibernate3.SpringSessionContext.currentSession(SpringSessionContext.java:63)
    org.hibernate.impl.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:700)
    fr.cs.tma.dao.hibernate.UserDaoHibernate.findByUsername(UserDaoHibernate.java:35)
    fr.cs.tma.service.UserService.loadUserByUsername(UserService.java:22)
    org.springframework.security.authentication.dao.DaoAuthenticationProvider.retrieveUser(DaoAuthenticationProvider.java:86)
    org.springframework.security.authentication.dao.AbstractUserDetailsAuthenticationProvider.authenticate(AbstractUserDetailsAuthenticationProvider.java:129)
    org.springframework.security.authentication.ProviderManager.doAuthentication(ProviderManager.java:130)
    org.springframework.security.authentication.AbstractAuthenticationManager.authenticate(AbstractAuthenticationManager.java:48)
    org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter.attemptAuthentication(UsernamePasswordAuthenticationFilter.java:97)
    org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:199)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
    org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:57)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
    org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
    org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:169)
    org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)
    org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)

    Pourrais-tu m'aider au moins à comprendre le sens de l'erreur ??
    Please Help!
    Merci

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 09/09/2011, 09h49
  2. erreur java.lang.NoClassDefFoundError: org/hibernate/Session
    Par faty_br dans le forum Développement Web en Java
    Réponses: 10
    Dernier message: 13/04/2011, 14h26
  3. No Hibernate Session bound to thread
    Par manu11 dans le forum Spring Web
    Réponses: 3
    Dernier message: 01/10/2009, 09h17
  4. Réponses: 5
    Dernier message: 29/09/2009, 18h56
  5. [Integration] No Hibernate Session bound to thread, ejb3 stateless et Spring
    Par pbdlpc dans le forum Spring
    Réponses: 4
    Dernier message: 26/09/2008, 16h23

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