【发布时间】:2014-12-31 17:31:42
【问题描述】:
我想动态加载不在类路径中的 XML 元数据文件(启动我的应用程序后将生成 XML 元数据文件)。 我以为我可以调用该方法
MetaDataManager.registerFile(java.lang.String fileURLString, FileMetaData filemd, ClassLoaderResolver clr)
然后,我尝试了 API 增强,所以我添加了以下几行:
JDOEnhancer enhancer = JDOHelper.getEnhancer();
enhancer.setVerbose(true);
enhancer.addClasses(ClassToPersist.class.getName()).enhance();
getClass().getClassLoader().loadClass(ClassToPersist.class.getName());
类路径中包含以下 jar:datanucleus-api-jdo.jar、datanucleus-connectionpool.jar、datanucleus-core.jar、datanucleus-rdbms.jar、jdo-api.jar、asm.jar。 但是当我启动我的应用程序时,我得到了这个异常:
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:我还注意到方法enhanced返回0,表示该类尚未增强(我们可以排除其他选项)
谢谢
【问题讨论】:
-
如果某些内容没有得到增强,我相信日志会告诉你。你当时确实看过日志? DataNucleus 也很长时间不需要 asm.jar 和 datanucleus-connectionpool.jar 了
-
感谢您的提示。我会在星期一检查日志(我添加了 asm “作为预防措施”,删除它会很棒)
标签: jdo datanucleus