java - Transaction error in Spring -


i have project https://github.com/ivartanian/onlinecontrol in spring mvc + jpa, worked spring configuration through xml. trying set project through java config (without xml). project starts, when create new user(entity user), error transaction. if create entity error not occur. if xml configuration error not occur too.

please tell me cause of error. glad of help

my xml config is:

    <context:component-scan             base-package="com.vizaco.onlinecontrol.service"/>      <!-- enables scanning @transactional annotations -->     <tx:annotation-driven/>      <!-- ========================= datasource definition ========================= -->      <!-- configurer replaces ${...} placeholders values properties file -->     <!-- (in case, jdbc-related settings datasource definition below) -->     <context:property-placeholder location="classpath:spring/data-access.properties" system-properties-mode="override"/>      <!-- database initializer. if of script fails, initialization stops. -->     <!-- alternative, embedded databases see <jdbc:embedded-database/>. -->     <jdbc:initialize-database data-source="datasource">         <jdbc:script location="${jdbc.initlocation}"/>         <jdbc:script location="${jdbc.datalocation}"/>     </jdbc:initialize-database>      <!-- datasource configuration jetty jdbc connection -->     <bean id="datasource" class="org.hsqldb.jdbc.jdbcdatasource">         <property name="url">             <value>${jdbc.url}</value>         </property>         <property name="user">             <value>${jdbc.username}</value>         </property>         <property name="password">             <value>${jdbc.password}</value>         </property>     </bean>       <context:component-scan base-package="com.vizaco.onlinecontrol.dao.jpa"/>     <context:component-scan base-package="com.vizaco.onlinecontrol.security"/>     <context:component-scan base-package="com.vizaco.onlinecontrol.configuration"/>      <bean id="entitymanagerfactory" class="org.springframework.orm.jpa.localcontainerentitymanagerfactorybean"           p:datasource-ref="datasource">         <property name="jpavendoradapter">             <bean class="org.springframework.orm.jpa.vendor.hibernatejpavendoradapter"                   p:database="${jpa.database}" p:showsql="${jpa.showsql}"/>             <!-- 'database' parameter refers database dialect being used.                 default, hibernate use 'hsql' dialect because 'jpa.database' has been set 'hsql'                 inside file spring/data-access.properties               -->         </property>     </bean>      <!-- transaction manager single jpa entitymanagerfactory (alternative jta) -->     <bean id="transactionmanager" class="org.springframework.orm.jpa.jpatransactionmanager"           p:entitymanagerfactory-ref="entitymanagerfactory"/>      <bean class="org.springframework.dao.annotation.persistenceexceptiontranslationpostprocessor"/>      <!-- voters -->     <bean id="accessdecisionmanager"           class="org.springframework.security.access.vote.affirmativebased">         <constructor-arg name="decisionvoters">             <list>                 <bean class="org.springframework.security.access.vote.rolevoter"/>             </list>         </constructor-arg>     </bean>      <!--<bean id="expressionhandler" class="org.springframework.security.access.expression.method.defaultmethodsecurityexpressionhandler">-->         <!--<property name="permissionevaluator" ref="custompermissionevaluator"/>-->     <!--</bean>-->     <!--<bean id="custompermissionevaluator"  class="com.vizaco.onlinecontrol.security.impl.custompermissionevaluator"/>-->      <!-- security -->     <bean id="passwordencoder" class="org.springframework.security.crypto.bcrypt.bcryptpasswordencoder">         <constructor-arg name="strength" value="11"/>     </bean>      <!-- validators -->     <bean id="uservalidator" class="com.vizaco.onlinecontrol.validators.uservalidator"/>      <!-- messages -->     <bean id="messagesource" class="org.springframework.context.support.reloadableresourcebundlemessagesource">         <property name="basename" value="classpath:messages"/>         <property name="defaultencoding" value="utf-8"/>     </bean>     <bean id="localeresolver" class="org.springframework.web.servlet.i18n.cookielocaleresolver">         <property name="defaultlocale" value="ru"/>     </bean>      <!-- converters -->     <bean id="conversionservice"           class="org.springframework.format.support.formattingconversionservicefactorybean">         <property name="converters">             <set>                 <bean class="com.vizaco.onlinecontrol.converters.stringtoclazz"/>                 <bean class="com.vizaco.onlinecontrol.converters.stringtouser"/>             </set>         </property>     </bean>  </beans> 

my java config is:

