2

使用EclipseLink (2.0.2)时,我在Weblogic (10.3.3)中看到了一个奇怪的行为。

这就是我所做的。我使用 Maven 编译一个使用JPA (1.0.2) 的项目。在这个项目中,模块“A”依赖于模块“B”。“B”包含一堆实体(javax.persistence.Entity)。但是“ persistence.xml ”在“A”中,其中“B”的所有实体都已注册。“B”作为可选包部署,“A”通过其 MANIFEST 引用它。

部署成功,但是当我运行应用程序并尝试保留实体时,我在“A”中收到上述错误。

以下操作之一将解决它:

  • 重启 weblogic 服务器
  • 更新模块 A 的 POM 文件并显式添加对模块 B 的依赖项。最初此依赖项不存在,因为模块 A 中的类接受“对象”并将其传递给 EntityManager(不是显式实体类类型)。添加此依赖项无论如何都不会更改 JAR 文件的清单。它只更新 JAR 文件的 META-INF 文件夹中的“maven”目录。我认为 weblogic 甚至都不关心这个文件夹。

我下载了 EclipseLinks 的源代码并调试了应用程序。似乎出现问题是因为“ org.eclipse.persistence.internal.sessions.AbstractSession ”类中的“描述符”集合字段没有实体的描述符,因此它不能将其识别为实体。

我认为重新启动服务器会更新该缓存。但是第二种解决方案呢?为什么这行得通?JAR 文件的 META-INF 目录中的“maven”目录是否为 weblogic 所知?

4

1 回答 1

0

听起来您的部署正确地部署了 B 模块并不是谎言。

您是使用容器管理的持久性单元还是应用程序管理?如果您使用的是应用程序管理的持久性单元,则必须在重新部署之前关闭 EntityManagerFactory,否则带有旧类的旧工厂将保留。

于 2012-07-12T14:49:28.837 回答