我花了半个小时调试一些没有被破坏的新代码,因为我忘了检查(再次!)我的日志中这个可怕的消息:
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中运行单元测试以某种奇怪的方式失败,并且当我需要做的只是运行增强器时,我会挖掘我的代码以寻找问题。
答案 0 :(得分:0)
听起来无论出于什么原因,在容器中运行时都不会拾取您的属性。
我有很多可能的解决方案:
尝试在META-INF / persistence.xml中设置属性。我假设你在openjpa.xml文件中有这些属性是有原因的,但它可能有助于我们找出真正的问题所在。
将-Dopenjpa.RuntimeUnenhancedClasses = false设置为JVM属性。这将适用于给定JVM的所有PU。
转移到&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上发出日志消息就可以了 - 或者两者兼而有之。