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][Ibatis] transactions non prise en compte


Sujet :

Spring Java

  1. #1
    Membre actif

    Inscrit en
    Août 2002
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Août 2002
    Messages : 302
    Points : 285
    Points
    285
    Par défaut [Spring][Ibatis] transactions non prise en compte
    Bonjour à tous,
    Je travaille avec spring et ibatis mais quand j'utilise des transactions elles sont pas prises en compte.
    J'ai voulu vérifié si c t en autocommit donc j'ai fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getSqlMapClient().getCurrentConnection().getAutoCommit();
    et ce la m'a renvoyé un true. J'ai voulu forcer l'autocommit à true dans le code avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getSqlMapClient().getCurrentConnection().setAutoCommit(false);
    mais ça n'a pas fonctionné.
    Ce qui est un peu bizarre c'est que pour vérifier si les transactions étaient prises en compte ou pas j'ai ouvert une transaction mais je l'ai pas refermée et il n'y a pas eu d'erreurs.
    Pouvez vous m'eclairer svp

  2. #2
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 481
    Points
    3 481
    Par défaut
    Salut,

    Comment as-tu géré dans tes fichiers de configuration Spring les transactions ?

    Si tu n'as rien fait, par défaut, tes beans ne seront pas transactionnels, il y a une définition à faire pour les intercepter et en faire des proxys qui permettent de gérer les transactions de manière transparente.

    A+
    K

  3. #3
    Membre actif

    Inscrit en
    Août 2002
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Août 2002
    Messages : 302
    Points : 285
    Points
    285
    Par défaut
    Je te remercie pour ta réponse,
    Est ce que vous n'avez pas sous la main un exemple de fichier de config pour gérer les transactions.
    Merci d'avance

  4. #4
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 481
    Points
    3 481
    Par défaut
    Salut,

    Plusieurs choses à faire :

    Déclarer un TransactionManager :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    	<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    		<property name="sessionFactory">
    			<ref bean="sessionFactory" />
    		</property>
    	</bean>
    Déclarer un TransactionInterceptor :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    	<bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
    		<property name="transactionManager">
    			<ref bean="transactionManager" />
    		</property>
    		<property name="transactionAttributes">
    			<props>
    				<!-- Ici déclarer les noms de méthodes à rendre transactionnelles -->
    				<prop key="create*">PROPAGATION_REQUIRED</prop>
    				<!-- Les autres seront en read only car elles n'ont pas forcément besoin d'ouvrir une transaction -->
    				<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
    			</props>
    		</property>
    	</bean>
    Déclarer un TransactionAdvisor :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    	<bean id="transactionAdvisor" class="org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor">
    		<property name="transactionInterceptor">
    			<ref bean="transactionInterceptor" />
    		</property>
    	</bean>
    Déclarer un BeanNameAutoProxyCreator :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    	<bean id="beanNameAutoProxyCreator" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
    		<property name="beanNames">
    			<list>
    				<!-- Will create proxy for all beans wich name are : -->
    				<value>*Service</value>
    			</list>
    		</property>
    		<property name="interceptorNames">
    			<list>
    				<value>transactionAdvisor</value>
    			</list>
    		</property>
    	</bean>
    Ca devrait fonctionner comme ça.
    Il faut que le Nom de tes beans ( très important ) se termine par "Service" en l'occurence.

    A+
    K

  5. #5
    Membre actif

    Inscrit en
    Août 2002
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Août 2002
    Messages : 302
    Points : 285
    Points
    285
    Par défaut
    Je te remercie pour ta réponse et je m'excuse pour ma réaction tardive. Je vais expliquer plus clairement mon problème. Dans mon fichier spring.xml j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <bean id="sqlMapClient"
    		class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
    		<property name="configLocation">
    			<bean id="config.ibatisConfig"
    				class="org.springframework.beans.factory.config.PropertyPathFactoryBean" />
    		</property>
    		<property name="useTransactionAwareDataSource" value="false" />
    		<property name="dataSource" ref="dataSource" />
    	</bean>
    et pour que les transactions ne soient pas en autocommit j'ai fait ce qui suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <bean id="dataSource" destroy-method="close"  class="org.apache.commons.dbcp.BasicDataSource"> 
    		<!--  class="org.springframework.jdbc.datasource.DriverManagerDataSource">-->
     
    		<property name="driverClassName">
    			<bean id="config.baseDriver"
    				class="org.springframework.beans.factory.config.PropertyPathFactoryBean" />
    		</property>
    		<property name="url" value="${dataSource.url}"/>
    		<property name="username" value="${dataSource.username}"/>
    		<property name="password" value="${dataSource.password}"/>
    		<property name="defaultAutoCommit" value="false" /> 
     
    	</bean>
    pour ce qui est du code java que j'utilise ci dessous un petit exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    try {
        getSqlMapClient().startTransaction();
        getSqlMapClient.insert .... 
        getSqlMapClient.update tellle ou telle table
       getSqlMapClient.delete telle ou telle autre table
       getSqlMapClient().commitTransaction();
      } 
     finally 
      {
    	getSqlMapClient().endTransaction();
     }
    Quand je met la propriété defaultAutoCommit à true les requetes fonctionnent et il y'a bel et bien des insertions et des suppressions dans la base. Alors que lorsque je la met à false plus rien n'est inséré dans la base et aucun message d'erreur n'est envoyé.
    Avez vous une piste?

  6. #6
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 99
    Points : 44
    Points
    44
    Par défaut Test Dao avec Ibatis
    Bonjour,

    je débute avec Ibatis et je veux faire des tests pour vérifier si je me connecte bien à ma base de donnée Oracle.

    Pouvez-vous m'aider ?

    Thx

  7. #7
    Membre actif

    Inscrit en
    Août 2002
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Août 2002
    Messages : 302
    Points : 285
    Points
    285
    Par défaut
    Bonsoir,
    Bonjour,

    je débute avec Ibatis et je veux faire des tests pour vérifier si je me connecte bien à ma base de donnée Oracle.
    Tu utilises ibatis ou ibatis avec spring?
    T'as lu quelques exemples sur le site d'ibatis?

  8. #8
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 99
    Points : 44
    Points
    44
    Par défaut
    j'utilises ibatis avec Spring

  9. #9
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 99
    Points : 44
    Points
    44
    Par défaut
    j'ai lu qq exemples mais j'ai pas trouvé de classes de test sur la couche d'accès dao et couches services. Si tu en as peux tu me les envoyer stp..

    à titre d'infos j'ai configuré mes fichiers comme suit :

    appContext-dao.xml :

    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
     
    <?xml version=”1.0″ encoding=”UTF-8″ ?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "/WEB-INF/dtds/spring-beans.dtd">
     
    <!--
    	| Spring configuration file for Data Access Objects (DAOs).
    	+-->
    <beans>
     
    	<!-- Configure the dataSource. 
    		Notice that we are using properties defined in applicationContextProperties.xml, i.e.,
    		${database.driver_class} uses a property called database.driver_class defined 
    		in db.properties file, which was imported by applicationContextProperties.xml.
    	-->
    	 <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
            <property name="location" value="classpath:com/xxxl/env.properties""/>
        </bean>
     
    	<bean id="dataSource"
    		class="org.apache.commons.dbcp.BasicDataSource"
    		destroy-method="close">
    		<property name="driverClassName" value="${database.driver_class}"/>
    		<property name="url" value="${database.url}" />
    		<property name="username" value="${database.username"/>
    		<property name="password" value="${database.password}"/>
    	</bean>
     
    	<!-- Spring Data Access Exception Translator Defintion -->
    	<!--  bean id="jdbcExceptionTranslator"
    		class="org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator">
    		<property name="dataSource">
    			<ref bean="dataSource" />
    		</property>
    	</bean-->
     
        <!-- SqlMap client setup for iBATIS Database Layer -->
          <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
            <property name="configLocation">
                <value>classpath:/com/socgen/bddf/mcr/cvo/tomii/ressources/sql-map-config.xml</value>
            </property>
            <property name="useTransactionAwareDataSource">
                <value>true</value>
            </property>
            <property name="dataSource">
                <ref bean="dataSource"/>
            </property>
        </bean>
        <bean id="sqlMapClientTemplate"
              class="org.springframework.orm.ibatis.SqlMapClientTemplate">
            <property name="sqlMapClient">
                <ref bean="sqlMapClient"/>
            </property>
        </bean>
     
    	<!--  This class allow to acess to DAO layer -->
    	<bean id="ibatisDaoSupport"
    		class="org.springframework.orm.ibatis.support.SqlMapClientDaoSupport"
    		abstract="true">
    		<!-- property name="dataSource" ref="dataSource"/-->
            <property name="sqlMapClient" ref="sqlMapClient"/> 
    	</bean>
     
    	<!-- bean id="jdbcTemplate"
    		class="org.springframework.jdbc.core.JdbcTemplate">
    		<property name="dataSource">
    			<ref local="dataSource" />
    		</property>
    	</bean>
    	 <!-- DAO: iBatis implementation --> 
        <bean id="answeredEmailsDao" 
        	  class="com.xxxDaoImpl" 
              parent="ibatisDaoSupport" /> 
    	</bean> 
    	 <bean id="connectionTimeDao" 
        	  class="com.xxxxDaoImpl" 
              parent="ibatisDaoSupport" /> 
    	</bean> 
    </beans>

  10. #10
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 99
    Points : 44
    Points
    44
    Par défaut
    Comme tu peux le constater, j'ai mis les params de base de données dans un fichier env.properties...Maintenant , j'ai envie de tester la connexion et les requêtes .

    Thx :-)

  11. #11
    Membre actif Avatar de tnodev
    Profil pro
    SSSSS
    Inscrit en
    Mai 2005
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : SSSSS

    Informations forums :
    Inscription : Mai 2005
    Messages : 182
    Points : 231
    Points
    231
    Par défaut
    Salut

    tu as mélangé les transactions gérées par Ibatis et celles de Spring...
    L'intérêt de Spring est de ne pas utiliser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    startTransaction
    requêtes
    commit si OK sinon rollback
    mais

    La gestion des transaction est un super plus apporté par Spring

  12. #12
    Membre actif

    Inscrit en
    Août 2002
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Août 2002
    Messages : 302
    Points : 285
    Points
    285
    Par défaut
    tnodev a dit:
    tu as mélangé les transactions gérées par Ibatis et celles de Spring...
    Je te remercie pour ta réponse mais qu'est ce que je suis censé faire dans ce cas pour mes transactions soient gérées seulement par ibatis?
    Merci d'avance

  13. #13
    Membre actif Avatar de tnodev
    Profil pro
    SSSSS
    Inscrit en
    Mai 2005
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : SSSSS

    Informations forums :
    Inscription : Mai 2005
    Messages : 182
    Points : 231
    Points
    231
    Par défaut
    Je te conseille d'utiliser Spring pour gérer les transactions car c'est vraiment simple, par contre je ne pourrai pas trop d'aider pour les transactions Ibatis car je ne les ai jamais utilisées...

  14. #14
    Membre actif

    Inscrit en
    Août 2002
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Août 2002
    Messages : 302
    Points : 285
    Points
    285
    Par défaut
    Bon d'accord, mais d'après ce que j'ai vu il faudrait utiliser les annotations spring pour les transactions faire beaucoup de refactoring dans mon code ce qui est vraiment contraignant pour l'instant. Si jamais tu disposes d'un exemple simple pour la gestion des transactions par spring ça serait hyper sympa.
    Merci

  15. #15
    Membre actif Avatar de tnodev
    Profil pro
    SSSSS
    Inscrit en
    Mai 2005
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : SSSSS

    Informations forums :
    Inscription : Mai 2005
    Messages : 182
    Points : 231
    Points
    231

  16. #16
    Membre actif

    Inscrit en
    Août 2002
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Août 2002
    Messages : 302
    Points : 285
    Points
    285
    Par défaut
    Je te remercie et te tiens au courant.
    Merci pour la réactivité

Discussions similaires

  1. J2EE Spring - Annotations non prises en compte
    Par M20K8X dans le forum Spring Web
    Réponses: 11
    Dernier message: 12/07/2014, 23h27
  2. [Data] Transaction non prise en compte par outil de dump de bdd
    Par Laurent.B dans le forum Spring
    Réponses: 7
    Dernier message: 17/12/2008, 20h02
  3. Réponses: 1
    Dernier message: 08/08/2007, 11h26
  4. [netbeans] Modifications non prises en compte
    Par nadass dans le forum NetBeans
    Réponses: 6
    Dernier message: 07/04/2005, 13h49
  5. Lecture de fichier - dernière ligne non prise en compte
    Par JulienPles dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 16/03/2005, 11h57

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