Как определить тестовый источник данных для встроенного контейнера EJB

Я пытаюсь проверить свои EJB, используя встроенный контейнер EJB. В производстве я полагаюсь на источник данных JTA, настроенный на сервере приложений. Однако во время тестирования я хочу подключиться к другой БД (в памяти Derby).

Проблема в том, что я не могу понять, как сообщить контейнеру EJB переопределить источник данных JTA, определенный в моем файле persistence.xml (в файле src/main/resources/META-INF) с подключением к моей базе данных derby DB. Источник данных JTA определен в файле persistence.xml следующим образом:

jdbc/myDS

Попытка 1: использование теста persistence.xml

Я попытался создать тестовый файл persistence.xml (в src/test/resources/META-INF), который определяет:




 

Это вызывает беспокойство, потому что, когда я указываю контейнер EJB для использования тестируемого модуля с

Map properties = new HashMap();
properties.put(EJBContainer.MODULES, new File[] { new File("target/classes/") });
ec = EJBContainer.createEJBContainer(properties);

контейнер просто использует основной файл persistence.xml вместо моего тестового.

Попытка 2: Объединение основных и тестовых классов в один модуль с разнесением

Единственный способ, с помощью которого я могу сделать этот подход, - это использовать описанный подход здесь - скопировать классы для тестируемого модуля в отдельное место (например, target/ejb-testing-classes), а затем скопировать файл test persistence.xml поверх сверху, затем укажите это новое местоположение в контейнере EJB:

Map properties = new HashMap();
properties.put(EJBContainer.MODULES, new File[] { new File("target/ejb-testing-classes/") });
ec = EJBContainer.createEJBContainer(properties);

Но это кажется излишне неуклюжим. Это может также быть проблемой в будущем, если я пытаюсь развернуть предварительно упакованные модули (т.е. зависимости) в контейнере, так как мне нужно будет взорвать банки перед слиянием.

My Wish: свойства переопределения данных для контейнера EJB

I thought there might be additional properties that could be passed into the EJB container, but so far I can only find properties appropriate for openEJB or websphere. I am using embedded Glassfish to provide my embedded EJB container as that is the target platform. (I have now found the glassfish property - see Update #1, below)

Несомненно, все, кто пробовал тестировать EJB со встроенным контейнером EJB и источником данных, отличным от данных в производственной БД, столкнулись с этой проблемой. Даже этот парень просто отказался от этого момента и использовал встроенную базу данных по умолчанию, которая для меня не является вариантом.

Любая помощь приветствуется.

Update 1: I have found the list of properties that the Glassfish EJB container accepts, and at first it appears that I could use the following property

org.glassfish.ejb.embedded.glassfish.configuration.file

, чтобы определить источник данных в domain.xml и указать на него контейнер. Однако, согласно исходный код , это свойство игнорируется, если не установлено свойство installation.root, и это будет означать необходимость предварительно существующая установка стеклянной рыбы, чтобы запустить мои тесты. Это неприемлемо снизило бы переносимость моего проекта Maven. : (

Update 2: I have create a JIRA issue for this problem and recommended that properties be introduced for the glassfish EJB container which allows configuration of a JTA datasource.

9
nl ja de
Проведя неделю с этой проблемой. Большое спасибо Райан за хорошее описание! знак равно
добавлено автор kungcc, источник

2 ответы

Не может быть сделано со встроенной Glassfish.

Как я заметил в обновлении 1, чтобы сконфигурировать встроенный контейнер EJB с источником данных, вы должны:

  1. настройте файл domain.xml с новым источником данных
  2. настроить встроенный контейнер EJB для использования существующей установки Glassfish AS.
  3. настройте встроенный контейнер EJB для использования файла domain.xml с шага 1.

Таким образом (благодаря шагу 2) до свидания, переносимости. Но это «решение», с которым я должен идти, пока разработчики Glassfish не обратятся к моему запросу, чтобы настроить источники данных через свойство (см. Ссылку JIRA выше в вопросе).

1
добавлено

Для моих вещей это работает очень хорошо, когда вы не используете встроенный контейнер напрямую, но используйте для этого проект Arquillian. При использовании помощника ShrinkWrap я могу передать тест persistence.xml (а также другие заменители).

This shows a quite short example: https://community.jboss.org/thread/198239

НТН, Timo

0
добавлено
Спасибо, но я пытаюсь избежать Аркиллиан на данный момент - я уже нахожусь в моих глазных яблоках в рамках, хотя, возможно, однажды я это рассмотрю.
добавлено автор Ryan Bennetts, источник
pro.jvm
pro.jvm
3 503 участник(ов)

Сообщество разработчиков Java Scala Kotlin Groovy Clojure Чат для нач-их: @javastart Наш сайт: projvm.com projvm.ru Наш канал: @proJVM Вакансии: @jvmjobs Конфы: @jvmconf

Java & Co
Java & Co
2 370 участник(ов)

Можно обсуждать с матом и без всё, что касается жабы, вплоть до холиваров. НЕ ИМЕЕТ ОТНОШЕНИЯ К САЙТУ JAVARUSH.RU ПРАВИЛА - https://t.me/javarush/75723 Вакансии сюда - https://telegram.me/joinchat/B7IzvUCnfo6d8t3yIxKguQ По вопросам - @thedude

learn.java
learn.java
1 888 участник(ов)

Чат для начинающих и не только Статистика: https://combot.org/chat/-1001083535868 Основной чат - @jvmchat

Java Underground
Java Underground
169 участник(ов)

https://vk.com/javatutorial

Javanese Questions
Javanese Questions
109 участник(ов)

Чат предназначен для обмена знаниями строго в формате в вопрос-ответ. Тема — Java, Kotlin и Android. Вопрос должен быть предварительно прогуглен, понятно и грамотно сформулирован, помечен хэштегами. Ответ — тем более. Куски кода размером в несколько строк можно писать прямо здесь, для больших кусков кода стоит использовать http://gist.github.com/, http://pastebin.com/, https://codeshare.io/ или любой аналогичный сервис. В некоторых случаях можно прикреплять скриншоты. Стикеры и гифки запрещены. Дополнять и уточнять вопросы и ответы — редактированием исходного сообщения. Обсуждения должны приводить к редактированию вопроса/ответа и удаляться. По хештегам можно искать существующие вопросы и овтеты: #вопрос #ответ #git #generics #java #server #awt #javafx #swing #kotlin #anko #tornadofx #ktor #android #recyclerView #performance #arch #network #permissions #storage #async