2013-08-05 55 views
0

我正在通过使用DataNucleus作为我的JPA提供程序编写应用程序来学习JavaEE。我使用Eclipse IDE和Apache Tomcat服务器进行测试,因此我希望设置运行时增强功能以​​避免在每次测试部署时都使用字节编译类。使用Tomcat和Eclipse进行DataNucleus JPA运行时增强

documentation,我已将此添加到我的persistence.xml文件:

<property name="datanucleus.jpa.addClassTransformer" value="true"/> 

然而,我的课没有得到反正增强。该错误消息我得到的是:

org.datanucleus.exceptions.NucleusUserException: Found Meta-Data for 
class pbf.model.Message but this class is either not enhanced or you 
have multiple copies of jdo-api.jar in your CLASSPATH!! Make sure all 
persistable classes are enhanced before running DataNucleus and/or the 
CLASSPATH is correct. 

该文档是对阉的Java EE有些模糊,需要在命令行上指定javaagent了。如果是这样,我如何在Eclipse中使用Tomcat服务器来做到这一点?启动服务器时,我看不到自定义命令行和/或Java参数的选项。

我使用从maven存储库下载的datanucleus-accessplatform-jpa-rdbms v.3.3.0-release以及所有依赖项。

回答

1

Tomcat不是一个“真正的”JavaEE服务器AFAIK,只是一个servlet容器,在这种情况下并不实现JPA规范的JavaEE服务器方面(即使用DataNucleus在其问题中注册的JPA ClassTransformer ,或使用正确的构造函数等创建一个EMF)。因此,您应该通过JVM命令行使用标准Java方法来使用Java代理,这对任何支持使用代理变换器的JPA实现都是相同的。

+0

现在,Tomcat为org.datanucleus.state.JDOStateManager抱怨NoClassDefFoundError ,尽管它显然是在一个罐子里。如果我改变为“真正的”JavaEE服务器,它会有帮助吗? – Red

+0

是的,那么相关的lib文件夹中的datanucleus-core的deps也是?例如,jdo-api.jar – DataNucleus