【问题标题】:Is there Any Way to Enforce RuntimeUnenhancedClasses in EE Configuration有没有办法在 EE 配置中强制执行 RuntimeUnenhancedClasses
【发布时间】:2011-08-23 21:38:29
【问题描述】:

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

 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 运行一个以某种奇怪方式失败的单元测试,当我需要做的只是运行增强器时,我去挖掘我的代码寻找问题。

【问题讨论】:

    标签: openjpa openejb


    【解决方案1】:

    &lt;property name="openjpa.RuntimeUnenhancedClasses" value="unsupported" /&gt;META-INF/persistence.xml.

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

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

    【讨论】:

    • 这可行,但有一个有用的 OpenJPA 日志错误。不知道为什么上周没有使用@Rick 的建议...
    • 至于记录操作,OpenJPA 已经记录了 WARN,只是我的(很多?)测试期间的日志被过度使用,这就是我想念它的原因。我已经优化了我的解决方法来验证每个 JPA 实体都实现了 PersistenceCapable,所以问题已经解决了,但是为了帮助人们从 JPA 迁移到 EJB/JPA,我建议尊重 openjpa.xml 条目。
    【解决方案2】:

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

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

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

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

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

    【讨论】:

    • 感谢您的提示。其他属性肯定是从 openjpa.xml 中获取的,但是我遵循了您在 jvm 上的建议和设置,并且在 persistence.xml 中仍然产生子类实体。我认为类转换是 JPA 规范(9.5/9.5.1)的要求,恕我直言,我使用的任何提供商都没有“正确”(对我来说)。我实施的解决方案是在引导容器之前构建每个实体,并确保它们是 org.apache.openjpa.enhance.PersistenceCapable 的实例
    猜你喜欢
    • 1970-01-01
    • 2011-03-28
    • 1970-01-01
    • 2018-02-25
    • 2022-10-06
    • 2010-09-19
    • 2011-07-29
    • 2022-11-02
    • 2017-12-01
    相关资源
    最近更新 更多