有没有办法在EE配置中强制运行RuntimeUnenhancedClasses

时间:2011-08-23 21:38:29

标签: openjpa openejb

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

 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强制执行RuntimeUnenhancedClasses选项,就像在SE配置中一样?

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

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

2 个答案:

答案 0 :(得分:0)

听起来无论出于什么原因,在容器中运行时都不会拾取您的属性。

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

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

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

  3. 转移到&gt; = 2.0.0的OpenJPA版本。 RuntimeUnenhancedClasses已作为该版本中的默认行为关闭。

答案 1 :(得分:0)

放置<property name="openjpa.RuntimeUnenhancedClasses" value="unsupported" /> META-INF / persistence.xml。

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

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