2014-02-12 3 views
2

Я хочу использовать DataNucleus JDO версию 3.2.8 с App Engine, чтобы избежать RDBMS строку BigInt проблемы (см https://stackoverflow.com/questions/21588107/datanucleus-jdo-map-string-to-mysql-type-bigint-in-app-engine)DataNucleus Enhancer Неожиданное исключение

Я скачал DataNucleus App Engine плагин здесь http://www.datanucleus.org/products/accessplatform/datastores/appengine.html и создали «v3 папку 'в [AppEngine SDK]/lib/opt/tools/datanucleus и [AppEngine SDK]/lib/opt/user/datanucleus, где я добавляю плагин, datanucleus-core, datanucleus rdbms, jdo api jars в версии 3.2.8, а также как «jdo-api-3.0.1.jar», который был также в папке v2 Я также переключился с v2 на v3 в свойствах проекта, а проект WEB-INF/lib/содержит новые банки.

, когда я пытаюсь улучшить классы 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 

Что мне не хватает, чтобы заставить его работать? Большое спасибо за помощь.

+0

с использованием смешанных/непоследовательных версий банок. Если в CLASSPATH нет банок 3.0/3.1 DN, все 3.2 должны быть согласованными (например, последними) – DataNucleus

+0

Я не вижу, где я использую разные версии. Я заменил «jdo-api-3.0.1.jar» на «jdo-api-3.1-rc1.jar сейчас и проблема все еще существует. Я думал, что плагин App Engine 3 предназначен для использования с Datanucleus 3.2/3.3, который реализует jdo 3.1 ? – Philipp

+0

org.datanucleus.api.jdo.metadata.JDOMetaDataManager.getMetaDataForClassInternal NoSuchFieldError, поэтому суперкласс (в datanucleus-core) из какого-то более старого варианта. QED. Где он есть, только вы можете видеть. – DataNucleus

ответ

1

Проблема заключается в том, что у вас есть несогласованные/несовместимые версии банок DataNucleus в CLASSPATH. В сообщении говорится, что поле «updateLock» отсутствует в MetaDataManager. Следовательно, у вас есть какая-то старая версия datanucleus-core.jar, присутствующая в CLASSPATH где-то в вашем проекте или в конфигурации этого «Плагина GAE Eclipse»

Смежные вопросы