У меня проблема с введением 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");