Проблема пути к классу CDI с использованием maven и встроенной стеклянной рыбы - PullRequest
1 голос
/ 27 марта 2012

У меня проблема с введением EntityManager из Producer в тестовом источнике в службу в основном источнике.Намерение состоит в том, чтобы встроить эту библиотеку в другой проект, где проект определит Producer, используя свое собственное PersistenceContext unitName.Если у меня нет источника в основных источниках, я получаю ошибку Caused by: java.lang.IllegalStateException: Unable to retrieve EntityManagerFactory for unitName MY_PU.

Например:

/** src/main/java/org/sample/service */
@Stateless
public class MyBean {
    @Inject
    @MyCustomQualifier
    private EntityManager em;
}


/** src/test/java/org/sample/service */
public class EntityManagerProducer {
    @Produces
    @MyCustomQualifier
    @PersistenceContext(unitName = "MY_PU")
    private EntityManager em;
}

Чтобы протестировать сервис, мне нужноиспользуйте плагин maven ant, чтобы переместить файл * .class в каталог target/classes и удалить его до фазы пакета.Это работает, но это грязно.Я попытался изменить параметры <useSystemClassLoader> и <useManifestOnlyJar> в плагине surefire, но безуспешно.

Есть ли другой способ?

Мое окружение

  • Maven: 2.2.1
  • Surefire: 2.4.2
  • glassfish-embedded-all: 3.1.1

РЕДАКТИРОВАТЬ

beans.xml существует в обоих (test / main) / resources / META-INF

Я запускаю контейнер GF следующим образом.

Map<String, Object> properties = new HashMap<String, Object>();
properties.put(EJBContainer.MODULES, new File[]{new File("target/classes"), new File("target/test-classes")});
EJBContainer ejbContainer = EJBContainer.createEJBContainer(properties);
Context ctx = ejbContainer.getContext();
MyBean service = ctx.lookup("java:global/ejb-app/classes/MyBean");

Ответы [ 3 ]

0 голосов
/ 28 февраля 2014

У нас была похожая проблема, и мы понизили ее до Maven 3.0.5.

Похоже, проблема обсуждается в этой Glassfish JIRA . Я не мог найти Maven JIRA, который упоминается в обсуждении. Я все еще ищу способ использовать последнюю версию Maven со встроенным Glassfish, но мне не повезло.

0 голосов
/ 11 января 2019

Eeesh! Я забыл об этом посте. Спасибо всем, кто внес свой вклад. IIRC, мы закончили тем, что бросили встроенный контейнер в пользу внешнего контейнера GF, используя Arquillian. В то время, я думаю, мы чувствовали, что это обеспечивает более реалистичную среду тестирования и позволяет избежать проблем с загрузкой классов со встроенным контейнером.

0 голосов
/ 28 марта 2012

Ну, я вообще не вижу проблемы ^^

У вас есть src / test / resources / META-INF / beans.xml?

А как проходит ваш тест?выглядит как?Arquillian, или вы запускаете контейнер вручную?Есть ли у вас файл persistence.xml с PersistenceUnit MY_PU в пути к классам?Любой Github или около того, где я могу посмотреть пример проекта?

Мне нужно немного больше информации о вашей среде, чтобы помочь вам ...

...