使用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 所知?