Находится ли путь к классу JPA persistence.xml?

Вот что я пытаюсь сделать. Я использую сохраняемость JPA в веб-приложении, но у меня есть набор модульных тестов, которые я хочу запустить вне контейнера.

У меня есть основной persistence.xml в папке META_INF моего основного приложения, и он отлично работает в контейнере (Glassfish).

Я поместил второй persistence.xml в папку META-INF моего каталога test-classes. Он содержит отдельный блок сохраняемости, который я хочу использовать только для тестирования. В eclipse я поместил эту папку выше в пути к классам, чем папка по умолчанию, и, похоже, она работает.

Теперь, когда я запускаю сборку maven непосредственно из командной строки и пытаюсь запустить модульные тесты, переопределение persistence.xml игнорируется. Я вижу переопределение в папке META-INF созданного maven каталога test-classes, и я ожидал, что тесты maven будут использовать этот файл, но это не так. Мои переопределения тестовой конфигурации Spring, достигнутые аналогичным образом, работают.

Я смущен тем, находится ли persistence.xml через путь к классам. Если бы это было так, мое переопределение должно работать как переопределение spring, поскольку плагин maven surefire объясняет "[Каталог тестового класса] будет включен в начало пути к тестовому классу".

Я неправильно предвидел, как находится файл persistence.xml?

Я мог бы (и сделал) создать второй блок сохраняемости в рабочем файле persistence.xml, но мне кажется грязным помещать тестовую конфигурацию в этот рабочий файл. Любые другие идеи о том, как достичь моей цели, приветствуются.


person Vinnie    schedule 14.04.2010    source источник


Ответы (2)


persistence.xml загружается из пути к классам; в прошлом я делал именно то, что вы описали.

Скорее всего проблема в maven. Вы можете отладить путь к классам maven, запустив его с параметром -X.

person Ken Liu    schedule 14.04.2010
comment
ОК - Спасибо за отзыв. По крайней мере, я знаю, что не делаю чего-то совершенно выходящего за рамки. - person Vinnie; 14.04.2010
comment
ОК - теперь это работает. Раньше я называл каждую единицу персистентности в разных файлах одним и тем же именем. Я изменил тестовую единицу постоянства, чтобы иметь другое имя. Мне это кажется неправильным, но, возможно, это ограничение, о котором я не знал. - person Vinnie; 14.04.2010
comment
Я пошел и откопал код, где я делал это раньше, и у меня был другой блок сохранения, определенный для модульных тестов, хотя в моем тестовом файле persistence.xml также был определен тот же (не тестовый) блок сохранения. Хотя, наверное, в этом не было необходимости. Я думаю, что модульные тесты используют тестовую единицу постоянства при создании менеджера сущностей. - person Ken Liu; 14.04.2010

Неясно, куда вы поместили "второй" persistence.xml (тестовая версия), но вы должны поместить его в src/test/resources/META-INF. Тестовые ресурсы автоматически добавляются в путь к классам, настроенный Maven для ваших модульных тестов, и имеют приоритет над ресурсами, помещенными в src/main/resources.

person Pascal Thivent    schedule 14.04.2010