java - Hibernate @Transactional Sessions -
i sorry, repeat question have been here many times. have problem transactional annotation. have such classes , interfaces dao, daoimpl , service, serviceimpl. here conf files
<?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 /> <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="transactionmanager" class="org.springframework.orm.hibernate3.hibernatetransactionmanager"> <property name="sessionfactory" ref="sessionfactory" /> </bean> <bean id="sessionfactory" class="org.springframework.orm.hibernate3.localsessionfactorybean" lazy-init="true"> <property name="datasource" ref="datasourcenew" /> <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> when put @transactional annotation daoimpl tests work allright , maven compile application. when deploy tomcat , try use dao methods browser have stack trace.
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:44) com.dataart.masternoy.controller.firstpagecontroller.isvalid(firstpagecontroller.java:46) com.dataart.masternoy.controller.firstpagecontroller.confirmregister(firstpagecontroller.java:101) 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) when put @transactional annotation serviceimpl not compile app because
java.lang.illegalstateexception: failed load applicationcontext @ org.springframework.test.context.testcontext.getapplicationcontext(testcontext.java:308) @ org.springframework.test.context.support.dependencyinjectiontestexecutionlistener.injectdependencies(dependencyinjectiontestexecutionlistener.java:109) @ org.springframework.test.context.support.dependencyinjectiontestexecutionlistener.preparetestinstance(dependencyinjectiontestexecutionlistener.java:75) @ org.springframework.test.context.testcontextmanager.preparetestinstance(testcontextmanager.java:321) @ org.springframework.test.context.junit4.springjunit4classrunner.createtest(springjunit4classrunner.java:220) @ org.springframework.test.context.junit4.springjunit4classrunner$1.runreflectivecall(springjunit4classrunner.java:301) @ org.junit.internal.runners.model.reflectivecallable.run(reflectivecallable.java:15) @ org.springframework.test.context.junit4.springjunit4classrunner.methodblock(springjunit4classrunner.java:303) @ org.springframework.test.context.junit4.springjunit4classrunner.runchild(springjunit4classrunner.java:240) @ org.junit.runners.blockjunit4classrunner.runchild(blockjunit4classrunner.java:49) @ org.junit.runners.parentrunner$3.run(parentrunner.java:193) @ org.junit.runners.parentrunner$1.schedule(parentrunner.java:52) @ org.junit.runners.parentrunner.runchildren(parentrunner.java:191) @ org.junit.runners.parentrunner.access$000(parentrunner.java:42) @ org.junit.runners.parentrunner$2.evaluate(parentrunner.java:184) @ org.springframework.test.context.junit4.statements.runbeforetestclasscallbacks.evaluate(runbeforetestclasscallbacks.java:61) @ org.springframework.test.context.junit4.statements.runaftertestclasscallbacks.evaluate(runaftertestclasscallbacks.java:70) @ org.junit.runners.parentrunner.run(parentrunner.java:236) @ org.springframework.test.context.junit4.springjunit4classrunner.run(springjunit4classrunner.java:180) @ org.eclipse.jdt.internal.junit4.runner.junit4testreference.run(junit4testreference.java:50) @ org.eclipse.jdt.internal.junit.runner.testexecution.run(testexecution.java:38) @ org.eclipse.jdt.internal.junit.runner.remotetestrunner.runtests(remotetestrunner.java:467) @ org.eclipse.jdt.internal.junit.runner.remotetestrunner.runtests(remotetestrunner.java:683) @ org.eclipse.jdt.internal.junit.runner.remotetestrunner.run(remotetestrunner.java:390) @ org.eclipse.jdt.internal.junit.runner.remotetestrunner.main(remotetestrunner.java:197) caused by: org.springframework.beans.factory.beancreationexception: error creating bean name 'org.springframework.web.servlet.mvc.annotation.defaultannotationhandlermapping#0': initialization of bean failed; nested exception org.springframework.beans.factory.beancreationexception: error creating bean name 'firstpagecontroller': injection of autowired dependencies failed; nested exception org.springframework.beans.factory.beancreationexception: not autowire field: com.dataart.masternoy.service.imp.userserviceimpl com.dataart.masternoy.controller.firstpagecontroller.usersereviceimpl; nested exception org.springframework.beans.factory.nosuchbeandefinitionexception: no matching bean of type [com.dataart.masternoy.service.imp.userserviceimpl] found dependency: expected @ least 1 bean qualifies autowire candidate dependency. dependency annotations: {@org.springframework.beans.factory.annotation.autowired(required=true), @org.springframework.beans.factory.annotation.qualifier(value=userservice)} @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.docreatebean(abstractautowirecapablebeanfactory.java:527) @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.createbean(abstractautowirecapablebeanfactory.java:456) @ org.springframework.beans.factory.support.abstractbeanfactory$1.getobject(abstractbeanfactory.java:291) @ org.springframework.beans.factory.support.defaultsingletonbeanregistry.getsingleton(defaultsingletonbeanregistry.java:222) @ org.springframework.beans.factory.support.abstractbeanfactory.dogetbean(abstractbeanfactory.java:288) @ org.springframework.beans.factory.support.abstractbeanfactory.getbean(abstractbeanfactory.java:190) @ org.springframework.beans.factory.support.defaultlistablebeanfactory.preinstantiatesingletons(defaultlistablebeanfactory.java:580) @ org.springframework.context.support.abstractapplicationcontext.finishbeanfactoryinitialization(abstractapplicationcontext.java:895) @ org.springframework.context.support.abstractapplicationcontext.refresh(abstractapplicationcontext.java:425) @ org.springframework.test.context.support.abstractgenericcontextloader.loadcontext(abstractgenericcontextloader.java:84) @ org.springframework.test.context.support.abstractgenericcontextloader.loadcontext(abstractgenericcontextloader.java:1) @ org.springframework.test.context.testcontext.loadapplicationcontext(testcontext.java:280) @ org.springframework.test.context.testcontext.getapplicationcontext(testcontext.java:304) ... 24 more caused by: org.springframework.beans.factory.beancreationexception: error creating bean name 'firstpagecontroller': injection of autowired dependencies failed; nested exception org.springframework.beans.factory.beancreationexception: not autowire field: com.dataart.masternoy.service.imp.userserviceimpl com.dataart.masternoy.controller.firstpagecontroller.usersereviceimpl; nested exception org.springframework.beans.factory.nosuchbeandefinitionexception: no matching bean of type [com.dataart.masternoy.service.imp.userserviceimpl] found dependency: expected @ least 1 bean qualifies autowire candidate dependency. dependency annotations: {@org.springframework.beans.factory.annotation.autowired(required=true), @org.springframework.beans.factory.annotation.qualifier(value=userservice)} @ org.springframework.beans.factory.annotation.autowiredannotationbeanpostprocessor.postprocesspropertyvalues(autowiredannotationbeanpostprocessor.java:285) @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.populatebean(abstractautowirecapablebeanfactory.java:1074) @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.docreatebean(abstractautowirecapablebeanfactory.java:517) @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.createbean(abstractautowirecapablebeanfactory.java:456) @ org.springframework.beans.factory.support.abstractbeanfactory$1.getobject(abstractbeanfactory.java:291) @ org.springframework.beans.factory.support.defaultsingletonbeanregistry.getsingleton(defaultsingletonbeanregistry.java:222) @ org.springframework.beans.factory.support.abstractbeanfactory.dogetbean(abstractbeanfactory.java:288) @ org.springframework.beans.factory.support.abstractbeanfactory.getbean(abstractbeanfactory.java:190) @ org.springframework.context.support.abstractapplicationcontext.getbean(abstractapplicationcontext.java:1075) @ org.springframework.web.servlet.handler.abstracturlhandlermapping.registerhandler(abstracturlhandlermapping.java:383) @ org.springframework.web.servlet.handler.abstracturlhandlermapping.registerhandler(abstracturlhandlermapping.java:362) @ org.springframework.web.servlet.handler.abstractdetectingurlhandlermapping.detecthandlers(abstractdetectingurlhandlermapping.java:82) @ org.springframework.web.servlet.handler.abstractdetectingurlhandlermapping.initapplicationcontext(abstractdetectingurlhandlermapping.java:58) @ org.springframework.context.support.applicationobjectsupport.initapplicationcontext(applicationobjectsupport.java:119) @ org.springframework.web.context.support.webapplicationobjectsupport.initapplicationcontext(webapplicationobjectsupport.java:72) @ org.springframework.context.support.applicationobjectsupport.setapplicationcontext(applicationobjectsupport.java:73) @ org.springframework.context.support.applicationcontextawareprocessor.invokeawareinterfaces(applicationcontextawareprocessor.java:106) @ org.springframework.context.support.applicationcontextawareprocessor.postprocessbeforeinitialization(applicationcontextawareprocessor.java:85) @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.applybeanpostprocessorsbeforeinitialization(abstractautowirecapablebeanfactory.java:394) @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.initializebean(abstractautowirecapablebeanfactory.java:1413) @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.docreatebean(abstractautowirecapablebeanfactory.java:519) ... 36 more caused by: org.springframework.beans.factory.beancreationexception: not autowire field: com.dataart.masternoy.service.imp.userserviceimpl com.dataart.masternoy.controller.firstpagecontroller.usersereviceimpl; nested exception org.springframework.beans.factory.nosuchbeandefinitionexception: no matching bean of type [com.dataart.masternoy.service.imp.userserviceimpl] found dependency: expected @ least 1 bean qualifies autowire candidate dependency. dependency annotations: {@org.springframework.beans.factory.annotation.autowired(required=true), @org.springframework.beans.factory.annotation.qualifier(value=userservice)} @ org.springframework.beans.factory.annotation.autowiredannotationbeanpostprocessor$autowiredfieldelement.inject(autowiredannotationbeanpostprocessor.java:502) @ org.springframework.beans.factory.annotation.injectionmetadata.inject(injectionmetadata.java:84) @ org.springframework.beans.factory.annotation.autowiredannotationbeanpostprocessor.postprocesspropertyvalues(autowiredannotationbeanpostprocessor.java:282) ... 56 more caused by: org.springframework.beans.factory.nosuchbeandefinitionexception: no matching bean of type [com.dataart.masternoy.service.imp.userserviceimpl] found dependency: expected @ least 1 bean qualifies autowire candidate dependency. dependency annotations: {@org.springframework.beans.factory.annotation.autowired(required=true), @org.springframework.beans.factory.annotation.qualifier(value=userservice)} @ org.springframework.beans.factory.support.defaultlistablebeanfactory.raisenosuchbeandefinitionexception(defaultlistablebeanfactory.java:920) @ org.springframework.beans.factory.support.defaultlistablebeanfactory.doresolvedependency(defaultlistablebeanfactory.java:789) @ org.springframework.beans.factory.support.defaultlistablebeanfactory.resolvedependency(defaultlistablebeanfactory.java:703) @ org.springframework.beans.factory.annotation.autowiredannotationbeanpostprocessor$autowiredfieldelement.inject(autowiredannotationbeanpostprocessor.java:474) ... 58 more my controller
@controller @requestmapping(value = "/") public class indexcontroller { public static final logger log = logger.getlogger(indexcontroller.class); @autowired @qualifier(value = "userservice") userservice userservice; my service
@service(value = "userservice") public class userserviceimpl implements userservice { @autowired @qualifier("userdao") userdao userdao; @transactional public void addnewuser(user user) { userdao.insertnewuser(user); } my test
public class userdaotest extends basetest { @autowired @qualifier(value = "userservice") userservice userserviceimpl; @test public void daotests() {
i think reason error when @transactional on userserviceimpl class because controller referencing userserviceimpl class directly when should referencing interface (since have it). causes issue because class spring constructs proxy , not instance of userserviceimpl.
as why no session error outside unit tests guess can userdaoimpl not being constructed spring. if @ stack trace there no proxy around either userservice or userdao.
are sure constructing userdaoimpl spring? sure it's getting injected user service spring? sure have element in application context used tomcat?
Comments
Post a Comment