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 3] Démarrer - Stoper transactions dans les JUnit 4.8


Sujet :

Spring Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 143
    Par défaut [Spring 3] Démarrer - Stoper transactions dans les JUnit 4.8
    Salut,

    Je suis passé à Spring 3 et ne trouve plus le moyen de démarrer - stoper des transactions dans mes JUnit 4.8 comme je le faisais avant avec Spring 2.5 et Junit 3.x.

    Avant dans Srping 2.5, mes JUnits étendaient la classe AbstractTransactionalSpringContextTest et je pouvais appeler les méthodes suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    super.startNewTransaction();// démarre une nouvelle transaction
    super.setComplete(); // commit à la fin de la tranasaction au lieu du rollback par défaut
    super.endTransaction();// termine la transaction avec un commit ou rollback en fonction del'appel à setComplete() ou non

    Tout ceci était bien pratique. Je ne vois pas comment faire désormais avec Spring 3 pour arriver à la même chose. Mes JUnit étendent AbstractTransactionalJUnit4SpringContextTests. Tout semble passer par des annotations au niveau des méthodes, si bien que je ne peux pas contrôler programmatiquement mes transactions dans le code Java.

    Comment puis-je arriver au même résultat avec les nouvelles classes de test Spring 3.

    Merci d'avance pour votre aide.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 54
    Par défaut
    Bonjour,

    Je te met le lien de la document Spring sur les tests : http://static.springsource.org/sprin...ration-testing

    Tu trouveras tout ce qu'il faut sur comment configurer les annotations dans la partie "Spring TestContext Framework".

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 143
    Par défaut
    Merci. Mais j'ai justement lu et relu cette doc avant de poster un message sur ce forum. Et c'est justement parce que j'ai rien trouvé dans cette doc pour faire ce que décris dans mon post initial que je m'adresse à vous.
    Si tu lis la même doc, mais pour la version 2.5 (documentation de référence sur le site Springsource), il est justement question des méthodes endTransaction(), etc. Mais plus dans la version 3.0.

    Merci d'avance pour votre aide.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 54
    Par défaut
    Tu peux configurer le comportement des transactions avec ces annotations :

    • @TransactionConfiguration(transactionManager="txMgr", defaultRollback=false) : au niveau de la classe
    • @Rollback(true) : au niveau des méthodes et qui permet de surcharger le rollback par défaut.

    Et ne pas oublier de mettre une annotation @Transactional soit au niveau de la classe soit au niveau des méthodes.

    Par contre, les commits ou rollbacks ne seront déclenchés évidemment qu'à la fin des méthodes de test.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 143
    Par défaut
    Je ne parviens à faire marcher la chose. Voici une copie du code pour être plus concret :

    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
     
    @ContextConfiguration(locations = { " mes fichiers de conf spring ..." })
    public class TransactionTest extends AbstractTransactionalJUnit4SpringContextTests {
     
    	protected JdbcTemplate jdbcTemplate;
     
    	@Autowired
    	public void setDataSource(DataSource dataSource) {
    		this.jdbcTemplate = new JdbcTemplate(dataSource);
    	}
     
    	@Test
    	public void test() throws InterruptedException {
    		String req = "select num from table1";
    		List<Integer> nums = jdbcTemplate.queryForList(req, Integer.class);
    		for (Integer i : nums) {
    			Thread.sleep(5000);
    			this.transInsert(i);
    		}
    	}
     
    	// Je veux qu'à chaque insert, il y ait un commit
    	@Transactional(propagation = Propagation.REQUIRES_NEW)
    	@Rollback(false)
    	public void transInsert(int i) {
    		String req = "insert into table2 values (?)";
    		jdbcTemplate.update(req, i);
    	}
     
    }
    L'insert fait dans la méthode transInsert(..) n'est pas commité à la fin de la méthode.

    Concrètement, comment puis-je faire. Je rappelle qu'avec Spring 2.5 et Junit 3.8, je n'avais aucune difficulté à faire ça avec les méthodes endTransaction() et startNewTransaction().

    Merci d'avance pour votre aide.

Discussions similaires

  1. Gestion des transactions dans les EJB
    Par casho dans le forum Wildfly/JBoss
    Réponses: 1
    Dernier message: 07/10/2010, 10h07
  2. [Data] Comment marche les transactions dans spring?
    Par mcfly37 dans le forum Spring
    Réponses: 7
    Dernier message: 09/07/2010, 13h58
  3. Les transactions dans les procédures stockées
    Par CharleLéo dans le forum Connexion aux bases de données
    Réponses: 2
    Dernier message: 04/12/2009, 16h04
  4. Réponses: 3
    Dernier message: 09/03/2009, 09h22
  5. [plpgsql] transaction dans les fonctions ?
    Par hpghost dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 27/06/2004, 16h56

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