2010-04-14 12 views
8

Voici ce que j'essaie de faire. J'utilise la persistance JPA dans une application Web, mais j'ai un ensemble de tests unitaires que je veux exécuter en dehors d'un conteneur.JPA persistence.xml classpath est-il localisé?

J'ai mon principal persistence.xml dans le dossier META_INF de mon application principale et il fonctionne très bien dans le conteneur (Glassfish). J'ai placé un second persistence.xml dans le dossier META-INF de mon répertoire test-classes. Cela contient une unité de persistance distincte que je veux utiliser pour le test uniquement. En éclipse, j'ai placé ce dossier plus haut dans le classpath que le dossier par défaut et cela semble fonctionner.

Maintenant, lorsque j'exécute la compilation maven directement à partir de la ligne de commande et qu'elle tente d'exécuter les tests unitaires, le remplacement persistence.xml est ignoré. Je peux voir le remplacement dans le dossier META-INF du répertoire test-classes généré par maven et je m'attendais à ce que les tests maven utilisent ce fichier, mais ce n'est pas le cas. Mes remplacements de configuration de test de printemps, réalisés de la même manière fonctionnent.

Je suis confus à savoir si le persistence.xml est situé à travers le chemin de classe. Si c'était le cas, mon override devrait fonctionner comme le remplacement du ressort depuis le plugin maven surefire explains "[Le répertoire de classe de test] sera inclus au début du chemin de classe de test".

Ai-je mal anticipé comment se trouve le fichier persistence.xml?

Je pourrais (et je l'aurais) créer une deuxième unité de persistance dans le fichier de production persistence.xml, mais cela semble sale de placer la configuration de test dans ce fichier de production. Toute autre idée sur la façon d'atteindre mon objectif est la bienvenue.

Répondre

3

persistence.xml est chargé à partir du chemin de classe; Dans le passé, j'ai fait exactement ce que vous avez décrit.

C'est probablement un problème avec maven. Vous pouvez déboguer le classpath maven en l'exécutant avec l'option -X.

+0

OK - Merci pour vos commentaires. Au moins, je sais que je ne fais pas quelque chose qui est totalement absent. – Vinnie

+0

OK - cela fonctionne maintenant. Avant d'avoir nommé chaque unité de persistance dans les différents fichiers avec le même nom. J'ai changé l'unité de persistance de test pour avoir un nom différent. Cela ne me semble pas juste, mais c'est peut-être une limitation que je ne connaissais pas. – Vinnie

+0

Je suis allé déterrer le code où je l'avais fait auparavant, et j'avais une unité de persistance différente définie pour les tests unitaires, bien que mon test persistence.xml ait eu la même unité de persistance (non-test) définie. Ce n'était probablement pas nécessaire cependant. Je pense que les tests unitaires utilisent l'unité de persistance de test lors de la création du gestionnaire d'entités. –

4

On ne sait pas où vous avez placé le "second" persistence.xml (la version de test), mais vous devez le placer dans src/test/resources/META-INF. Les ressources de test sont automatiquement ajoutées au chemin de classe mis en place par Maven pour vos tests unitaires et ont la priorité sur les ressources placées dans src/main/resources.

+0

à droite. c'est là que c'est. – Vinnie

Questions connexes