2011-02-18 4 views
1

J'essaye de migrer de JPA vers JTA et d'utiliser le gestionnaire de transactions bitronix. Je reçois un message d'erreur ci-dessous lorsque j'essaie d'exécuter des tests unitaires. Selon la documentation de bitronix c'est normal b/c ma configuration de contexte de printemps essaye de charger les ressources deux fois (une fois en classe de base puis dans la classe de test, voir le code ci-dessous), j'ai essayé la même chose avec atomikos .bitronix transaction manager

Causée par: java.lang.IllegalArgumentException: ressource avec uniqueName 'xyzDb' a déjà été enregistré

Ma classe de base

@ContextConfiguration(locations = {"classpath:com/xyz/baseContext.xml"}) 
@Transactional 
public abstract class AbstractTestSupport extends Assert implements ApplicationContextAware 
{ 

Dans certains tests unitaires que j'ai pour étendre le support de test et ajouter un fichier de configuration de contexte comme ci-dessous. il charge contexte une fois pour la classe de base et une autre fois pour la classe des enfants et ne

classe enfant

@ContextConfiguration(locations = {"classpath:com/xyz/testContext.xml"}) 
public class UnitTest extends AbstractTestSupport 
{ 

Après le test j'arrêter contexte, si prochain test fonctionne bien tant qu'il n » t étendre la classe de base avec un autre fichier de configuration de contexte.

@AfterClass 
public static void onTearDownAfterClass() throws Exception 
{ 
    applicationContext.shutdownApplicationContext(); 
    assertFalse("Spring application context is still active after shutdown. ", applicationContext.isActive()); 
} 

Je veux conserver les fichiers de configuration de contexte dans les classes d'enfants et de faire ce travail comme ça, des idées très appréciés ....

+0

Qu'y a-t-il dans les deux fichiers XML? – skaffman

+0

juste une note hors-sujet: j'ai eu une mauvaise impression de bitronix tm et même quelques tests montrant qu'il fonctionne pire que le gestionnaire de transactions autonomes jboss quand il s'agit de fonctionnalités comme la suspension de transaction. –

Répondre

1

Le message d'erreur signifie essentiellement que vous avez créé le pool de connexion avec nom unique 'xyzDb' (souvenez-vous qu'il existe une propriété uniqueName que vous devez définir dans les pools de BTM?) pour la deuxième fois au moment où l'exception est levée. Vous ne pouvez pas faire cela: chaque pool de connexion doit avoir un nom unique et doit être fermé avant qu'un autre avec un nom identique puisse être créé.

Je suppose qu'il y a un certain chevauchement entre vos deux fichiers de contexte provoquant cela ou peut-être que les pools de connexions ne sont pas toujours fermés comme ils le devraient. Malheureusement, vous avez publié trop peu d'informations pour obtenir une réponse définitive.