Datanucleus Enhancer意外异常

时间:2014-02-12 19:45:24

标签: eclipse google-app-engine datanucleus

我想在App Engine中使用Datanucleus JDO 3.2.8版以避免RDBMS字符串出现bigint问题(参见https://stackoverflow.com/questions/21588107/datanucleus-jdo-map-string-to-mysql-type-bigint-in-app-engine

我从这里http://www.datanucleus.org/products/accessplatform/datastores/appengine.html下载了Datanucleus App Engine插件,并在[AppEngine SDK] / lib / opt / tools / datanucleus和[AppEngine SDK] / lib / opt / user / datanucleus中创建了一个文件夹'v3'我把版本3.2.8中的插件,datanucleus-core,datanucleus rdbms,jdo api jar以及那里的“jdo-api-3.0.1.jar”放在了v2文件夹中 我还在项目属性中从v2切换到v3,项目WEB-INF / lib /包含新的jar。

当我尝试增强Datanucleus Enhancer 3.2.8类时。使用以下日志抛出意外异常:

java.lang.RuntimeException: Unexpected exception
    at com.google.appengine.tools.enhancer.Enhancer.execute(Enhancer.java:76)
    at com.google.appengine.tools.enhancer.Enhance.<init>(Enhance.java:71)
    at com.google.appengine.tools.enhancer.Enhance.main(Enhance.java:51)
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at com.google.appengine.tools.enhancer.Enhancer.execute(Enhancer.java:74)
    ... 2 more
Caused by: java.lang.NoSuchFieldError: updateLock
    at org.datanucleus.api.jdo.metadata.JDOMetaDataManager.getMetaDataForClassInternal(JDOMetaDataManager.java:440)
    at org.datanucleus.metadata.MetaDataManager.getMetaDataForClass(MetaDataManager.java:1488)
    at org.datanucleus.metadata.MetaDataManager.loadClasses(MetaDataManager.java:545)
    at org.datanucleus.enhancer.DataNucleusEnhancer.getFileMetadataForInput(DataNucleusEnhancer.java:737)
    at org.datanucleus.enhancer.DataNucleusEnhancer.enhance(DataNucleusEnhancer.java:513)
    at org.datanucleus.enhancer.DataNucleusEnhancer.main(DataNucleusEnhancer.java:1281)
    ... 7 more

我错过了什么才能让它发挥作用?非常感谢你的帮助

1 个答案:

答案 0 :(得分:1)

问题是由于您在CLASSPATH中存在不一致/不兼容的DataNucleus jar版本。消息说MetaDataManager中不存在“updateLock”字段。因此,您在某个地方的CLASSPATH中有一些旧版本的datanucleus-core.jar,无论是在您的项目中,还是在这个“GAE Eclipse插件”的配置中