如何使用 gradle 为 openJPA 增强 类

How can I enhance classes for openJPA with gradle

我无法设置一个简单的测试程序 - 日食 - gradle(Eclipse Buildship 插件) - openjpa

当我尝试 运行 我的应用程序时出现此错误,当我调用 entityManager.persist(...) 方法时:

线程 "main" org.apache.openjpa.persistence.ArgumentException 中的异常:尝试将实例 "test.jpa.Person@27c6e487" 转换为 PersistenceCapable 失败。确保它已得到增强。 失败对象:test.jpa.Person@27c6e487

程序很简单,只有一个实体(Person.java)。 我的 persistence.xml 看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
    xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence <a href="http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" rel="nofollow noreferrer">http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd</a>">
    <persistence-unit name="ptest"
        transaction-type="RESOURCE_LOCAL">
    <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
        <properties>
            <property name="openjpa.ConnectionURL" value="jdbc:mysql://localhost:3306/ptest" />
            <property name="openjpa.ConnectionDriverName" value="com.mysql.jdbc.Driver" />
            <property name="openjpa.ConnectionUserName" value="..." />
            <property name="openjpa.ConnectionPassword" value="..." />
            <property name="openjpa.RuntimeUnenhancedClasses" value="unsupported" />
            <property name="openjpa.DynamicEnhancementAgent" value="false" />
            <property name="openjpa.Log" value="SQL=ERROR" />
            <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>
            <property name="openjpa.ConnectionFactoryProperties"
                value="PrettyPrint=true, PrettyPrintLineLength=72, PrintParameters=true, MaxActive=10, MaxIdle=5, MinIdle=2, MaxWait=60000" />
        </properties>
    </persistence-unit>
</persistence>
</pre>
我使用了 RuntimeUnenhancedClasses=unsupported 和 DynamicEnhancementAgent=false,因为它是 apache 推荐的。但是我已经尝试使用 "supported" 和 "true" 并且我仍然得到相同的错误(对于 openjpa 版本 2.1.0 - 对于更高版本我得到一个带有 "supported/true" 的 LinageError)。

我尝试过不同版本的jpa,目前使用的是2.4.2。

我已经找到 gradle 脚本来增强我的 class,我尝试了

  • 'at.schmutterer.oss.gradle:gradle-openjpa:0.2.0'

  • 'neva.openjpa'

还有一些,但我无法增强 class。

当然,我已经有一段时间了。我很感谢我能遵循的任何想法...

提前致谢!

以防其他人遇到同样的问题。我找到了解决这个问题的方法:

TomEE 附带 JPA 和所需的一切。 eclipse "gradle buildship" 插件可用于编译代码。因此,以下组件的组合对我来说非常有效:

  • apache-tomee-plus-7.0.2
  • tomcat v8.5服务器(指向apache-tommee安装)
  • 动态 Web 项目(使用动态 Web 模块 3.1)
  • Java 运行时环境 v1.8

gradle 脚本简化为:

apply plugin: 'war'

repositories {
    mavenCentral()
}

dependencies {
    providedCompile "javax:javaee-api:7.0"
}

我想它也适用于 TomEE 1.7.x 和 javaee-api:6.0,但我还没有尝试过。