@configuration @enablewebmvc @enableaspectjautoproxy @enabletransactionmanagement @componentscan({         "com.vizaco.onlinecontrol.aspects",         "com.vizaco.onlinecontrol.configuration",         "com.vizaco.onlinecontrol.controller",         "com.vizaco.onlinecontrol.dao",         "com.vizaco.onlinecontrol.model",         "com.vizaco.onlinecontrol.validators",         "com.vizaco.onlinecontrol.security",         "com.vizaco.onlinecontrol.service"}) @propertysource("classpath:spring/data-access.properties") public class webconfig extends webmvcconfigureradapter implements transactionmanagementconfigurer {      @autowired     environment environment;      @autowired     private clazzservice clazzservice;      @autowired     private userservice userservice;      @autowired     private methodsecuritymetadatasourceadvisor sourceadvisor;      @bean     public userdetailsservice userdetailsservice() {         return new customuserdetailsserviceimpl();     }      @bean     public passwordencoder passwordencoder() {         return new bcryptpasswordencoder();     }      @bean     public datasource datasource() {         jdbcdatasource datasource = new jdbcdatasource();         datasource.seturl(environment.getproperty("jdbc.url"));         datasource.setuser(environment.getproperty("jdbc.username"));         datasource.setpassword(environment.getproperty("jdbc.password"));         return datasource;     }      @bean     public datasourceinitializer datasourceinitializer() {         datasourceinitializer datasourceinitializer = new datasourceinitializer();         datasourceinitializer.setdatasource(datasource());          compositedatabasepopulator compositedatabasepopulator = new compositedatabasepopulator();          compositedatabasepopulator.addpopulators(new resourcedatabasepopulator(new defaultresourceloader().getresource(environment.getproperty("jdbc.initlocation"))));         compositedatabasepopulator.addpopulators(new resourcedatabasepopulator(new defaultresourceloader().getresource(environment.getproperty("jdbc.datalocation"))));         datasourceinitializer.setdatabasepopulator(compositedatabasepopulator);         return datasourceinitializer;     }      @bean     public localcontainerentitymanagerfactorybean entitymanagerfactory() {         localcontainerentitymanagerfactorybean em = new localcontainerentitymanagerfactorybean();         em.setdatasource(datasource());         em.setpackagestoscan(new string[]{"com.vizaco.onlinecontrol.model"});          hibernatejpavendoradapter vendoradapter = new hibernatejpavendoradapter();         vendoradapter.setdatabase(database.hsql);         vendoradapter.setshowsql(true);          em.setjpavendoradapter(vendoradapter);          properties properties = new properties();         properties.setproperty("hibernate.dialect", "org.hibernate.dialect.hsqldialect");          em.setjpaproperties(properties);          return em;     }      @bean     public platformtransactionmanager txmanager() {         jpatransactionmanager transactionmanager = new jpatransactionmanager();         transactionmanager.setentitymanagerfactory(entitymanagerfactory().getobject());          return transactionmanager;     }      @override     public platformtransactionmanager annotationdriventransactionmanager() {         return txmanager();     }      @bean     public persistenceexceptiontranslationpostprocessor exceptiontranslation() {         return new persistenceexceptiontranslationpostprocessor();     }      @override     public void addresourcehandlers(resourcehandlerregistry registry) {         registry.addresourcehandler("/web-inf/jsp/**").addresourcelocations("/jsp/");         registry.addresourcehandler("/resources/**").addresourcelocations("/resources/");         registry.addresourcehandler("/webjars/**").addresourcelocations("classpath:/meta-inf/resources/webjars/");     }      @override     public void configuredefaultservlethandling(defaultservlethandlerconfigurer configurer) {         configurer.enable();     }      @override     public void configurecontentnegotiation(contentnegotiationconfigurer configurer) {         configurer.favorpathextension(true)                 .usejaf(false)                 .ignoreacceptheader(true)                 .mediatype("html", mediatype.text_html)                 .mediatype("json", mediatype.application_json)                 .defaultcontenttype(mediatype.text_html);     }      @override     public void configureviewresolvers(viewresolverregistry registry) {         internalresourceviewresolver resolver = new internalresourceviewresolver();         resolver.setprefix("/web-inf/jsp/");         resolver.setsuffix(".jsp");         resolver.setviewclass(jstlview.class);          registry.viewresolver(resolver);          registry.beanname();     }      @override     public void addformatters(formatterregistry registry) {         registry.addconverter(new stringtoclazz(clazzservice));         registry.addconverter(new stringtouser(userservice));     }      @bean(name = "messagesource")     public messagesource configuremessagesource() {         reloadableresourcebundlemessagesource messagesource = new reloadableresourcebundlemessagesource();         messagesource.setbasename("classpath:messages");         messagesource.setcacheseconds(5);         messagesource.setdefaultencoding("utf-8");         return messagesource;     }      @bean     public cookielocaleresolver localeresolver() {         cookielocaleresolver localeresolver = new cookielocaleresolver();         localeresolver.setdefaultlocale(new locale("ru"));         return localeresolver;     }  } 

