Spring Failed to open transaction on service

I wanted to install @Transactional for my services instead of my DAOs ... in order to open a transaction and be able to use some lazy collections in my services without getting a "LazyInitializationException".

So far, @Transactional been in the DAO, and transactions have been opened and closed when you enter and exit the DAO.

Now that @Transactional in my services, transactions do not even open. Thus, the service calls the DAO without opening a transaction, and we got the following exception: org.hibernate.SessionException: session closed!

We use JPA over Hibernate, here is an excerpt from our configuration:

 <bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" /> <bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/> <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean"/> <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> <property name="entityManagerFactory" ref="entityManagerFactory" /> </bean> <tx:annotation-driven /> 

EDIT, thanks for your answers / comments: So, I declare @Transactional on the whole service (implementation, not interface), and not on methods, to be sure that @Transactional will apply to everyone.

 @Transactional public class MyServiceImpl implements MyService { public void method1(){...} public void method2(){...} } 

I also give you how my DAOs are configured, they all extend the following class:

 public abstract class JpaDAOSupport { protected EntityManager em; @PersistenceContext(type = PersistenceContextType.TRANSACTION) public void setEm(EntityManager em) { this.em = em; } } 

EDIT2: I simplified my application to have only 1 service and 1 DAO.

MyService:

 @Transactional public class MyServiceImpl implements MyService { private MyDAO myDAO; public void setMyDAO(MyDAO myDAO) { this.myDAO = myDAO; } @Override public void method1() { List<String> things = myDAO.getAll(); System.out.println("Test size: " + things.size()); } @Override public void method2() { List<String> things = myDAO.getAll(); for (String thing : things) { System.out.println(thing); } } } 

Mydao

 @Repository public class MyDAOImpl extends JpaDAOSupport implements MyDAO { @SuppressWarnings("unchecked") @Override public List<String> getAll() { Query query = em.createQuery("FROM " + Cfg.class.getName()); List<Cfg> result = query.getResultList(); List<String> realResult = new ArrayList<String>(); for (Cfg cfg : result) { realResult.add(cfg.getKey()); } return realResult; } } 

Save configuration file:

 <?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.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd"> <bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" /> <bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/> <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean"/> <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> <property name="entityManagerFactory" ref="entityManagerFactory" /> </bean> <tx:annotation-driven transaction-manager="transactionManager" /> <bean id="my.package.dao.MyDAO" class="my.package.dao.jpa.MyDAOImpl" /> <bean id="my.package.service.MyService" class="my.package.service.impl.MyServiceImpl" init-method="method1"> <property name="myDAO" ref="my.package.dao.MyDAO" /> </bean> </beans> 

Note that I do not have access to the "mode" attribute for tx: annotation-driven.

