Spring 4 with JPA (Hibernate implementation): Transaction not working (no transaction in progress) -
ok, looks repeated question, however, have been searching on 2 days , no success. below configuration details:
annotated app config class
@configuration @componentscan(basepackages = "com.test") @enabletransactionmanagement(mode=advicemode.proxy, proxytargetclass=true) public class annotatedappconfig { private static final logger _logger = logger .getlogger(annotatedappconfig.class); @bean public datasource datasource() { // c3p0 datasource configuration final combopooleddatasource datasource = new combopooleddatasource(); try { datasource.setdriverclass(readerutil.getinstance() .getproperty(iconst.db_driver)); } catch (propertyvetoexception e) { _logger.error("error setting driver class ", e); } datasource.setuser(readerutil.getinstance().getproperty( iconst.db_user)); datasource.setpassword(readerutil.getinstance().getproperty( iconst.db_password)); datasource.setjdbcurl(readerutil.getinstance().getproperty( iconst.db_url)); _logger.info("datasource created successfully"); return datasource; } @bean public localcontainerentitymanagerfactorybean entitymanagerfactory() { final localcontainerentitymanagerfactorybean entitymanagerfactorybean = new localcontainerentitymanagerfactorybean(); entitymanagerfactorybean.setdatasource(datasource()); entitymanagerfactorybean.setpersistenceunitname("testunit"); entitymanagerfactorybean.setjpavendoradapter(createjpavendoradapter()); _logger.info("entitymanagerfactory created successfully"); return entitymanagerfactorybean; } @bean public platformtransactionmanager txmanager() { final jpatransactionmanager transactionmanager = new jpatransactionmanager(); transactionmanager.setentitymanagerfactory(entitymanagerfactory() .getobject()); transactionmanager.setdatasource(datasource()); _logger.info("transaction manager created successfully"); return transactionmanager; } private hibernatejpavendoradapter createjpavendoradapter() { final hibernatejpavendoradapter jpavendoradapter = new hibernatejpavendoradapter(); jpavendoradapter.setshowsql(true); jpavendoradapter.setgenerateddl(false); jpavendoradapter.setdatabase(database.mysql); jpavendoradapter.setdatabaseplatform(readerutil.getinstance() .getproperty(iconst.hibernate_db_dialect)); return jpavendoradapter; } } annotated service class
@service @transactional(value="txmanager") public class testserviceimpl extends baseserviceimpl implements itestservice { @autowired private itestdao testdao; @override @transactional(propagation=propagation.requires_new, readonly=false, value="txmanager") public long register(final string username, final string password, final string name, final string address, final integer deptid) { return testdao.register(username, password, name, address, deptid); } } when ever try invoke register method, below error thrown (in debug mode):
transactionaspectsupport.completetransactionafterthrowing(534) | completing transaction [com.test.service.testserviceimpl.register] after exception: javax.persistence.transactionrequiredexception: no transaction in progress 07 jul 2015 18:59:36,488 230371 [http-bio-9080-exec-5]:debug - rulebasedtransactionattribute.rollbackon(131) | applying rules determine whether transaction should rollback on javax.persistence.transactionrequiredexception: no transaction in progress
i have tried find on net, however, no luck. experts, please me know missing in configuration.
please note: autowiring working fine, read transactions (select queries) working fine.
i read somewhere @service & @transactional annotations not work if applied on same class (which happening in case, testserviceimpl has both annotations). case? workaround in such situation?
Comments
Post a Comment