the error occurs when call this.em.persist(user) in method save(user user):

@repository public class jpauserdaoimpl implements userdao {      @persistencecontext     private entitymanager em;      public jpauserdaoimpl() {     }      public jpauserdaoimpl(entitymanager em) {         this.em = em;     }      @override     public user findbyemail(string email) throws dataaccessexception {         query query = this.em.createquery("select distinct user user user user.email =:email");         query.setparameter("email", email);          list resultlist = query.getresultlist();         if (resultlist.isempty()) {             return null; // handle no-results case         } else {             return (user)resultlist.get(0);         }  //        return (user) query.getsingleresult();     }      @override     public user findbyid(long id) {         query query = this.em.createquery("select distinct user user user user.id =:id");         query.setparameter("id", id);          list resultlist = query.getresultlist();         if (resultlist.isempty()) {             return null; // handle no-results case         } else {             return (user)resultlist.get(0);         }     }      @override     public list<user> getallusers() throws dataaccessexception {         query query = this.em.createquery("select distinct user user user");         return query.getresultlist();     }      @override     public void save(user user) {          if (user == null){             return;         }          if (user.getid() == null) {             this.em.persist(user);         }         else {             this.em.merge(user);         }     }      @override     public void delete(user user) throws dataaccessexception {         if (user == null){             return;         }         this.em.remove(user);     }  } 

that error:

javax.persistence.transactionrequiredexception: no transactional entitymanager available     @ org.springframework.orm.jpa.sharedentitymanagercreator$sharedentitymanagerinvocationhandler.invoke(sharedentitymanagercreator.java:275)     @ com.sun.proxy.$proxy64.persist(unknown source)     @ com.vizaco.onlinecontrol.dao.jpa.jpauserdaoimpl.save(jpauserdaoimpl.java:68)     @ com.vizaco.onlinecontrol.service.impl.userserviceimpl.saveuser(userserviceimpl.java:51)     @ com.vizaco.onlinecontrol.controller.usercontroller.createuser(usercontroller.java:112)     @ com.vizaco.onlinecontrol.controller.usercontroller$$fastclassbyspringcglib$$2ef7ce5a.invoke(<generated>)     @ org.springframework.cglib.proxy.methodproxy.invoke(methodproxy.java:204)     @ org.springframework.aop.framework.cglibaopproxy$cglibmethodinvocation.invokejoinpoint(cglibaopproxy.java:717)     @ org.springframework.aop.framework.reflectivemethodinvocation.proceed(reflectivemethodinvocation.java:157)     @ org.springframework.aop.framework.adapter.methodbeforeadviceinterceptor.invoke(methodbeforeadviceinterceptor.java:52)     @ org.springframework.aop.framework.reflectivemethodinvocation.proceed(reflectivemethodinvocation.java:179)     @ org.springframework.aop.aspectj.aspectjafteradvice.invoke(aspectjafteradvice.java:43)     @ org.springframework.aop.framework.reflectivemethodinvocation.proceed(reflectivemethodinvocation.java:179)     @ org.springframework.aop.interceptor.exposeinvocationinterceptor.invoke(exposeinvocationinterceptor.java:92)     @ org.springframework.aop.framework.reflectivemethodinvocation.proceed(reflectivemethodinvocation.java:179)     @ org.springframework.aop.framework.cglibaopproxy$dynamicadvisedinterceptor.intercept(cglibaopproxy.java:653)     @ com.vizaco.onlinecontrol.controller.usercontroller$$enhancerbyspringcglib$$9f848f41.createuser(<generated>)     @ sun.reflect.nativemethodaccessorimpl.invoke0(native method)     @ sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl.java:62)     @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:43)     @ java.lang.reflect.method.invoke(method.java:483)     @ org.springframework.web.method.support.invocablehandlermethod.doinvoke(invocablehandlermethod.java:221)     @ org.springframework.web.method.support.invocablehandlermethod.invokeforrequest(invocablehandlermethod.java:137)     @ org.springframework.web.servlet.mvc.method.annotation.servletinvocablehandlermethod.invokeandhandle(servletinvocablehandlermethod.java:110)     @ org.springframework.web.servlet.mvc.method.annotation.requestmappinghandleradapter.invokehandlemethod(requestmappinghandleradapter.java:776)     @ org.springframework.web.servlet.mvc.method.annotation.requestmappinghandleradapter.handleinternal(requestmappinghandleradapter.java:705)     @ org.springframework.web.servlet.mvc.method.abstracthandlermethodadapter.handle(abstracthandlermethodadapter.java:85)     @ org.springframework.web.servlet.dispatcherservlet.dodispatch(dispatcherservlet.java:959)     @ org.springframework.web.servlet.dispatcherservlet.doservice(dispatcherservlet.java:893)     @ org.springframework.web.servlet.frameworkservlet.processrequest(frameworkservlet.java:966)     @ org.springframework.web.servlet.frameworkservlet.dopost(frameworkservlet.java:868)     @ javax.servlet.http.httpservlet.service(httpservlet.java:707)     @ org.springframework.web.servlet.frameworkservlet.service(frameworkservlet.java:842)     @ javax.servlet.http.httpservlet.service(httpservlet.java:790)     @ org.eclipse.jetty.servlet.servletholder.handle(servletholder.java:806)     @ org.eclipse.jetty.servlet.servlethandler$cachedchain.dofilter(servlethandler.java:1669)     @ org.springframework.web.filter.hiddenhttpmethodfilter.dofilterinternal(hiddenhttpmethodfilter.java:77)     @ org.springframework.web.filter.onceperrequestfilter.dofilter(onceperrequestfilter.java:107)     @ org.eclipse.jetty.servlet.servlethandler$cachedchain.dofilter(servlethandler.java:1652)     @ org.springframework.web.filter.characterencodingfilter.dofilterinternal(characterencodingfilter.java:85)     @ org.springframework.web.filter.onceperrequestfilter.dofilter(onceperrequestfilter.java:107)     @ org.eclipse.jetty.servlet.servlethandler$cachedchain.dofilter(servlethandler.java:1652)     @ org.springframework.security.web.filterchainproxy$virtualfilterchain.dofilter(filterchainproxy.java:330)     @ org.springframework.security.web.access.intercept.filtersecurityinterceptor.invoke(filtersecurityinterceptor.java:118)     @ org.springframework.security.web.access.intercept.filtersecurityinterceptor.dofilter(filtersecurityinterceptor.java:84)     @ org.springframework.security.web.filterchainproxy$virtualfilterchain.dofilter(filterchainproxy.java:342)     @ org.springframework.security.web.access.exceptiontranslationfilter.dofilter(exceptiontranslationfilter.java:113)     @ org.springframework.security.web.filterchainproxy$virtualfilterchain.dofilter(filterchainproxy.java:342)     @ org.springframework.security.web.session.sessionmanagementfilter.dofilter(sessionmanagementfilter.java:103)     @ org.springframework.security.web.filterchainproxy$virtualfilterchain.dofilter(filterchainproxy.java:342)     @ org.springframework.security.web.authentication.anonymousauthenticationfilter.dofilter(anonymousauthenticationfilter.java:113)     @ org.springframework.security.web.filterchainproxy$virtualfilterchain.dofilter(filterchainproxy.java:342)     @ org.springframework.security.web.authentication.rememberme.remembermeauthenticationfilter.dofilter(remembermeauthenticationfilter.java:146)     @ org.springframework.security.web.filterchainproxy$virtualfilterchain.dofilter(filterchainproxy.java:342)     @ org.springframework.security.web.servletapi.securitycontextholderawarerequestfilter.dofilter(securitycontextholderawarerequestfilter.java:154)     @ org.springframework.security.web.filterchainproxy$virtualfilterchain.dofilter(filterchainproxy.java:342)     @ org.springframework.security.web.savedrequest.requestcacheawarefilter.dofilter(requestcacheawarefilter.java:45)     @ org.springframework.security.web.filterchainproxy$virtualfilterchain.dofilter(filterchainproxy.java:342)     @ org.springframework.security.web.authentication.abstractauthenticationprocessingfilter.dofilter(abstractauthenticationprocessingfilter.java:199)     @ org.springframework.security.web.filterchainproxy$virtualfilterchain.dofilter(filterchainproxy.java:342)     @ org.springframework.security.web.authentication.logout.logoutfilter.dofilter(logoutfilter.java:110)     @ org.springframework.security.web.filterchainproxy$virtualfilterchain.dofilter(filterchainproxy.java:342)     @ org.springframework.security.web.csrf.csrffilter.dofilterinternal(csrffilter.java:105)     @ org.springframework.web.filter.onceperrequestfilter.dofilter(onceperrequestfilter.java:107)     @ org.springframework.security.web.filterchainproxy$virtualfilterchain.dofilter(filterchainproxy.java:342)     @ org.springframework.security.web.header.headerwriterfilter.dofilterinternal(headerwriterfilter.java:57)     @ org.springframework.web.filter.onceperrequestfilter.dofilter(onceperrequestfilter.java:107)     @ org.springframework.security.web.filterchainproxy$virtualfilterchain.dofilter(filterchainproxy.java:342)     @ org.springframework.security.web.context.securitycontextpersistencefilter.dofilter(securitycontextpersistencefilter.java:87)     @ org.springframework.security.web.filterchainproxy$virtualfilterchain.dofilter(filterchainproxy.java:342)     @ org.springframework.security.web.context.request.async.webasyncmanagerintegrationfilter.dofilterinternal(webasyncmanagerintegrationfilter.java:50)     @ org.springframework.web.filter.onceperrequestfilter.dofilter(onceperrequestfilter.java:107)     @ org.springframework.security.web.filterchainproxy$virtualfilterchain.dofilter(filterchainproxy.java:342)     @ org.springframework.security.web.filterchainproxy.dofilterinternal(filterchainproxy.java:192)     @ org.springframework.security.web.filterchainproxy.dofilter(filterchainproxy.java:160)     @ org.springframework.web.filter.delegatingfilterproxy.invokedelegate(delegatingfilterproxy.java:344)     @ org.springframework.web.filter.delegatingfilterproxy.dofilter(delegatingfilterproxy.java:261)     @ org.eclipse.jetty.servlet.servlethandler$cachedchain.dofilter(servlethandler.java:1652)     @ org.eclipse.jetty.servlet.servlethandler.dohandle(servlethandler.java:585)     @ org.eclipse.jetty.server.handler.scopedhandler.handle(scopedhandler.java:143)     @ org.eclipse.jetty.security.securityhandler.handle(securityhandler.java:550)     @ org.eclipse.jetty.server.session.sessionhandler.dohandle(sessionhandler.java:223)     @ org.eclipse.jetty.server.handler.contexthandler.dohandle(contexthandler.java:1128)     @ org.eclipse.jetty.servlet.servlethandler.doscope(servlethandler.java:515)     @ org.eclipse.jetty.server.session.sessionhandler.doscope(sessionhandler.java:185)     @ org.eclipse.jetty.server.handler.contexthandler.doscope(contexthandler.java:1062)     @ org.eclipse.jetty.server.handler.scopedhandler.handle(scopedhandler.java:141)     @ org.eclipse.jetty.server.handler.contexthandlercollection.handle(contexthandlercollection.java:215)     @ org.eclipse.jetty.server.handler.handlercollection.handle(handlercollection.java:110)     @ org.eclipse.jetty.server.handler.handlerwrapper.handle(handlerwrapper.java:113)     @ org.eclipse.jetty.server.server.handle(server.java:507)     @ org.eclipse.jetty.server.httpchannel.handle(httpchannel.java:284)     @ org.eclipse.jetty.server.httpconnection.onfillable(httpconnection.java:237)     @ org.eclipse.jetty.io.abstractconnection$readcallback.succeeded(abstractconnection.java:240)     @ org.eclipse.jetty.io.fillinterest.fillable(fillinterest.java:93)     @ org.eclipse.jetty.io.selectchannelendpoint$2.run(selectchannelendpoint.java:53)     @ org.eclipse.jetty.util.thread.strategy.executeproducerun.produceandrun(executeproducerun.java:191)     @ org.eclipse.jetty.util.thread.strategy.executeproducerun.run(executeproducerun.java:126)     @ org.eclipse.jetty.util.thread.queuedthreadpool.runjob(queuedthreadpool.java:641)     @ org.eclipse.jetty.util.thread.queuedthreadpool$3.run(queuedthreadpool.java:559)     @ java.lang.thread.run(thread.java:745) 

in stacktrace, there no spring aop class listed between these 2 lines:

   @ com.vizaco.onlinecontrol.service.impl.userserviceimpl.saveuser(userserviceimpl.java:51)     @ com.vizaco.onlinecontrol.controller.usercontroller.createuser(usercontroller.java:112) 

your dependency injection not setup right.. controller should getting spring bean of userservice


Comments

Popular posts from this blog

javascript - Google App Script ContentService downloadAsFile not working -

javascript - Function overwritting -

php - Find a regex to take part of Email -