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 :

Problème avec une Transaction


Sujet :

Spring Java

  1. #1
    Membre confirmé
    Inscrit en
    Mars 2004
    Messages
    183
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 183
    Par défaut Problème avec une Transaction
    Bonjour,

    J'ai un soucis de compréhension de l'utilisation de la Transaction Hibernate injecté par Spring sur une méthode de mon service

    Voilà la configuration de Spring

    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
    <?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: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.5.xsd
                            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
                            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd 
    	                    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
     
       <context:component-scan base-package="com.leaderinfo.novanet" />
     
    	<bean id="propertyConfigurer"
    		class="org.springframework.web.context.support.ServletContextPropertyPlaceholderConfigurer">
    		<property name="location" value="classpath:julien.properties" />
    	</bean>
     
       <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
          	<property name="driverClass"><value>${jdbc.driverClass}</value></property>
          	<property name="jdbcUrl"><value>${jdbc.url}</value></property>
          	<property name="user"><value>${jdbc.username}</value></property>
          	<property name="password"><value>${jdbc.password}</value></property>
          	<property name="checkoutTimeout"><value>${c3p0.checkoutTimeout}</value></property>
            <property name="minPoolSize"><value>${c3p0.minPoolSize}</value></property>
            <property name="maxPoolSize"><value>${c3p0.maxPoolSize}</value></property>
            <property name="maxIdleTime"><value>${c3p0.maxIdleTime}</value></property>
            <property name="maxConnectionAge"><value>${c3p0.maxConnectionAge}</value></property>
            <property name="acquireIncrement"><value>${c3p0.acquireIncrement}</value></property>
            <property name="maxStatements"><value>180</value></property>
            <property name="propertyCycle"><value>${c3p0.propertyCycle}</value></property>
            <property name="unreturnedConnectionTimeout"><value>${c3p0.unreturnedConnectionTimeout}</value></property>
            <property name="autoCommitOnClose"><value>${c3p0.autoCommitOnClose}</value></property>
            <property name="preferredTestQuery"><value>${c3p0.preferredTestQuery}</value></property>
       </bean>
     
       <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
          	<property name="dataSource"><ref local="dataSource"/></property>
          	<property name="hibernateProperties">
    	     	<props>
    	       		<prop key="hibernate.dialect">
    	         		org.hibernate.dialect.MySQLDialect
    	       		</prop>
    	       		<prop key="hibernate.show_sql">
    	         		true
    	       		</prop>
    	     	</props>
     
          	<property name="annotatedClasses">
    			<list>
    				<value>com.leaderinfo.novanet.entity.commons.CurrentSelection</value>
    				<value>com.leaderinfo.novanet.entity.commons.JoueursFoot</value>
    			</list>
    	  	</property>
       </bean>
     
       <bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
         	<property name="sessionFactory" ref="sessionFactory" />
       </bean>
     
        <tx:advice id="serviceTxAdvice" transaction-manager="txManager">
         <tx:attributes>
           <tx:method name="find*" propagation="REQUIRED" read-only="true" />
           <tx:method name="get*" propagation="REQUIRED" read-only="true" />
           <tx:method name="*" propagation="REQUIRED" />
         </tx:attributes>
       </tx:advice>
     
       <aop:config>
         <aop:pointcut id="abstractServiceMethods"
             expression="execution(* com.leaderinfo.novanet.services.AbstractService.*(..))" />
         <aop:advisor advice-ref="serviceTxAdvice" pointcut-ref="abstractServiceMethods" />
       </aop:config>
     
       <aop:config>
         <aop:pointcut id="servicesMethods"
             expression="execution(* com.leaderinfo.novanet.services.*.*Service.*(..))" />
         <aop:advisor advice-ref="serviceTxAdvice" pointcut-ref="servicesMethods" />
       </aop:config>
     
       </aop:config>
     
    </beans>
    Ci dessous, le contenu de ma méthode du service que je teste

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public void doMyTest() {
    		CurrentSelection currentSelection = new CurrentSelection();
    		currentSelection.setLogin("julien");
    		currentSelection.setSocieteuser("toto");
     
    		CurrentSelection currentSelection2 = new CurrentSelection();
    		currentSelection2.setSocieteuser("toto2");
     
    		this.insert(currentSelection);
    		this.insert(currentSelection2);
    	}
    Le premier insert s'effectue correctement et c'est normal. Le deuxième insert ne doit pas passer à cause de la non initialisation de la clé primaire (login)

    Problème, selon la définition des mes AOP pour les transactions, ca devrait rollback toute la méthode, or ca ne rollback pas le premier insert. Pourquoi ?

    Comment palier à cela ?

    Merci

  2. #2
    Membre confirmé
    Inscrit en
    Mars 2004
    Messages
    183
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 183
    Par défaut
    En fait, la méthode insert dans mon service capturait l'exception, code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    try {
    			uneEntite = this.localDao.insert(entity);
    		} catch (Exception e) {
    			logger.error("", e);
    		}
    En supprimant le TRY CATCH dans cette méthode, l'erreur remonte bien au service, qui ne capture aucune exception, et le rollback se fait bien pour l'ensemble.

    Comment peut on gérer ca proprement en capturant l'exception mais en laissant la transaction faire son taff ?

    Merci

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2004
    Messages
    183
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 183
    Par défaut
    up help

  4. #4
    Membre confirmé
    Inscrit en
    Mars 2004
    Messages
    183
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 183
    Par défaut
    upppppppp

  5. #5
    Membre confirmé
    Inscrit en
    Mars 2004
    Messages
    183
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 183
    Par défaut
    Personne pour aider ???

  6. #6
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Par défaut
    Pourquoi continuer la transaction si tu "rollback" tout après ?
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

Discussions similaires

  1. Problème avec une UDF
    Par kanmaber dans le forum Bases de données
    Réponses: 2
    Dernier message: 27/08/2004, 23h42
  2. [JBOSS] [Struts] Problème avec une application
    Par Tiercel dans le forum Wildfly/JBoss
    Réponses: 5
    Dernier message: 13/07/2004, 13h50
  3. Problème avec une instruction OUTER /Postgres
    Par Volcomix dans le forum Langage SQL
    Réponses: 14
    Dernier message: 21/04/2004, 16h56
  4. problème avec une requête imbriquée
    Par jaimepasteevy dans le forum Langage SQL
    Réponses: 13
    Dernier message: 05/12/2003, 10h29
  5. Problème avec une procédure stockée
    Par in dans le forum Langage SQL
    Réponses: 4
    Dernier message: 27/05/2003, 15h33

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