2010-04-14 18 views
8

Esto es lo que estoy tratando de hacer. Estoy usando la persistencia de JPA en una aplicación web, pero tengo un conjunto de pruebas de unidad que quiero ejecutar fuera de un contenedor.¿Está ubicado JPA persistence.xml classpath?

Tengo mi primario persistence.xml en la carpeta META_INF de mi aplicación principal y funciona muy bien en el contenedor (Glassfish).

Puse un segundo persistence.xml en la carpeta META-INF de mi directorio test-classes. Esto contiene una unidad de persistencia separada que quiero usar solo para prueba. En Eclipse, puse esta carpeta más arriba en el classpath que en la carpeta predeterminada y parece funcionar.

Ahora cuando ejecuto la construcción maven directamente desde la línea de comandos e intenta ejecutar las pruebas unitarias, se ignora la anulación persistence.xml. Puedo ver la anulación en la carpeta META-INF del directorio maven test-classes generado y esperaba que las pruebas maven utilizaran este archivo, pero no es así. Las anulaciones de configuración de prueba de My Spring, logradas de manera similar, están funcionando.

Estoy confundido a si el persistence.xml se encuentra a través del classpath. Si lo fuera, mi anulación debería funcionar como la anulación de primavera ya que el complemento maven surefire explains "[El directorio de la clase de prueba] se incluirá al comienzo de la ruta de clase de prueba".

¿He anticipado erróneamente cómo se encuentra el archivo persistence.xml?

Pude (y tuve) crear una segunda unidad de persistencia en el archivo de producción persistence.xml, pero parece sucio colocar la configuración de prueba en este archivo de producción. Cualquier otra idea sobre cómo lograr mi objetivo es bienvenida.

Respuesta

3

persistence.xml se carga desde classpath; en el pasado, hice exactamente lo que describiste.

Es muy probable que sea un problema con maven. Puede depurar el classpath de maven ejecutándolo con la opción -X.

+0

OK - Gracias por los comentarios. Al menos sé que no estoy haciendo algo que está totalmente por ahí. – Vinnie

+0

OK - esto está funcionando ahora. Antes había nombrado cada unidad de persistencia en los diferentes archivos con el mismo nombre. Cambié la unidad de persistencia de prueba para tener un nombre diferente. No me parece correcto, pero tal vez esta es una limitación que no sabía. – Vinnie

+0

Fui y desenterré el código donde lo había hecho antes, y sí tenía una unidad de persistencia diferente definida para las pruebas unitarias, aunque mi archivo persistence.xml de prueba tenía la misma unidad de persistencia (sin prueba) también definida. Sin embargo, probablemente no fue necesario. Creo que las pruebas unitarias usan la unidad de persistencia de prueba al crear el administrador de entidades. –

4

No está claro dónde colocó el "segundo" persistence.xml (la versión de prueba) pero debe colocarlo en src/test/resources/META-INF. Los recursos de prueba se agregan automáticamente a la ruta de clase configurada por Maven para las pruebas de su unidad y tienen prioridad sobre los recursos ubicados en src/main/resources.

+0

a la derecha. ahí es donde está. – Vinnie

Cuestiones relacionadas