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 :

Comment marche les transactions dans spring? [Data]


Sujet :

Spring Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    238
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Avril 2009
    Messages : 238
    Par défaut Comment marche les transactions dans spring?
    Bonjour à tous.

    Aujourd'hui je me pose une question... métaphysique

    Je développe une application spring/hibernate de taille petite/moyenne mais qui devrais recevoir beaucoup de requêtes (plusieurs milliers/jours), donc l'utilisation des transactions est indispensable. Seuleument d'après mes lectures, il apparaitre que spring gère comme un grand les transaction (avec les annotations @transactional(params...) ). cela veut-il dire que je n'ais pas du tout à m'en préoccuper (excepté mettre les annotations au bon endroit bien sur), pas besoin de bous de codes dans ce genre? :

    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
    sf.getCurrentSession().beginTransaction();
     
    			/* Ctrl. d'exitence de la borne */
    			if (borneDao.findById(p.id, false) != null) {
    				sf.getCurrentSession().getTransaction().rollback();
    				throw new BusinessException(ErrorCode.BORNE_EXISTE_DEJA);
    			}
     
    			/* R�cup�ration de l'AO */
    			AutoriteOrganisatrice ao = aoDao.findById(p.idAo, false);
    			if (ao == null) {
    				sf.getCurrentSession().getTransaction().rollback();
    				throw new BusinessException(ErrorCode.AO_INTROUVABLE);
    			}
    			borne.setAutoriteOrganisatrice(ao);
     
    			borneDao.makePersistent(borne);
     
    			sf.getCurrentSession().getTransaction().commit();
    Et dernière interrogation, ces transactions gérée par spring sont-elles vraiment efficaces? (enfin pour une appli pas trop grosse)?

    voila, je veux une réponse en trois pages argumentées, calculatrice interdite, vous avez trois heures

    Et merci d'avance de votre réponse bien évidement ^^

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    @Transactional et ses variantes AOP ne font qu'appeler les fonctions sous-jacentes à votre place…
    en gérant de manière transparente pour vous la plomberie… (… les exceptions entre autres…)

    donc il n'y a pas de pénalité notable à l'exécution…

    en échange d'une plus grande lisibilité du code et de la facilité de maintenance…

    (n'oubliez pas <tx:annotation-driven /> dans votre applicationContext qui contient le transactionManager…)

    MAIS

    cela ne vous prive pas de comprendre quel type de stratégie de propagation de transaction vous devez utilisez à chaque endroit…

    et

    @Transactional ne fonctionne qu'avec un seul PersistenceUnit/EntityManager/DataSource…

    si vous devez gérer plusieurs bases de données dans la même application il faut, par exemple, descendre vers
    <aop:aspectj-autoproxy />, <tx:advice> et <aop:config>

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    238
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Avril 2009
    Messages : 238
    Par défaut
    Merci pour les renseignements, effectivement la propagation n'est pas à oublier même si je ne gère pas directement les transactions.

    Donc si j'ai bien compris l'annotation @transactional (avec les paramètres qui vont bien) sur une méthode (de Dao ou de service) permet de commencer une transaction et de déclarer une session au début de cette méthode, il suffira juste ensuite de faire un getcurrentSession pour accéder à la session en cours.

    Par contre petite question : j'ai tenté d'intégrer <tx:annotation-driven/> Mais il me balance une exception :

    org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 10 in XML document from class path resource [applicationContextDao.xml] is invalid; nested exception is org.xml.sax.SAXParseException: Element type "tx:annotation-driven" must be declared.
    Donc il faut apparemment le déclarer...

    cette ligne il faut bien la mettre entre les balises <beans> hein?

    Ou alors ça à peut être à voir avec l'en-tête de mon fichier qui ne va pas chercher les bonnes dtd...

    en tête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
    Pour info j'utilise spring 2.5.6 et j'ai bien la lib org.springframework.transaction (ça n'a surement pas grand chose à voir mais j'ai vérifié quand même ^^)

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Citation Envoyé par mcfly37 Voir le message
    Par contre petite question : j'ai tenté d'intégrer <tx:annotation-driven/> Mais il me balance une exception :
    il faut bien sûr compléter les déclarations de schema dans la balise <beans>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <beans …
    	xmlns:tx="http://www.springframework.org/schema/tx"
    …
     
    	xsi:schemaLocation="
    
     
    		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
    …"
    >

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    238
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Avril 2009
    Messages : 238
    Par défaut
    Humm j'ai bien rajouter ce que tu m'a dit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?xml version="1.0" encoding="UTF-8"?>
    <!-- Application context DAO layer -->
     
    <beans
    	 xmlns="http://www.springframework.org/schema/beans"
    	xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
    	xmlns:tx="http://www.springframework.org/schema/tx"
    	xsi:schemaLocation="http://www.springframework.org/schema/tx 
    	http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"
    	>
    Mais voila ce qu'il me sort :

    org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 10 in XML document from class path resource [applicationContextDao.xml] is invalid; nested exception is org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'beans'.
    Il n'arrive plus à retrouver le déclaration de mon beans...

  6. #6
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Citation Envoyé par mcfly37 Voir le message
    Humm j'ai bien rajouter ce que tu m'a dit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?xml version="1.0" encoding="UTF-8"?>
    <!-- Application context DAO layer -->
     
    <beans
    	 xmlns="http://www.springframework.org/schema/beans"
    	xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
    	xmlns:tx="http://www.springframework.org/schema/tx"
    	xsi:schemaLocation="http://www.springframework.org/schema/tx 
    	http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"
    	>
    Mais voila ce qu'il me sort :



    Il n'arrive plus à retrouver le déclaration de mon beans...
    il manque sans doute et au moins le
    http://www.springframework.org/schema/beans http://www.springframework.org/schem...-beans-2.5.xsd
    dans le xsi:schemaLocation

    ce que j'ai ici dans une application, mais plus complet que ce dont vous avez besoin :

    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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    	xmlns:context="http://www.springframework.org/schema/context"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xmlns:tx="http://www.springframework.org/schema/tx"
    	xmlns:aop="http://www.springframework.org/schema/aop"
    	xmlns:lang="http://www.springframework.org/schema/lang"
    	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-2.5.xsd
    		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
    		http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-2.5.xsd
    		">

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment marche les mots clefs dans les meta-moteurs ?
    Par yolle dans le forum Référencement
    Réponses: 1
    Dernier message: 09/03/2015, 14h02
  2. [ClassPath]Comment inclure les librairies dans un .BAT
    Par Kyti dans le forum Général Java
    Réponses: 2
    Dernier message: 26/03/2005, 08h07
  3. Comment tuer les processus dans l'état sleeping sans EM ?
    Par David Guillouet dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 04/02/2005, 09h42
  4. Comment afficher les toolTipText dans une zone de statut ?
    Par nicok01 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 28/01/2005, 13h32
  5. Comment éviter les doublons dans ma table
    Par einegel dans le forum Bases de données
    Réponses: 3
    Dernier message: 09/11/2004, 12h18

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