1

我在将测试源中的 a 注入主源中的服务时遇到EntityManager问题Producer。目的是将这个库嵌入到另一个项目中,该项目将Producer使用它自己的PersistenceContextunitName 定义一个。如果我在主要来源中没有 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");
4

3 回答 3

0

我们遇到了类似的问题并降级到 Maven 3.0.5。

这个 Glassfish JIRA似乎讨论了这个问题。我似乎找不到讨论中提到的 Maven JIRA。我仍在寻找一种将最新的 Maven 与嵌入式 Glassfish 结合使用的方法,但运气不佳。

于 2014-02-28T14:41:53.710 回答
0

好吧,我根本没有看到问题^^

你有 src/test/resources/META-INF/beans.xml 吗?

你的测试看起来如何?Arquillian,还是您手动启动容器?您在类路径中是否有带有 MY_PU PersistenceUnit 的 persistence.xml?我可以在哪里查看示例项目的任何 github 左右?

我需要有关您的环境的更多信息来帮助您...

于 2012-03-28T18:26:21.793 回答
0

哎呀!我忘记了这个帖子。感谢所有提供意见的人。IIRC,我们最终放弃了嵌入式容器,转而使用 Arquillian 的外部 GF 容器。当时,我认为我们觉得它提供了一个更真实的测试环境,并避免了嵌入式容器的类加载问题。

于 2019-01-10T21:02:27.943 回答