1

我只花了半个小时调试一些没有损坏的新代码,因为我忘记检查(再次!)我的日志中是否有这条可怕的消息:

 WARN   openjpa.Enhance - Creating subclass for ...

我在 OpenEJB 3.2 快照构建、Java 1.6.0_25 和 Eclipse Helios 中运行 OpenJPA 2.1.0。我的实体使用 ant PCEnhancerTask 进行了增强。

我的 META-INF/openjpa.xml 包含

 <property name="openjpa.RuntimeUnenhancedClasses" value="unsupported" />
 <property name="openjpa.DynamicEnhancementAgent" value="false" />

无论如何,这个 EE 配置是否有让 OpenJPA 像在 SE 配置中那样强制执行 RuntimeUnenhancedClasses 选项?

怀疑我的“真正”问题源于 Eclipse svn 更新,该更新有时会触及我的 JPA 实体源,导致构建覆盖我的增强类。

令人沮丧的是,我从 IDE 运行单元测试的频率以某种奇怪的方式失败,当我需要做的只是运行增强器时,我会去挖掘代码寻找问题。

4

2 回答 2

0

听起来无论出于何种原因,您的属性在容器中运行时都没有被拾取。

我有许多可能的解决方案:

  1. 尝试在 META-INF/persistence.xml 中设置您的属性。我假设您在 openjpa.xml 文件中有这些属性是有原因的,但这可能有助于我们找出真正的问题所在。

  2. 将 -Dopenjpa.RuntimeUnenhancedClasses=false 设置为 JVM 属性。这将适用于给定 JVM 的所有 PU。

  3. 移至 >= 2.0.0 的 OpenJPA 版本。RuntimeUnenhancedClasses 在该版本中作为默认行为被关闭。

于 2011-09-06T15:39:48.603 回答
0

<property name="openjpa.RuntimeUnenhancedClasses" value="unsupported" />M​​ETA-INF/persistence.xml。

看起来我们正在调试级别(可能应该是信息级别)记录此操作,但 OpenEJB 会将该属性设置为默认值,就像在 OpenJPA 1.x 中一样,以便使用 OpenEJB 3.1.x/OpenJPA 1 的应用程序.x 在 3.2.x 中无需修改仍可工作。如果该属性已在 persistence.xml 中设置,它将永远不会被覆盖,因此将其设置在那里会产生您想要的效果。

对未来某个时候如何在同一条船上拯救其他人的建议持开放态度。似乎要么查看 openjpa.xml 文件并查看已经设置的属性,要么在 info 上发出日志消息 - 或两者兼而有之。

于 2011-09-13T17:40:13.907 回答