我在将测试源中的 a 注入主源中的服务时遇到EntityManager
问题Producer
。目的是将这个库嵌入到另一个项目中,该项目将Producer
使用它自己的PersistenceContext
unitName 定义一个。如果我在主要来源中没有 Producer,我会收到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
目录并在打包阶段之前将其删除。这有效,但它很笨拙。我尝试更改了surefire插件中 的<useSystemClassLoader>
和参数,但没有成功。<useManifestOnlyJar>
还有其他方法吗?
我的环境
- Maven:2.2.1
- 万无一失:2.4.2
- glassfish 嵌入式全部: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");