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 :

Où sont fait les commit ?


Sujet :

Spring Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite

    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Par défaut Où sont fait les commit ?
    Bonjour

    Je cherche actuellement à comprendre comment sont fait les commit de mes requetes dans un site réalisé avec Spring...

    En fait, j'ai trouvé ça dans spring-transactions.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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
    <beans>
    	<!-- ################################################################
    			Ce fichier décrit l'intercepteur AOP (voir spring-aop.xml) pour les transactions.
    			################################################################ -->
        <!-- Définit les méthodes auquelles vont être affectés des attributs transactionnels par leurs noms -->
        <bean id="daoTxAttributes" class="org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource">
            <property name="properties">
                <props>
                    <prop key="find*">PROPAGATION_SUPPORTS</prop>
                    <prop key="list*">PROPAGATION_SUPPORTS</prop>
                    <prop key="count*">PROPAGATION_SUPPORTS</prop>
                    <prop key="delete*">PROPAGATION_REQUIRED</prop>
                    <prop key="create*">PROPAGATION_REQUIRED</prop>
                    <prop key="createAndGet*">PROPAGATION_REQUIRED,ISOLATION_SERIALIZABLE</prop>
                    <prop key="update*">PROPAGATION_REQUIRED</prop>
                </props>
            </property>
        </bean>
        <!-- Définit l'intercepteur qui lors de la création des beans, va affecter les attributs et faire la liaison avec le transactionManager-->
        <bean id="methodNamesTxInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
            <property name="transactionManager"><ref bean="transactionManager"/></property>
            <property name="transactionAttributeSource"><ref bean="daoTxAttributes"/></property>
        </bean>
    </beans>
    de même, dans spring-database.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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
     
    <beans>
    	<!-- ################################################################
    			Ce fichier décrit les Beans Liés à l'accès aux bases de données.
    			Certains paramètres sont externalisés pour faciliter leur modification à l'installation,
    			dans le fichier database-access.properties présent dans le classpath
    			################################################################ -->
        <!-- création de la datasource -->
        <bean id="datasource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
            <property name="driverClassName"><value>${jdbc.driverClassName}</value></property>
            <property name="url"><value>${jdbc.url}</value></property>
            <property name="username"><value>${jdbc.username}</value></property>
            <property name="password"><value>${jdbc.password}</value></property>
            <!--property name="defaultAutoCommit"><value>false</value></property-->
        </bean>
        <!-- Transaction manager pour une simple DataSource JDBC  -->
        <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <property name="dataSource"><ref local="datasource"/></property>
        </bean>
    </beans>
    J'suis allé regarder du côté de org.apache.commons.dbcp.BasicDataSource mais rien ne me dit la stratégie appliquée par défaut, surtout que la propriété defaultAutoCommit est activée par défaut...

    Des pistes ?

    Merci d'avance !
    ZedroS

  2. #2
    Membre expérimenté
    Inscrit en
    Septembre 2003
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 174
    Par défaut
    Salut,
    En général, les transactions (et donc les commit) se trouvent dans les services qui utilisent les DAO et non dans les DAO elles-memes ...
    Sauf erreur de ma part, dans ton cas, "spring-transactions.xml" précise que le traitement des méthodes commençcant par "find", "list", "count" (...) de daoTxAttributes seront effectuées dans une même transaction et donc qu'un commit est effectué à la fin de chacune de ses méthodes.

    Le fichier "spring-database.xml" permet de configurer différents paramètres de la connexion.

    Je te conseille de lire la doc de réference de Spring et en particulier le chapitre sur les transactions

    sylvain_2020

  3. #3
    Membre émérite

    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Par défaut
    Hum, merci bien pour ta réponse.

    J'ai lu la doc et ça été instructif. J'ai toutefois encore quelques questions :
    - dans spring-database.xml le fait que cette ligne soit commentée ne gêne t il pas <!--property name="defaultAutoCommit"><value>false</value></property--> ? Cela changerait il le comportement si je la mettais à true ?
    - comme définition de PROPAGATION_REQUIRED j'ai trouvé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Support a current transaction, create a new one if none exists.
    . Je ne comprends pas le fait que cela créé une nouvelle transaction si aucune existe ou utilise l'existante.

    En effet, pour une requête donnée, une transaction, je vois mal comment on peut réutiliser une transaction existante...

    Encore merci d'avance

Discussions similaires

  1. Comment sont fait les Makefile ?
    Par mister3957 dans le forum C++
    Réponses: 3
    Dernier message: 17/07/2013, 08h41
  2. Réponses: 4
    Dernier message: 17/03/2010, 16h44
  3. Réponses: 3
    Dernier message: 17/09/2008, 16h51
  4. Réponses: 2
    Dernier message: 02/08/2005, 13h53
  5. Est-ce que les fichiers .obj sont tous les mêmes?
    Par Bubonik software dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 30/12/2003, 21h04

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