我使用Eclipse Link,Glassfish和OracleDB开发了一些JSF / JPA应用程序。我的新主题是使用openJPA将应用程序移植到Tomcat。因此,我正在使用这项新技术测试一个简单易用的应用程序。这比我想象的要困难得多。我从这里学到了:
http://openjpa.apache.org/enhancement-with-eclipse.html
我必须增强我的实体。我尝试使用Eclipse插件,这部分是成功的,但几乎没有问题。在一些帖子中,我看到建议使用Ant方法,我目前正在尝试。我做了与链接中提到的相同的配置,但是我得到了一个错误的错误,我不知道这是什么问题:
C:\用户\ XXX \ EclipseWorkspace \ testJSF \ enhance.xml:26: org.apache.openjpa.util.MetaDataException:MetaDataFactory无法 配置(conf.newMetaDataFactoryInstance()返回null)。这个 可能意味着没有找到配置属性。确保这件事 你有一个META-INF / persistence.xml文件,它可以在你的文件中找到 classpath,或者您用于配置的属性文件 是可用的。如果您使用的是Ant,请参阅或 任务的嵌套元素的属性。 如果您的OpenJPA分发罐损坏,也可能发生这种情况 如果你的安全政策过于严格。
我的enhance.xml
<path id="enhance.cp">
<pathelement location="${basedir}${file.separator}${build.dir}"/>
<fileset dir="${basedir}${file.separator}${openjpa.libs}">
<include name="**/*.jar"/>
</fileset>
</path>
<property name="cp" refid="enhance.cp"/>
<target name="openjpa.libs.check" unless="openjpa.libs">
<fail message="Please set -Dopenjpa.libs in your builder configuration!" />
</target>
<target name="build.dir.check" unless="build.dir">
<fail message="Please set -Dbuild.dir in your builder configuration!" />
</target>
<target name="enhance" depends="openjpa.libs.check, build.dir.check">
<echo message="${cp}"/>
<taskdef name="openjpac" classname="org.apache.openjpa.ant.PCEnhancerTask">
<classpath refid="enhance.cp"/>
</taskdef>
<openjpac>
<classpath refid="enhance.cp"/>
</openjpac>
</target>
我不相信找不到persistence.xml,因为当我使用Eclipse插件时,我能够从数据库中提取数据。但后来我得到了这个错误:
实体“openJPA.Todo_”在级别“2”处被增强,但是当前 增强程度为“1.241.207”。
我不明白这意味着什么。我变得非常沮丧。如何使用Eclipse,Tomcat和OpenJpa获得一个有效的项目?
提前谢谢
史蒂夫
更新
在这里,我找到了一个教程,说明将persistence.xml复制到build文件夹中: http://openjpa.apache.org/enhancement-with-ant.html 我在构建文件夹中复制了带有persistence.xml的META-INF文件夹,现在描述的错误消失了。
但是增强器找不到我的持久类:
enhance:
[echo] C:\Users\XXX\EclipseWorkspace\testJSF\build;C:\Users\XXX\EclipseWorkspace\testJSF\lib\openjpa-all-2.2.0.jar
[openjpac] 12 TODO TRACE [Worker-119] openjpa.Runtime - Setting the following properties from "file:/C:/Users/XXX/EclipseWorkspace/testJSF/build/META-INF/persistence.xml" into configuration: {openjpa.ConnectionPassword=XXX, openjpa.ConnectionDriverName=oracle.jdbc.driver.OracleDriver, openjpa.MetaDataFactory=jpa(Types=openJPA.Todo_), openjpa.Log=DefaultLevel=TRACE, PersistenceVersion=2.0, openjpa.ConnectionUserName=XXX, openjpa.ConnectionURL=jdbc:oracle:thin:@XX.XXX.XXX.XXX:TEST, openjpa.Id=TODO}
[openjpac] 29 TODO TRACE [Worker-119] openjpa.Runtime - No cache marshaller found for id org.apache.openjpa.conf.MetaDataCacheMaintenance.
[openjpac] 454 TODO TRACE [Worker-119] openjpa.MetaData - Scanning resource "META-INF/orm.xml" for persistent types.
[openjpac] 461 TODO TRACE [Worker-119] openjpa.MetaData - The persistent unit root url is "null"
[openjpac] 461 TODO TRACE [Worker-119] openjpa.MetaData - parsePersistentTypeNames() found [openJPA.Todo_].
[openjpac] 461 TODO TRACE [Worker-119] openjpa.MetaData - Found 1 classes with metadata in 19 milliseconds.
[openjpac] 472 TODO INFO [Worker-119] openjpa.Tool - Enhancer running on type "openJPA.Todo_".
[openjpac] java.lang.IllegalArgumentException: java.lang.ClassNotFoundException: openJPA.Todo_
继续搜索!