首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JDO + datanucleus API增强

JDO + datanucleus API增强
EN

Stack Overflow用户
提问于 2015-01-01 01:31:43
回答 2查看 217关注 0票数 0

我希望动态加载不在类路径中的XML元数据文件(XML元数据文件将在启动我的应用程序后生成)。我想我可以调用这个方法

代码语言:javascript
复制
MetaDataManager.registerFile(java.lang.String fileURLString, FileMetaData filemd, ClassLoaderResolver clr)

然后,我尝试了API增强,所以我添加了以下几行:

代码语言:javascript
复制
        JDOEnhancer enhancer = JDOHelper.getEnhancer();
        enhancer.setVerbose(true);          
        enhancer.addClasses(ClassToPersist.class.getName()).enhance();
        getClass().getClassLoader().loadClass(ClassToPersist.class.getName());

类路径中包含以下jars : datanucleus-api-jdo.jar、datanucleus-connectionpool.jar、datanucleus-core.jar、datanucleus-rdbms.jar、jdo-api.jar、asm.jar。但是当我启动我的应用程序时,我得到了这样的异常:

代码语言:javascript
复制
Caused by: mypackage.MyException:
org.datanucleus.api.jdo.exceptions.ClassNotPersistenceCapableException: The class "mypackage.ClassToPersist" is not persistable. This means that it either hasnt been enhanced, or that the enhanced version of the file is not in the CLASSPATH (or is hidden by an unenhanced version), or the Meta-Data/annotations for the class are not found.

你知道怎么解决这个问题吗?PS:我还注意到方法enhance返回0,这表示类没有得到增强(我们可以排除其他选项)

谢谢

EN

回答 2

Stack Overflow用户

发布于 2015-01-01 02:33:33

因此,您对loadClass的调用已经加载了未增强的类(因为它可能是为了执行增强而加载的),并且您没有遵循http://www.datanucleus.org/documentation/development/dynamic_class_metadata_enhance_runtime.html提供的教程

票数 0
EN

Stack Overflow用户

发布于 2015-01-11 07:49:02

我想我找到了一个简单的方法来解决这个问题。在运行时,我创建了一个jar,其中包含更新的元数据文件META-INF/package.jdo。然后我将这个jar添加到类路径中,就像使用这个hacks所描述的here一样,我不需要重新增强我的类,因为它在编译后得到了增强。

(但作为参考,我必须调用JDOEnhancer.addFiles()来增强我的类。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27724363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档