java - Hibernate exception: No Hibernate Session bound to Thread -
i trying use hibernate when attempt open session following exception
org.springframework.web.util.nestedservletexception: request processing failed; nested exception org.hibernate.hibernateexception: no hibernate session bound thread, , configuration not allow creation of non-transactional 1 here org.springframework.web.servlet.frameworkservlet.processrequest(frameworkservlet.java:656) org.springframework.web.servlet.frameworkservlet.dopost(frameworkservlet.java:560) javax.servlet.http.httpservlet.service(httpservlet.java:641) javax.servlet.http.httpservlet.service(httpservlet.java:722) org.springframework.security.web.filterchainproxy$virtualfilterchain.dofilter(filterchainproxy.java:368) org.springframework.security.web.access.intercept.filtersecurityinterceptor.invoke(filtersecurityinterceptor.java:109) org.springframework.security.web.access.intercept.filtersecurityinterceptor.dofilter(filtersecurityinterceptor.java:83) org.springframework.security.web.filterchainproxy$virtualfilterchain.dofilter(filterchainproxy.java:380) org.springframework.security.web.access.exceptiontranslationfilter.dofilter(exceptiontranslationfilter.java:97) org.springframework.security.web.filterchainproxy$virtualfilterchain.dofilter(filterchainproxy.java:380) org.springframework.security.web.session.sessionmanagementfilter.dofilter(sessionmanagementfilter.java:100) org.springframework.security.web.filterchainproxy$virtualfilterchain.dofilter(filterchainproxy.java:380) org.springframework.security.web.authentication.anonymousauthenticationfilter.dofilter(anonymousauthenticationfilter.java:78) org.springframework.security.web.filterchainproxy$virtualfilterchain.dofilter(filterchainproxy.java:380) org.springframework.security.web.servletapi.securitycontextholderawarerequestfilter.dofilter(securitycontextholderawarerequestfilter.java:54) org.springframework.security.web.filterchainproxy$virtualfilterchain.dofilter(filterchainproxy.java:380) org.springframework.security.web.savedrequest.requestcacheawarefilter.dofilter(requestcacheawarefilter.java:35) org.springframework.security.web.filterchainproxy$virtualfilterchain.dofilter(filterchainproxy.java:380) org.springframework.security.web.authentication.abstractauthenticationprocessingfilter.dofilter(abstractauthenticationprocessingfilter.java:187) org.springframework.security.web.filterchainproxy$virtualfilterchain.dofilter(filterchainproxy.java:380) org.springframework.security.web.authentication.logout.logoutfilter.dofilter(logoutfilter.java:105) 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) org.springframework.web.filter.characterencodingfilter.dofilterinternal(characterencodingfilter.java:88) org.springframework.web.filter.onceperrequestfilter.dofilter(onceperrequestfilter.java:76) com.opensymphony.sitemesh.webapp.sitemeshfilter.obtaincontent(sitemeshfilter.java:129) com.opensymphony.sitemesh.webapp.sitemeshfilter.dofilter(sitemeshfilter.java:77) root cause org.hibernate.hibernateexception: no hibernate session bound thread, , configuration not allow creation of non-transactional 1 here org.springframework.orm.hibernate3.springsessioncontext.currentsession(springsessioncontext.java:63) org.hibernate.impl.sessionfactoryimpl.getcurrentsession(sessionfactoryimpl.java:622) com.dataart.masternoy.dao.imp.userdaoimpl.existuserbyloginemail(userdaoimpl.java:35) com.dataart.masternoy.service.imp.userserviceimpl.existuserbyloginmail(userserviceimpl.java:47) com.dataart.masternoy.controller.firstpagecontroller.isvalid(firstpagecontroller.java:46) com.dataart.masternoy.controller.firstpagecontroller.confirmregister(firstpagecontroller.java:79) sun.reflect.nativemethodaccessorimpl.invoke0(native method) sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl.java:39) sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:25) java.lang.reflect.method.invoke(method.java:597) org.springframework.web.bind.annotation.support.handlermethodinvoker.invokehandlermethod(handlermethodinvoker.java:176) org.springframework.web.servlet.mvc.annotation.annotationmethodhandleradapter.invokehandlermethod(annotationmethodhandleradapter.java:426) org.springframework.web.servlet.mvc.annotation.annotationmethodhandleradapter.handle(annotationmethodhandleradapter.java:414) org.springframework.web.servlet.dispatcherservlet.dodispatch(dispatcherservlet.java:790) org.springframework.web.servlet.dispatcherservlet.doservice(dispatcherservlet.java:719) org.springframework.web.servlet.frameworkservlet.processrequest(frameworkservlet.java:644) org.springframework.web.servlet.frameworkservlet.dopost(frameworkservlet.java:560) javax.servlet.http.httpservlet.service(httpservlet.java:641) javax.servlet.http.httpservlet.service(httpservlet.java:722) org.springframework.security.web.filterchainproxy$virtualfilterchain.dofilter(filterchainproxy.java:368) org.springframework.security.web.access.intercept.filtersecurityinterceptor.invoke(filtersecurityinterceptor.java:109) org.springframework.security.web.access.intercept.filtersecurityinterceptor.dofilter(filtersecurityinterceptor.java:83) org.springframework.security.web.filterchainproxy$virtualfilterchain.dofilter(filterchainproxy.java:380) org.springframework.security.web.access.exceptiontranslationfilter.dofilter(exceptiontranslationfilter.java:97) org.springframework.security.web.filterchainproxy$virtualfilterchain.dofilter(filterchainproxy.java:380) org.springframework.security.web.session.sessionmanagementfilter.dofilter(sessionmanagementfilter.java:100) org.springframework.security.web.filterchainproxy$virtualfilterchain.dofilter(filterchainproxy.java:380) org.springframework.security.web.authentication.anonymousauthenticationfilter.dofilter(anonymousauthenticationfilter.java:78) org.springframework.security.web.filterchainproxy$virtualfilterchain.dofilter(filterchainproxy.java:380) org.springframework.security.web.servletapi.securitycontextholderawarerequestfilter.dofilter(securitycontextholderawarerequestfilter.java:54) org.springframework.security.web.filterchainproxy$virtualfilterchain.dofilter(filterchainproxy.java:380) org.springframework.security.web.savedrequest.requestcacheawarefilter.dofilter(requestcacheawarefilter.java:35) org.springframework.security.web.filterchainproxy$virtualfilterchain.dofilter(filterchainproxy.java:380) org.springframework.security.web.authentication.abstractauthenticationprocessingfilter.dofilter(abstractauthenticationprocessingfilter.java:187) org.springframework.security.web.filterchainproxy$virtualfilterchain.dofilter(filterchainproxy.java:380) org.springframework.security.web.authentication.logout.logoutfilter.dofilter(logoutfilter.java:105) 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) org.springframework.web.filter.characterencodingfilter.dofilterinternal(characterencodingfilter.java:88) org.springframework.web.filter.onceperrequestfilter.dofilter(onceperrequestfilter.java:76) com.opensymphony.sitemesh.webapp.sitemeshfilter.obtaincontent(sitemeshfilter.java:129) com.opensymphony.sitemesh.webapp.sitemeshfilter.dofilter(sitemeshfilter.java:77) here config
<?xml version="1.0" encoding="utf-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:util="http://www.springframework.org/schema/util" xsi:schemalocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.1.xsd" default-lazy-init="true"> <import resource="applicationcontext-services.xml" /> <import resource="applicationcontext-security.xml" /> <import resource="applicationcontext-email.xml" /> <import resource="applicationcontext-social.xml" /> <mvc:resources mapping="/resources/**" location="/resources/" /> <mvc:annotation-driven /> <context:component-scan base-package="com.company.name." /> <bean id="validator" class="org.springframework.validation.beanvalidation.localvalidatorfactorybean" /> <bean id="viewresolver" class="org.springframework.web.servlet.view.internalresourceviewresolver"> <property name="prefix" value="/pages/" /> <property name="suffix" value=".jsp" /> <property name="contenttype" value="text/html; charset=utf-8" /> </bean> <bean id="messagesource" class="org.springframework.context.support.resourcebundlemessagesource"> <property name="basename" value="messages" /> <property name="usecodeasdefaultmessage" value="true" /> </bean> <bean id="jacksonmessageconverter" class="org.springframework.http.converter.json.mappingjacksonhttpmessageconverter"> </bean> <bean class="org.springframework.web.servlet.mvc.annotation.annotationmethodhandleradapter"> <property name="messageconverters"> <list> <ref bean="jacksonmessageconverter" /> </list> </property> </bean> </beans> dispatcher servlet
<?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:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:util="http://www.springframework.org/schema/util" xsi:schemalocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd"> <mvc:annotation-driven /> <context:component-scan base-package="com.company.name" /> <mvc:resources mapping="/resources/**" location="/resources/" /> <!-- <mvc:view-controller path="/error/" view-name="errors/error" /> <mvc:view-controller path="/403/" view-name="errors/403" /> <mvc:view-controller path="/404/" view-name="errors/404" /> <mvc:view-controller path="/405/" view-name="errors/405" /> --> </beans> services
<?xml version="1.0" encoding="utf-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemalocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd" default-lazy-init="true"> <!-- <tx:annotation-driven transaction-manager="txmanager" /> --> <tx:annotation-driven transaction-manager="transactionmanager" /> <bean id="transactionmanager" class="org.springframework.orm.hibernate3.hibernatetransactionmanager"> <property name="sessionfactory" ref="sessionfactory" /> </bean> <bean id="configproperties" class="com.dataart.masternoy.utils.propertiesutil"> <property name="ignoreunresolvableplaceholders" value="true" /> <property name="locations"> <list> <value>classpath:/config.properties</value> <value>classpath:/jdbc.properties</value> </list> </property> </bean> <bean id="datasource" class="org.springframework.jdbc.datasource.drivermanagerdatasource"> <property name="driverclassname" value="com.mysql.jdbc.driver" /> <property name="url" value="jdbc:mysql://localhost:3306/shop" /> <property name="username" value="root" /> <property name="password" value="root" /> </bean> <bean id="datasourcenew" class="org.springframework.jdbc.datasource.drivermanagerdatasource"> <!-- <property name="driverclassname" value="org.hsqldb.jdbcdriver" /> --> <property name="url" value="jdbc:mysql://localhost:3306/shop" /> <property name="username" value="root" /> <property name="password" value="root" /> </bean> <bean class="org.springframework.jdbc.core.jdbctemplate" id="jdbctemplate"> <constructor-arg ref="datasource" /> </bean> <bean id="txmanager" class="org.springframework.jdbc.datasource.datasourcetransactionmanager"> <property name="datasource" ref="datasource" /> </bean> <bean id="sessionfactory" class="org.springframework.orm.hibernate3.annotation.annotationsessionfactorybean" lazy-init="true"> <property name="datasource" ref="datasourcenew" /> <property name="packagestoscan" value="com.company.name" /> <property name="configlocation"> <value>classpath:hibernateconfig.xml</value> </property> <property name="configurationclass"> <value>org.hibernate.cfg.annotationconfiguration</value> </property> <property name="hibernateproperties"> <props> <prop key="hibernate.connection.driver_class">org.hsqldb.jdbcdriver</prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.dialect">org.hibernate.dialect.mysqlinnodbdialect</prop> <prop key="hibernate.connection.charset">utf-8</prop> <prop key="current_session_context_class">thread</prop> <prop key="format_sql">true</prop> </props> </property> </bean> </beans> and serviceimpl
@service(value = "userservice") public class userserviceimpl implements userservice { @autowired @qualifier("userdao") userdao userdao; @transactional public void addnewuser(user user) { userdao.insertnewuser(user); } @transactional(readonly = true) public user getuserbylogin(string login) { return userdao.selectuserbylogin(login); } @transactional(readonly = true) public list<user> getuserlist() { return userdao.getuserlist(); } @transactional public void removeuserbylogin(string login) { userdao.deleteuserbylogin(login); } @transactional(readonly = true) public boolean existuserbyloginmail(string login, string email) { return userdao.existuserbyloginemail(login, email); } @transactional(readonly = true) public user getuserbyid(long id) { return (user) userdao.selectuserbyid(id); } @transactional(readonly = true) public user getuserbyloginpass(string login, string pass) { return userdao.getuserbyloginpass(login, pass); } }
here's guess. in spring mvc application context used dispatcher servlet child of global context. if configure same beans in child context ones configured in global context, child context beans override global ones.
this did, means reference userservice instantiated child context, there no transaction manager, instead of getting reference userservice instantiated global context, transaction manager defined.
make sure scan mvc-related beans in mvc context, changing
<context:component-scan base-package="com.company.name" /> to
<context:component-scan base-package="com.company.name.web" /> or to
<context:component-scan base-package="com.company.name"> <context:include-filter type="annotation" expression="org.springframework.stereotype.controller"/> </context:component-scan> for example.
Comments
Post a Comment