IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Spring Java Discussion :

Spring: gestion des transactions


Sujet :

Spring Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 6
    Par défaut Spring: gestion des transactions
    Bonjour,

    j'utilise le fichier de contexte suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    <?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:context="http://www.springframework.org/schema/context"
    	xmlns:tx="http://www.springframework.org/schema/tx"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans <a href="http://www.springframework.org/schema/beans/spring-beans-2.5.xsd" target="_blank">http://www.springframework.org/schem...-beans-2.5.xsd</a> 
        <a href="http://www.springframework.org/schema/context" target="_blank">http://www.springframework.org/schema/context</a> <a href="http://www.springframework.org/schema/context/spring-context-2.5.xsd" target="_blank">http://www.springframework.org/schem...ontext-2.5.xsd</a> 
        <a href="http://www.springframework.org/schema/tx" target="_blank">http://www.springframework.org/schema/tx</a> http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
     
    	<bean id="persistenceUnitManager" class="com.parkeon.transfolio.utilities.jpa.MultiplePersistenceUnitManager">
    	  <property name="persistenceXmlLocations">
    	    <list>
    	      <value>classpath*:META-INF/persistence.xml</value>
    	    </list>
    	  </property>
    	  <property name="defaultDataSource" ref="datasource"/>
    	</bean>
     
        <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" > 
            <property name="persistenceUnitManager" ref="persistenceUnitManager" /> 
            <property name="persistenceUnitName" value="jpa-test" />
            <property name="dataSource" ref="datasource"/>
            <property name="jpaVendorAdapter"> 
                <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                    <property name="showSql" value="true"/>
                    <property name="generateDdl" value="true"/>
                    <property name="databasePlatform" value="org.hibernate.dialect.HSQLDialect"/>   
                </bean>
            </property>
        </bean> 
     
        <bean id="jpaTransactionManager" class="org.springframework.orm.jpa.JpaTransactionManager" >
            <property name="entityManagerFactory" ref="entityManagerFactory"/> 
        </bean>
     
    	<bean id="GenericDao" class="com.parkeon.persistence.GenericDao2" abstract="true">
            <property name="entityManagerFactory" ref="entityManagerFactory" />
        </bean>
     
        <bean id="ProviderDao" class="com.parkeon.transfolio.provider.dao.ProviderDao" parent="GenericDao"/>
     
    	<bean id="DozerMapperServer" class="net.sf.dozer.util.mapping.DozerBeanMapper">
            <property name="mappingFiles">
                <list>
                    <!--<value>file:src/main/resources/springConfig/dozer-provider-mappings.xml</value>-->
                    <value>dozer-provider-mappings.xml</value>
                </list>
            </property>
        </bean>
     
        <bean id="providerManagerTransactionTarget" class="com.parkeon.transfolio.provider.manager.ProviderManagerTransactionImpl">        
            <property name="providerDao" ref="ProviderDao" />
        	<property name="mapper" ref="DozerMapperServer" />
        </bean>   
     
    	<bean id="transactionProxy" abstract="true"
    		class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
    		<property name="transactionManager">
    			<ref bean="jpaTransactionManager"/>
    		</property>
    		<property name="transactionAttributes">
    			<props>
    				<prop key="find*">PROPAGATION_REQUIRED</prop>
    				<prop key="*">PROPAGATION_REQUIRED</prop>
    			</props>
    		</property>
    	</bean>
     
    	<bean id="jpaTransactionAttributeSource"
    		class="org.springframework.transaction.annotation.AnnotationTransactionAttributeSource"/>
     
    	<bean id="providerManagerTransaction" parent="transactionProxy">
    		<property name="target">
    			<ref local="providerManagerTransactionTarget"/>
    		</property>
    		<property name="transactionAttributeSource">
    			<ref bean="jpaTransactionAttributeSource"/>
    		</property>
    	</bean>
     
    </beans>
    j'ai defini mon interface de service

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    @Transactional(propagation=Propagation.REQUIRED, readOnly = true)
    public interface IProviderManagerTransaction{
     
        public Map<Integer, ProviderBoSimple> findAllProvider();
     
        @Transactional(readOnly=false, rollbackFor= {Exception.class})
        public void setProvider(List<ProviderBoSimple> lstProvider);
     
    }
    et lorsque j'utilise la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    providermanager.setprovider(List<providerbosimple> lstProvider)
    j'ai l'exception suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    --> [class com.parkeon.transfolio.provider.jpa.Provider] persist()
    java.lang.IllegalStateException: Transaction not active
    	at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:47)
    	at com.parkeon.transfolio.utilities.dao.GenericDataDao.persist(GenericDataDao.java:28)
    	at com.parkeon.transfolio.provider.manager.ProviderManagerTransactionImpl.setProvider(ProviderManagerTransactionImpl.java:42)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    	at java.lang.reflect.Method.invoke(Method.java:597)
    	at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307)
    	at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
    	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
    	at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
    	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
    	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
    	at $Proxy28.setProvider(Unknown Source)
    	at com.parkeon.transfolio.provider.manager.ProviderManagerTransactionImplTest.testSetProvider(ProviderManagerTransactionImplTest.java:31)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    	at java.lang.reflect.Method.invoke(Method.java:597)
    	at org.springframework.test.context.junit4.SpringTestMethod.invoke(SpringTestMethod.java:160)
    	at org.springframework.test.context.junit4.SpringMethodRoadie.runTestMethod(SpringMethodRoadie.java:233)
    	at org.springframework.test.context.junit4.SpringMethodRoadie$RunBeforesThenTestThenAfters.run(SpringMethodRoadie.java:333)
    	at org.springframework.test.context.junit4.SpringMethodRoadie.runWithRepetitions(SpringMethodRoadie.java:217)
    	at org.springframework.test.context.junit4.SpringMethodRoadie.runTest(SpringMethodRoadie.java:197)
    	at org.springframework.test.context.junit4.SpringMethodRoadie.run(SpringMethodRoadie.java:143)
    	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.invokeTestMethod(SpringJUnit4ClassRunner.java:160)
    	at org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:51)
    	at org.junit.internal.runners.JUnit4ClassRunner$1.run(JUnit4ClassRunner.java:44)
    	at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:27)
    	at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:37)
    	at org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:42)
    	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:97)
    	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:45)
    	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
    	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
    	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
    	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
    java.lang.IllegalStateException: Transaction not active
    	at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:47)
    	at com.parkeon.transfolio.utilities.dao.GenericDataDao.persist(GenericDataDao.java:28)
    	at com.parkeon.transfolio.provider.manager.ProviderManagerTransactionImpl.setProvider(ProviderManagerTransactionImpl.java:42)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    	at java.lang.reflect.Method.invoke(Method.java:597)
    	at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307)
    	at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
    	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
    	at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
    	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
    	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
    	at $Proxy28.setProvider(Unknown Source)
    	at com.parkeon.transfolio.provider.manager.ProviderManagerTransactionImplTest.testSetProvider(ProviderManagerTransactionImplTest.java:31)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    	at java.lang.reflect.Method.invoke(Method.java:597)
    	at org.springframework.test.context.junit4.SpringTestMethod.invoke(SpringTestMethod.java:160)
    	at org.springframework.test.context.junit4.SpringMethodRoadie.runTestMethod(SpringMethodRoadie.java:233)
    	at org.springframework.test.context.junit4.SpringMethodRoadie$RunBeforesThenTestThenAfters.run(SpringMethodRoadie.java:333)
    	at org.springframework.test.context.junit4.SpringMethodRoadie.runWithRepetitions(SpringMethodRoadie.java:217)
    	at org.springframework.test.context.junit4.SpringMethodRoadie.runTest(SpringMethodRoadie.java:197)
    	at org.springframework.test.context.junit4.SpringMethodRoadie.run(SpringMethodRoadie.java:143)
    	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.invokeTestMethod(SpringJUnit4ClassRunner.java:160)
    	at org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:51)
    	at org.junit.internal.runners.JUnit4ClassRunner$1.run(JUnit4ClassRunner.java:44)
    	at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:27)
    	at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:37)
    	at org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:42)
    	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:97)
    	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:45)
    	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
    	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
    	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
    	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
    quelqu'un pourrait m'aider

    merci d'avance

  2. #2
    Membre expérimenté Avatar de aymen83
    Inscrit en
    Décembre 2007
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 271
    Par défaut
    bonjour,
    je pense que c'est dû à l'asterix dans la spécification du classpath. Essai de l'enlever.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <bean id="persistenceUnitManager" class="com.parkeon.transfolio.utilities.jpa.MultiplePersistenceUnitManager">
    	  <property name="persistenceXmlLocations">
    	    <list>
    	      <value>classpath*:META-INF/persistence.xml</value>
    	    </list>
    	  </property>
    	  <property name="defaultDataSource" ref="datasource"/>
    	</bean>

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 6
    Par défaut
    Bonjour,

    Merci pour la reponse mais cela ne provient pas de l'asterix car il est utilise par la classe MultiplePersistenceUnitManager qui permet de construire un fichier persistenceunit.xml a partir de plusieurs autres.

    Maintenant j'obtiens mes transactions en modifiant mes services et en passant par TransactionAttributes dans mon ficheir XML au lieu de TransactionAttributeSource

    J'ai alors deux autres soucis qui sont :

    les rollback ne fonctionnent pas lorsqu'il y a une exception( je pense a un probleme de configuration)

    voici les transactions attributes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <property name="transactionAttributes">
    			<props>
    				<prop key="find*">PROPAGATION_REQUIRES_NEW, readOnly</prop>
    				<prop key="set*">PROPAGATION_REQUIRED, -java.lang.Exception</prop>
    			</props>
    		</property>
    mais le rollback n'est pas effectue dans mon test suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    @Test
        public void testSetProviderFalse() {
    	Assert.assertEquals(1, m_manager.findAllProvider().size());
    	ProviderBoSimple providerBo = new ProviderBoSimple();
    	providerBo.setLabel("ESSAI");
    	providerBo.setDescription("PROVIDER D ESSAI");
    	providerBo.setProviderCode(37);
    	List<ProviderBoSimple> lstProvider = new ArrayList<ProviderBoSimple>();
    	lstProvider.add(providerBo);
    	ProviderBoSimple providerBo1 = new ProviderBoSimple();
    	providerBo1.setLabel("ESSAI");
    	providerBo1.setDescription("PROVIDER D ESSAI");
    	providerBo1.setProviderCode(37);
    	lstProvider.add(providerBo1);
    	try {
    	    m_manager.setProvider(lstProvider);
    	} catch (Exception e) {
    	    // TODO Auto-generated catch block
    	    e.printStackTrace();
    	}
    	Assert.assertEquals(1, m_manager.findAllProvider().size());
        }
    j'obtiens une assertion error sur la derniere ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    java.lang.AssertionError: expected:<1> but was:<2>
    	at org.junit.Assert.fail(Assert.java:74)
    	at org.junit.Assert.failNotEquals(Assert.java:448)
    	at org.junit.Assert.assertEquals(Assert.java:102)
    	at org.junit.Assert.assertEquals(Assert.java:323)
    	at org.junit.Assert.assertEquals(Assert.java:319)
    	at com.parkeon.transfolio.provider.manager.ProviderManagerTransactionImplTest.testSetProviderFalse(ProviderManagerTransactionImplTest.java:59)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    	at java.lang.reflect.Method.invoke(Method.java:597)
    	at org.springframework.test.context.junit4.SpringTestMethod.invoke(SpringTestMethod.java:160)
    	at org.springframework.test.context.junit4.SpringMethodRoadie.runTestMethod(SpringMethodRoadie.java:233)
    	at org.springframework.test.context.junit4.SpringMethodRoadie$RunBeforesThenTestThenAfters.run(SpringMethodRoadie.java:333)
    	at org.springframework.test.context.junit4.SpringMethodRoadie.runWithRepetitions(SpringMethodRoadie.java:217)
    	at org.springframework.test.context.junit4.SpringMethodRoadie.runTest(SpringMethodRoadie.java:197)
    	at org.springframework.test.context.junit4.SpringMethodRoadie.run(SpringMethodRoadie.java:143)
    	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.invokeTestMethod(SpringJUnit4ClassRunner.java:160)
    	at org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:51)
    	at org.junit.internal.runners.JUnit4ClassRunner$1.run(JUnit4ClassRunner.java:44)
    	at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:27)
    	at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:37)
    	at org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:42)
    	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:97)
    	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:45)
    	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
    	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
    	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
    	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
    je ne vois pas pourquoi car je ne catch pas mes exceptions dans mon manager (providermanagertransactionimpl) et l'exception remonte ContraintViolationException decoule bien de Exception

    Je donne bien comme parametre -Exception sur les fucntions set*.

    Pourqoi le rollback ne fonctionne pas alors?

    Deuxieme soucis mais je pense que cela est lie au rollback qui ne fonctionne pas lorsque j'effectue mon test precedent, et que j'ai en attribut de find* propagation_required j'ai un plantage d'hibernate

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    org.hibernate.AssertionFailure: null id in com.parkeon.transfolio.provider.jpa.Provider entry (don't flush the Session after an exception occurs)
    	at org.hibernate.event.def.DefaultFlushEntityEventListener.checkId(DefaultFlushEntityEventListener.java:55)
    	at org.hibernate.event.def.DefaultFlushEntityEventListener.getValues(DefaultFlushEntityEventListener.java:164)
    	at org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:120)
    	at org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:196)
    	at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:76)
    	at org.hibernate.event.def.DefaultAutoFlushEventListener.onAutoFlush(DefaultAutoFlushEventListener.java:35)
    	at org.hibernate.impl.SessionImpl.autoFlushIfRequired(SessionImpl.java:969)
    	at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1114)
    	at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
    	at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:65)
    	at com.parkeon.transfolio.utilities.dao.GenericDao.findAll(GenericDao.java:309)
    	at com.parkeon.transfolio.utilities.dao.GenericEnumDao.findAll(GenericEnumDao.java:26)
    	at com.parkeon.transfolio.provider.manager.ProviderManagerTransactionImpl.findAllProvider(ProviderManagerTransactionImpl.java:28)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    	at java.lang.reflect.Method.invoke(Method.java:597)
    	at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307)
    	at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
    	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
    	at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
    	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
    	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
    	at $Proxy28.findAllProvider(Unknown Source)
    	at com.parkeon.transfolio.provider.manager.ProviderManagerTransactionImplTest.testSetProviderFalse(ProviderManagerTransactionImplTest.java:59)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    	at java.lang.reflect.Method.invoke(Method.java:597)
    	at org.springframework.test.context.junit4.SpringTestMethod.invoke(SpringTestMethod.java:160)
    	at org.springframework.test.context.junit4.SpringMethodRoadie.runTestMethod(SpringMethodRoadie.java:233)
    	at org.springframework.test.context.junit4.SpringMethodRoadie$RunBeforesThenTestThenAfters.run(SpringMethodRoadie.java:333)
    	at org.springframework.test.context.junit4.SpringMethodRoadie.runWithRepetitions(SpringMethodRoadie.java:217)
    	at org.springframework.test.context.junit4.SpringMethodRoadie.runTest(SpringMethodRoadie.java:197)
    	at org.springframework.test.context.junit4.SpringMethodRoadie.run(SpringMethodRoadie.java:143)
    	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.invokeTestMethod(SpringJUnit4ClassRunner.java:160)
    	at org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:51)
    	at org.junit.internal.runners.JUnit4ClassRunner$1.run(JUnit4ClassRunner.java:44)
    	at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:27)
    	at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:37)
    	at org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:42)
    	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:97)
    	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:45)
    	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
    	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
    	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
    	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
    je pense que cela est du au probleme du non rollback et que la transaction utilisée est dans un etat instable ce qui empeche le traitement de ma requete find. Mon analyse est'elle bonne?

    cdlt

  4. #4
    Expert confirmé
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Par défaut
    Salut,
    Il faut activer le scan des annotations @Transactional (et autres) en ajoutant à ton application context:

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <context:annotation-config /> 
     
      <context:component-scan base-package="package-de-base" /> 
     
      <tx:annotation-driven />

    REmarque que tu mélanges un peu les 2 stratégies (transactions par les annotations et par l'xml) un exemple par ici : http://blog.developpez.com/djo-mos/p...g/?disp=single

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 6
    Par défaut
    Bonjour,

    Merci de la réponse

    Je ne veux pas passer par les annotation mais par la configuration en XML
    donc je n'ai pas besoin de d'activer les annotations.

    Voici mon fichier config.xml final:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    <!--
    		JPA PersistenceUnitManager used to customize the selection of the
    		persistence unit and the datasources
    	-->
    	<bean id="persistenceUnitManager"
    		class="com.parkeon.transfolio.utilities.jpa.MultiplePersistenceUnitManager">
    		<!-- Multiple value can be specified here -->
    		<property name="persistenceXmlLocations">
    			<list>
    				<value>classpath*:META-INF/persistence.xml</value>
    			</list>
    		</property>
    		<!-- if no data source is specified, use this one -->
    		<property name="defaultDataSource" ref="datasource" />
    	</bean>
     
    	<!-- JPA EntityManagerFactory -->
    	<bean id="entityManagerFactory"
    		class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    		<property name="persistenceUnitManager" ref="persistenceUnitManager" />
    		<!-- Specify the name of the persistence unit used -->
    		<property name="persistenceUnitName" value="jpa-test" />
    		<property name="dataSource" ref="datasource" />
    		<!-- Specify the Spring Adaptor to JPA implementation -->
    		<property name="jpaVendorAdapter">
    			<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
    				<property name="showSql" value="true" />
    				<property name="generateDdl" value="true" />
    				<!-- Specify the database dialect used into the JPA Implementation-->
    				<property name="databasePlatform" value="org.hibernate.dialect.HSQLDialect" />
    			</bean>
    		</property>
    	</bean>
     
    	<!--
    		Transaction manager for a single JPA EntityManagerFactory (alternative
    		to JTA)
    	-->
    	<bean id="jpaTransactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    		<property name="entityManagerFactory" ref="entityManagerFactory" />
    	</bean>
     
    	<!--
    		Define an Abstract class that inject the entityManagerFactory into
    		DenericDao
    	-->
    	<bean id="GenericDao" class="com.parkeon.persistence.GenericDao2"
    		abstract="true">
    		<!--
    			<property name="entityManagerFactory" ref="entityManagerFactory" />
    		-->
    	</bean>
     
    	<!--  Define ProviderDao implemented by ProviderDao -->
    	<bean id="ProviderDao" class="com.parkeon.transfolio.provider.dao.ProviderDao" />
     
    	<!--  Define specific dozzer mapper server -->
    	<bean id="DozerMapperServer" class="net.sf.dozer.util.mapping.DozerBeanMapper">
    		<property name="mappingFiles">
    			<list>
    				<!--
    					<value>file:src/main/resources/springConfig/dozer-provider-mappings.xml</value>
    				-->
    				<value>dozer-provider-mappings.xml
    				</value>
    			</list>
    		</property>
    	</bean>
     
    	<!--
    		Define the provider manager implemented by ProviderManangerImpl
    	-->
    	<bean id="providerManagerTransactionTarget"
    		class="com.parkeon.transfolio.provider.manager.ProviderManagerTransactionImpl">
    		<property name="providerDao" ref="ProviderDao" />
    		<property name="mapper" ref="DozerMapperServer" />
    	</bean>
     
    	<!-- Transaction proxy manager -->
    	<bean id="transactionProxy" abstract="true"
    		class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
    		<property name="transactionManager">
    			<ref bean="jpaTransactionManager" />
    		</property>
    		<!--  Define the attributes of the function to the transaction -->
    		<property name="transactionAttributes">
    			<props>
    				<prop key="find*">PROPAGATION_REQUIRES_NEW , readOnly</prop>
    				<prop key="set*">PROPAGATION_REQUIRED, -Exception</prop>
    			</props>
    		</property>
    	</bean>
     
    	<!--
    		Define the provider manager used the proxy This is this class that
    		inject into the other class (@ressources)
    	-->
    	<bean id="providerManagerTransaction" parent="transactionProxy">
    		<property name="target">
    			<ref local="providerManagerTransactionTarget" />
    		</property>
    	</bean>
    </beans>
    Mais le rollback ne fonctionne pas, Pourquoi?
    Si vous voyer un melange entre annotation et config xml pouvez vous me le signaler?

    merci d'avance

  6. #6
    Expert confirmé
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Par défaut
    SAlut,
    Citation Envoyé par dkwasiborski Voir le message

    Je ne veux pas passer par les annotation mais par la configuration en XML
    donc je n'ai pas besoin de d'activer les annotations.
    Je parlais des annotations de Spring, pas celles de JPA. Tu as déjà annoté tes classes pat @TRansactional non ?
    Si vous voyer un melange entre annotation et config xml pouvez vous me le signaler?
    Cette partie là :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <!-- Transaction proxy manager -->
    	<bean id="transactionProxy" abstract="true"
    		class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
    		<property name="transactionManager">
    			<ref bean="jpaTransactionManager" />
    		</property>
    		<!--  Define the attributes of the function to the transaction -->
    		<property name="transactionAttributes">
    			<props>
    				<prop key="find*">PROPAGATION_REQUIRES_NEW , readOnly</prop>
    				<prop key="set*">PROPAGATION_REQUIRED, -Exception</prop>
    			</props>
    		</property>
    	</bean>

    Elle est de trop si tu passes par @Transactional

Discussions similaires

  1. Gestion des transactions avec Spring-JPA ?
    Par kyf80 dans le forum JPA
    Réponses: 0
    Dernier message: 26/12/2010, 23h37
  2. [Data] Gestion des transaction, Spring et Hibernate
    Par Babilion dans le forum Spring
    Réponses: 2
    Dernier message: 19/03/2010, 15h24
  3. [Data] gestion des transactions avec Spring Probleme
    Par mouvma dans le forum Spring
    Réponses: 2
    Dernier message: 02/04/2008, 20h39
  4. Gestion des transactions - Gestion des erreurs
    Par devdev dans le forum MS SQL Server
    Réponses: 14
    Dernier message: 23/03/2005, 20h17
  5. gestion des transactions
    Par viny dans le forum Requêtes
    Réponses: 2
    Dernier message: 26/03/2004, 21h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo