Printemps Transaction n'a pas réussi à l'ouvrir sur le service
Je voulais mettre en @Transactional
sur mes services au lieu de mon DAOs... afin d'ouvrir de transaction et d'être en mesure d'utiliser certains paresseux collections au sein de mes services sans l'obtention de certains "LazyInitializationException".
Jusqu'à présent, le @Transactional
étaient sur le DAOs, et les opérations ont été ouverts et fermés lors de l'entrée dans le DAOs et d'en sortir.
Maintenant, avec @Transactional
sur mes services, les transactions ne sont pas encore ouvert. Donc, l'appel de service à la DAO avec aucune transaction ouverte et nous avons obtenu les suivantes exception: org.mise en veille prolongée.SessionException: la fermeture de la Session!
Nous sommes en utilisant JPA sur Hibernate, voici un extrait de notre 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 />
MODIFIER, merci pour vos réponses/commentaires:
Donc, je vais déclarer la @Transactional sur l'ensemble du service (mise en œuvre et non de l'interface) et non pas sur les méthodes, afin d'être sûr que le @Transactional s'appliqueront à tous.
@Transactional
public class MyServiceImpl implements MyService {
public void method1(){...}
public void method2(){...}
}
Je vous donnons également la façon dont mon DAOs sont configurés, ils ont tous étendre la classe suivante:
public abstract class JpaDAOSupport {
protected EntityManager em;
@PersistenceContext(type = PersistenceContextType.TRANSACTION)
public void setEm(EntityManager em) {
this.em = em;
}
}
EDIT2:
J'ai simplifié mon application afin d'avoir seulement 1 service, et 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;
}
}
Persistance fichier de config:
<?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>
Noter que je n'ai pas accès à l'attribut "mode" pour tx:annotation-driven.
Voici le printemps dans les journaux de DÉBOGAGE en mode de démarrage:
[...]
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@7d2796]
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 [org.springframework.ui.context.support.ResourceBundleThemeSource@6bbe7]
k.beans.factory.support.DefaultListableBeanFactory Pre-instantiating singletons in org.springframework.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.springframework.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!
Je voudrais comprendre pourquoi les transactions ne sont pas ouverts, et comment pourrais-je résoudre ce problème ?
Merci,
@Transactional
dans la couche de service est une bonne pratique. Jusqu'à présent, tout semble très bien, vous aurez à montrer plus de code (Java et/ou XML) pour nous pour trouver l'erreurAu démarrage de l'application, ce qui est consigné par AnnotationTransactionAttributeSource (DEBUG)? Vous devriez voir quelque chose comme... l'Ajout de méthode 'method1' avec l'attribut: PROPAGATION_REQUIRED,ISOLATION_DEFAULT,readOnly; "
Aussi assurez-vous que votre service est déclaré dans le même contexte de l'application comme
<tx:annotation-driven>
.La dernière entrée du journal, ce qui semble indiquer que vous n'avez pas de Session. Je suis plus familier avec Hibernate en utilisant AnnotationSessionFactoryBean, donc je ne sais pas comment JPA traite de l'acquisition d'une Session Hibernate
OriginalL'auteur RoD | 2011-01-06
Vous devez vous connecter pour publier un commentaire.
Semble que cela pourrait être l'une des suivantes:
Votre
@Transactional
annotation est sur une interface, et que vous utilisez le mauvais type de proxyVotre appel de la
@Transactional
méthode interne@Transactional
docsEDIT:
Vous devriez également vérifier les docs pour la LocalEntityManagerFactoryBean que vous utilisez. Basé sur ma lecture rapide, il semble qu'il vous manque une propriété qui pourrait être nécessaire. Il mentionne également quelques précisions sur le tissage, qui peuvent jouer un rôle ici.
Spring ORM JPA LocalEntityManagerFactoryBean docs
OriginalL'auteur ptomli
Ok, en fait, les problèmes sont
Pour 1.:
sur 2. :
OriginalL'auteur RoD
Ressemble à l'ancien proxy problème. -- Utilisation d'un réel AspectJ tissage à la place de ce Printemps Proxy trucs pour se débarrasser du problème (pour toujours).
@voir: Printemps: Annotation-driven Gestionnaire de Transactions
OriginalL'auteur Ralph
Outre les raisons ci-dessus, cela pourrait aussi être un problème avec la version JRE. En fait, j'ai affronté le même. La demande a été fonctionne correctement dans JRE 6, mais comme je l'ai migré vers JRE 7, il a soulevé cette exception.
Solution : Spécifié Tomcat pour utiliser JRE 6 explicitement (à l'aide d'Eclipse) au lieu de JRE 7
OriginalL'auteur Abhishek Chatterjee