Here are the spring logs in DEBUG startup mode:

 [...] k.beans.factory.support.DefaultListableBeanFactory Creating shared instance of singleton bean 'entityManagerFactory' k.beans.factory.support.DefaultListableBeanFactory Creating instance of bean 'entityManagerFactory' k.beans.factory.support.DefaultListableBeanFactory Eagerly caching bean 'entityManagerFactory' to allow for resolving potential circular references g.springframework.beans.CachedIntrospectionResults Getting BeanInfo for class [org.springframework.orm.jpa.LocalEntityManagerFactoryBean] g.springframework.beans.CachedIntrospectionResults Caching PropertyDescriptors for class [org.springframework.orm.jpa.LocalEntityManagerFactoryBean] g.springframework.beans.CachedIntrospectionResults Found bean property 'beanClassLoader' of type [java.lang.ClassLoader] g.springframework.beans.CachedIntrospectionResults Found bean property 'class' of type [java.lang.Class] g.springframework.beans.CachedIntrospectionResults Found bean property 'dataSource' of type [javax.sql.DataSource] g.springframework.beans.CachedIntrospectionResults Found bean property 'entityManagerFactoryInterface' of type [java.lang.Class] g.springframework.beans.CachedIntrospectionResults Found bean property 'entityManagerInterface' of type [java.lang.Class] g.springframework.beans.CachedIntrospectionResults Found bean property 'jpaDialect' of type [org.springframework.orm.jpa.JpaDialect] g.springframework.beans.CachedIntrospectionResults Found bean property 'jpaProperties' of type [java.util.Properties] g.springframework.beans.CachedIntrospectionResults Found bean property 'jpaPropertyMap' of type [java.util.Map] g.springframework.beans.CachedIntrospectionResults Found bean property 'jpaVendorAdapter' of type [org.springframework.orm.jpa.JpaVendorAdapter] g.springframework.beans.CachedIntrospectionResults Found bean property 'nativeEntityManagerFactory' of type [javax.persistence.EntityManagerFactory] g.springframework.beans.CachedIntrospectionResults Found bean property 'object' of type [javax.persistence.EntityManagerFactory] g.springframework.beans.CachedIntrospectionResults Found bean property 'objectType' of type [java.lang.Class] g.springframework.beans.CachedIntrospectionResults Found bean property 'persistenceProvider' of type [javax.persistence.spi.PersistenceProvider] g.springframework.beans.CachedIntrospectionResults Found bean property 'persistenceProviderClass' of type [java.lang.Class] g.springframework.beans.CachedIntrospectionResults Found bean property 'persistenceUnitInfo' of type [javax.persistence.spi.PersistenceUnitInfo] g.springframework.beans.CachedIntrospectionResults Found bean property 'persistenceUnitName' of type [java.lang.String] g.springframework.beans.CachedIntrospectionResults Found bean property 'singleton' of type [boolean] k.beans.factory.support.DefaultListableBeanFactory Invoking afterPropertiesSet() on bean with name 'entityManagerFactory' ingframework.orm.jpa.LocalEntityManagerFactoryBean Building JPA EntityManagerFactory for persistence unit 'null' ework.web.context.support.XmlWebApplicationContext Bean 'entityManagerFactory' is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) k.beans.factory.support.DefaultListableBeanFactory Finished creating instance of bean 'entityManagerFactory' k.beans.factory.support.DefaultListableBeanFactory Finished creating instance of bean 'org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor#0' k.beans.factory.support.DefaultListableBeanFactory Creating shared instance of singleton bean 'org.springframework.aop.config.internalAutoProxyCreator' k.beans.factory.support.DefaultListableBeanFactory Creating instance of bean 'org.springframework.aop.config.internalAutoProxyCreator' org.springframework.core.CollectionFactory Creating [java.util.concurrent.ConcurrentHashMap] k.beans.factory.support.DefaultListableBeanFactory Eagerly caching bean 'org.springframework.aop.config.internalAutoProxyCreator' to allow for resolving potential circular references g.springframework.beans.CachedIntrospectionResults Getting BeanInfo for class [org.springframework.aop.framework.autoproxy.InfrastructureAdvisorAutoProxyCreator] g.springframework.beans.CachedIntrospectionResults Caching PropertyDescriptors for class [org.springframework.aop.framework.autoproxy.InfrastructureAdvisorAutoProxyCreator] g.springframework.beans.CachedIntrospectionResults Found bean property 'advisorAdapterRegistry' of type [org.springframework.aop.framework.adapter.AdvisorAdapterRegistry] g.springframework.beans.CachedIntrospectionResults Found bean property 'applyCommonInterceptorsFirst' of type [boolean] g.springframework.beans.CachedIntrospectionResults Found bean property 'beanClassLoader' of type [java.lang.ClassLoader] g.springframework.beans.CachedIntrospectionResults Found bean property 'beanFactory' of type [org.springframework.beans.factory.BeanFactory] g.springframework.beans.CachedIntrospectionResults Found bean property 'class' of type [java.lang.Class] g.springframework.beans.CachedIntrospectionResults Found bean property 'customTargetSourceCreators' of type [[Lorg.springframework.aop.framework.autoproxy.TargetSourceCreator;] g.springframework.beans.CachedIntrospectionResults Found bean property 'exposeProxy' of type [boolean] g.springframework.beans.CachedIntrospectionResults Found bean property 'frozen' of type [boolean] g.springframework.beans.CachedIntrospectionResults Found bean property 'interceptorNames' of type [[Ljava.lang.String;] g.springframework.beans.CachedIntrospectionResults Found bean property 'opaque' of type [boolean] g.springframework.beans.CachedIntrospectionResults Found bean property 'optimize' of type [boolean] g.springframework.beans.CachedIntrospectionResults Found bean property 'order' of type [int] g.springframework.beans.CachedIntrospectionResults Found bean property 'proxyClassLoader' of type [java.lang.ClassLoader] g.springframework.beans.CachedIntrospectionResults Found bean property 'proxyTargetClass' of type [boolean] k.beans.factory.support.DefaultListableBeanFactory Finished creating instance of bean 'org.springframework.aop.config.internalAutoProxyCreator' ework.web.context.support.XmlWebApplicationContext Unable to locate MessageSource with name 'messageSource': using default [ org.springframework.context.support.DelegatingMessageSource@7d27 96] ework.web.context.support.XmlWebApplicationContext Unable to locate ApplicationEventMulticaster with name 'applicationEventMulticaster': using default [org. springframework.context.event.SimpleApplicationEventMulticaster@ 1335207] ework.ui.context.support.UiApplicationContextUtils Unable to locate ThemeSource with name 'themeSource': using default [o rg.springframework.ui.context.support.ResourceBundleThemeSource@ 6bbe7] k.beans.factory.support.DefaultListableBeanFactory Pre-instantiating singletons in org.s pringframework.beans.factory.support.DefaultListableBeanFactory@ 1989b5: defining beans [org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor#0,org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor#0,entityManagerFactory,transactionManager,org.springframework.aop.config.internalAutoProxyCreator,org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#0,org.springframework.transaction.interceptor.TransactionInterceptor#0,org.springframework.transaction.config.internalTransactionAdvisor,my.package.dao.MyDAO,my.package.service.MyService]; root of factory hierarchy k.beans.factory.support.DefaultListableBeanFactory Returning cached instance of singleton bean 'org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor#0' k.beans.factory.support.DefaultListableBeanFactory Returning cached instance of singleton bean 'org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor#0' k.beans.factory.support.DefaultListableBeanFactory Returning cached instance of singleton bean 'entityManagerFactory' k.beans.factory.support.DefaultListableBeanFactory Creating shared instance of singleton bean 'transactionManager' k.beans.factory.support.DefaultListableBeanFactory Creating instance of bean 'transactionManager' k.beans.factory.support.DefaultListableBeanFactory Eagerly caching bean 'transactionManager' to allow for resolving potential circular references g.springframework.beans.CachedIntrospectionResults Getting BeanInfo for class [org.springframework.orm.jpa.JpaTransactionManager] g.springframework.beans.CachedIntrospectionResults Caching PropertyDescriptors for class [org.springframework.orm.jpa.JpaTransactionManager] g.springframework.beans.CachedIntrospectionResults Found bean property 'class' of type [java.lang.Class] g.springframework.beans.CachedIntrospectionResults Found bean property 'dataSource' of type [javax.sql.DataSource] g.springframework.beans.CachedIntrospectionResults Found bean property 'defaultTimeout' of type [int] g.springframework.beans.CachedIntrospectionResults Found bean property 'entityManagerFactory' of type [javax.persistence.EntityManagerFactory] g.springframework.beans.CachedIntrospectionResults Found bean property 'failEarlyOnGlobalRollbackOnly' of type [boolean] g.springframework.beans.CachedIntrospectionResults Found bean property 'globalRollbackOnParticipationFailure' of type [boolean] g.springframework.beans.CachedIntrospectionResults Found bean property 'jpaDialect' of type [org.springframework.orm.jpa.JpaDialect] g.springframework.beans.CachedIntrospectionResults Found bean property 'jpaProperties' of type [java.util.Properties] g.springframework.beans.CachedIntrospectionResults Found bean property 'jpaPropertyMap' of type [java.util.Map] g.springframework.beans.CachedIntrospectionResults Found bean property 'nestedTransactionAllowed' of type [boolean] g.springframework.beans.CachedIntrospectionResults Found bean property 'resourceFactory' of type [java.lang.Object] g.springframework.beans.CachedIntrospectionResults Found bean property 'rollbackOnCommitFailure' of type [boolean] g.springframework.beans.CachedIntrospectionResults Found bean property 'transactionSynchronization' of type [int] g.springframework.beans.CachedIntrospectionResults Found bean property 'transactionSynchronizationName' of type [java.lang.String] g.springframework.beans.CachedIntrospectionResults Found bean property 'validateExistingTransaction' of type [boolean] k.beans.factory.support.DefaultListableBeanFactory Returning cached instance of singleton bean 'entityManagerFactory' k.beans.factory.support.DefaultListableBeanFactory Creating shared instance of singleton bean 'org.springframework.transaction.config.internalTransactionAdvisor' k.beans.factory.support.DefaultListableBeanFactory Creating instance of bean 'org.springframework.transaction.config.internalTransactionAdvisor' rk.autoproxy.InfrastructureAdvisorAutoProxyCreator Did not attempt to auto-proxy infrastructure class [org.springframework.transaction.interceptor.BeanFactoryTransactionAttributeSourceAdvisor] k.beans.factory.support.DefaultListableBeanFactory Eagerly caching bean 'org.springframework.transaction.config.internalTransactionAdvisor' to allow for resolving potential circular references g.springframework.beans.CachedIntrospectionResults Getting BeanInfo for class [org.springframework.transaction.interceptor.BeanFactoryTransactionAttributeSourceAdvisor] g.springframework.beans.CachedIntrospectionResults Caching PropertyDescriptors for class [org.springframework.transaction.interceptor.BeanFactoryTransactionAttributeSourceAdvisor] g.springframework.beans.CachedIntrospectionResults Found bean property 'advice' of type [org.aopalliance.aop.Advice] g.springframework.beans.CachedIntrospectionResults Found bean property 'adviceBeanName' of type [java.lang.String] g.springframework.beans.CachedIntrospectionResults Found bean property 'beanFactory' of type [org.springframework.beans.factory.BeanFactory] g.springframework.beans.CachedIntrospectionResults Found bean property 'class' of type [java.lang.Class] g.springframework.beans.CachedIntrospectionResults Found bean property 'classFilter' of type [org.springframework.aop.ClassFilter] g.springframework.beans.CachedIntrospectionResults Found bean property 'order' of type [int] g.springframework.beans.CachedIntrospectionResults Found bean property 'perInstance' of type [boolean] g.springframework.beans.CachedIntrospectionResults Found bean property 'pointcut' of type [org.springframework.aop.Pointcut] g.springframework.beans.CachedIntrospectionResults Found bean property 'transactionAttributeSource' of type [org.springframework.transaction.interceptor.TransactionAttributeSource] k.beans.factory.support.DefaultListableBeanFactory Creating shared instance of singleton bean 'org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#0' k.beans.factory.support.DefaultListableBeanFactory Creating instance of bean 'org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#0' org.springframework.core.CollectionFactory Creating [java.util.concurrent.ConcurrentHashMap] k.beans.factory.support.DefaultListableBeanFactory Eagerly caching bean 'org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#0' to allow for resolving potential circular references g.springframework.beans.CachedIntrospectionResults Getting BeanInfo for class [org.springframework.transaction.annotation.AnnotationTransactionAttributeSource] g.springframework.beans.CachedIntrospectionResults Caching PropertyDescriptors for class [org.springframework.transaction.annotation.AnnotationTransactionAttributeSource] g.springframework.beans.CachedIntrospectionResults Found bean property 'class' of type [java.lang.Class] k.beans.factory.support.DefaultListableBeanFactory Finished creating instance of bean 'org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#0' k.beans.factory.support.DefaultListableBeanFactory Finished creating instance of bean 'org.springframework.transaction.config.internalTransactionAdvisor' k.beans.factory.support.DefaultListableBeanFactory Invoking afterPropertiesSet() on bean with name 'transactionManager' k.beans.factory.support.DefaultListableBeanFactory Returning cached instance of singleton bean 'org.springframework.transaction.config.internalTransactionAdvisor' k.beans.factory.support.DefaultListableBeanFactory Finished creating instance of bean 'transactionManager' k.beans.factory.support.DefaultListableBeanFactory Returning cached instance of singleton bean 'org.springframework.aop.config.internalAutoProxyCreator' k.beans.factory.support.DefaultListableBeanFactory Returning cached instance of singleton bean 'org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#0' k.beans.factory.support.DefaultListableBeanFactory Creating shared instance of singleton bean 'org.springframework.transaction.interceptor.TransactionInterceptor#0' k.beans.factory.support.DefaultListableBeanFactory Creating instance of bean 'org.springframework.transaction.interceptor.TransactionInterceptor#0' rk.autoproxy.InfrastructureAdvisorAutoProxyCreator Did not attempt to auto-proxy infrastructure class [org.springframework.transaction.interceptor.TransactionInterceptor] k.beans.factory.support.DefaultListableBeanFactory Eagerly caching bean 'org.springframework.transaction.interceptor.TransactionInterceptor#0' to allow for resolving potential circular references g.springframework.beans.CachedIntrospectionResults Getting BeanInfo for class [org.springframework.transaction.interceptor.TransactionInterceptor] g.springframework.beans.CachedIntrospectionResults Caching PropertyDescriptors for class [org.springframework.transaction.interceptor.TransactionInterceptor] g.springframework.beans.CachedIntrospectionResults Found bean property 'class' of type [java.lang.Class] g.springframework.beans.CachedIntrospectionResults Found bean property 'transactionAttributeSource' of type [org.springframework.transaction.interceptor.TransactionAttributeSource] g.springframework.beans.CachedIntrospectionResults Found bean property 'transactionAttributeSources' of type [[Lorg.springframework.transaction.interceptor.TransactionAttributeSource;] g.springframework.beans.CachedIntrospectionResults Found bean property 'transactionAttributes' of type [java.util.Properties] g.springframework.beans.CachedIntrospectionResults Found bean property 'transactionManager' of type [org.springframework.transaction.PlatformTransactionManager] k.beans.factory.support.DefaultListableBeanFactory Returning cached instance of singleton bean 'transactionManager' k.beans.factory.support.DefaultListableBeanFactory Returning cached instance of singleton bean 'org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#0' k.beans.factory.support.DefaultListableBeanFactory Invoking afterPropertiesSet() on bean with name 'org.springframework.transaction.interceptor.TransactionInterceptor#0' k.beans.factory.support.DefaultListableBeanFactory Finished creating instance of bean 'org.springframework.transaction.interceptor.TransactionInterceptor#0' k.beans.factory.support.DefaultListableBeanFactory Returning cached instance of singleton bean 'org.springframework.transaction.config.internalTransactionAdvisor' k.beans.factory.support.DefaultListableBeanFactory Creating shared instance of singleton bean 'my.package.dao.MyDAO' k.beans.factory.support.DefaultListableBeanFactory Creating instance of bean 'my.package.dao.MyDAO' g.springframework.beans.CachedIntrospectionResults Getting BeanInfo for class [my.package.dao.jpa.JpaDAOSupport] g.springframework.beans.CachedIntrospectionResults Caching PropertyDescriptors for class [my.package.dao.jpa.JpaDAOSupport] g.springframework.beans.CachedIntrospectionResults Found bean property 'class' of type [java.lang.Class] g.springframework.beans.CachedIntrospectionResults Found bean property 'em' of type [javax.persistence.EntityManager] amework.beans.factory.annotation.InjectionMetadata Found injected method on class [my.package.dao.jpa.MyDAOImpl]: PersistenceElement for public void my.package.dao.jpa.JpaDAOSupport.setEm(javax.persistence.EntityManager) k.beans.factory.support.DefaultListableBeanFactory Eagerly caching bean 'my.package.dao.MyDAO' to allow for resolving potential circular references g.springframework.beans.CachedIntrospectionResults Getting BeanInfo for class [my.package.dao.jpa.MyDAOImpl] g.springframework.beans.CachedIntrospectionResults Caching PropertyDescriptors for class [my.package.dao.jpa.MyDAOImpl] g.springframework.beans.CachedIntrospectionResults Found bean property 'all' of type [java.util.List] g.springframework.beans.CachedIntrospectionResults Found bean property 'class' of type [java.lang.Class] g.springframework.beans.CachedIntrospectionResults Found bean property 'em' of type [javax.persistence.EntityManager] amework.beans.factory.annotation.InjectionMetadata Processing injected method of bean 'my.package.dao.MyDAO': PersistenceElement for public void my.package.dao.jpa.JpaDAOSupport.setEm(javax.persistence.EntityManager) k.beans.factory.support.DefaultListableBeanFactory Returning cached instance of singleton bean 'entityManagerFactory' k.beans.factory.support.DefaultListableBeanFactory Returning cached instance of singleton bean 'org.springframework.transaction.config.internalTransactionAdvisor' org.springframework.core.CollectionFactory Creating [java.util.concurrent.ConcurrentHashMap] g.springframework.aop.framework.JdkDynamicAopProxy Creating JDK dynamic proxy: target source is SingletonTargetSource for target object [ my.package.dao.jpa.MyDAOImpl@1298826 ] k.beans.factory.support.DefaultListableBeanFactory Finished creating instance of bean 'my.package.dao.MyDAO' k.beans.factory.support.DefaultListableBeanFactory Creating shared instance of singleton bean 'my.package.service.MyService' k.beans.factory.support.DefaultListableBeanFactory Creating instance of bean 'my.package.service.MyService' k.beans.factory.support.DefaultListableBeanFactory Eagerly caching bean 'my.package.service.MyService' to allow for resolving potential circular references g.springframework.beans.CachedIntrospectionResults Getting BeanInfo for class [my.package.service.impl.MyServiceImpl] g.springframework.beans.CachedIntrospectionResults Caching PropertyDescriptors for class [my.package.service.impl.MyServiceImpl] g.springframework.beans.CachedIntrospectionResults Found bean property 'class' of type [java.lang.Class] g.springframework.beans.CachedIntrospectionResults Found bean property 'myDAO' of type [my.package.dao.MyDAO] k.beans.factory.support.DefaultListableBeanFactory Returning cached instance of singleton bean 'my.package.dao.MyDAO' k.beans.factory.support.DefaultListableBeanFactory Invoking init method 'method1' on bean with name 'my.package.service.MyService' anagerCreator$SharedEntityManagerInvocationHandler Creating new EntityManager for shared EntityManager invocation .springframework.orm.jpa.EntityManagerFactoryUtils Closing JPA EntityManager k.beans.factory.support.DefaultListableBeanFactory Destroying singletons in org.s pringframework.beans.factory.support.DefaultListableBeanFactory@ 1989b5: defining beans [org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor#0,org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor#0,entityManagerFactory,transactionManager,org.springframework.aop.config.internalAutoProxyCreator,org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#0,org.springframework.transaction.interceptor.TransactionInterceptor#0,org.springframework.transaction.config.internalTransactionAdvisor,my.package.dao.MyDAO,my.package.service.MyService]; root of factory hierarchy k.beans.factory.support.DefaultListableBeanFactory Retrieved dependent beans for bean 'my.package.dao.MyDAO': [my.package.service.MyService] k.beans.factory.support.DefaultListableBeanFactory Retrieved dependent beans for bean 'transactionManager': [org.springframework.transaction.interceptor.TransactionInterceptor#0] k.beans.factory.support.DefaultListableBeanFactory Retrieved dependent beans for bean 'org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#0': [org.springframework.transaction.config.internalTransactionAdvisor, org.springframework.transaction.interceptor.TransactionInterceptor#0] k.beans.factory.support.DefaultListableBeanFactory Retrieved dependent beans for bean 'entityManagerFactory': [transactionManager, my.package.dao.MyDAO] mework.beans.factory.support.DisposableBeanAdapter Invoking destroy() on bean with name 'entityManagerFactory' ingframework.orm.jpa.LocalEntityManagerFactoryBean Closing JPA EntityManagerFactory for persistence unit 'null' org.springframework.web.context.ContextLoader Context initialization failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'my.package.service.MyService' defined in class path resource [config/persistenceContext.xml]: Invocation of init method failed; nested exception is org.springframework.orm.jpa.JpaSystemException: org.hibernate.SessionException: Session is closed!; nested exception is javax.persistence.PersistenceException: org.hibernate.SessionException: Session is closed! 

I would like to understand why transactions do not open and how can I solve this problem?

Thanks,

+4
source share
4 answers

Ok actually the problems were

  • configuration problem
  • Transactions cannot be opened in the init method because there is no (transactional) proxy yet.

For 1 .:

  <!-- transaction manager for use with a single JPA EntityManagerFactory for transactional data access to a single datasource --> <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager" p:entityManagerFactory-ref="entityManagerFactory" /> <!-- uses the persistence unit defined in the META-INF/persistence.xml JPA configuration file --> <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" p:dataSource-ref="dataSource"> <property name="jpaProperties"> <props> <prop key="hibernate.dialect">${hibernate.dialect}</prop> <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop> <prop key="hibernate.show_sql">${hibernate.show_sql}</prop> </props> </property> </bean> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" p:driverClassName="${dataSource.driverClassName}" p:url="${dataSource.url}" p:username="${dataSource.username}" p:password="${dataSource.password}" /> 

about 2 .:

  • using TransactionTemplate
  • register ApplicationListener and listen for ContextRefreshedEvent
+6
source

It looks like it could be one of:

  • Your @Transactional annotation is on the interface and you are using the wrong proxy type

  • Your internal call @Transactional

@Transactional docs

Spring recommends only annotating specific classes (and methods of specific classes) with @Transactional annotation, rather than annotating interfaces. Of course, you can put the @Transactional annotation on an interface (or an interface method), but this only works as you would expect if you use an interface-based proxy. The fact that Java annotations are not inherited from interfaces means that if you use class-based proxy-target-class="true" ( proxy-target-class="true" ) or weaving-based aspect ( mode="aspectj" ), then the transaction parameters are not recognized proxy and weaving infrastructure, and the object will not be wrapped in a transactional proxy, which will be clearly bad.

Note In proxy mode (default), only external method calls coming through the proxy server are intercepted. This means that self-exclusion, essentially a method in the target that calls another method of the target, will not lead to an actual transaction at runtime, even if the called method is marked with @Transactional .

EDIT: You should also check documents for the LocalEntityManagerFactoryBean used. Based on my quick read, it seems that you are missing the property that you might need. It also mentions some features of weaving that may play a role here.

Spring ORM JPA LocalEntityManagerFactoryBean docs

+6
source

-. - Spring - AspectJ, ().

@see: Spring:

+2
source

, JRE. . JRE 6, JRE 7 .

Solution: Specified Tomcat to use JRE 6 explicitly (using Eclipse) instead of JRE 7

0
source

Source: https://habr.com/ru/post/1334487/


All Articles