我试图在数据访问方法中实例化一个JDO注释和Datanucleus增强类,该方法通过自定义ODA驱动程序从BIRT报告中调用。
BIRT引擎 - > ODA驱动程序 - >数据访问类 - >新的JDOAnnotatedClass()
但是,当调用JDO注释类的构造函数时,DataNucleus注释阅读器会抛出ClassCastException。
Caused by: java.lang.ClassCastException: javax.jdo.annotations.IdentityType cannot be cast to javax.jdo.annotations.IdentityType
at org.datanucleus.api.jdo.metadata.JDOAnnotationReader.processClassAnnotations(JDOAnnotationReader.java:171)
at org.datanucleus.metadata.annotations.AbstractAnnotationReader.getMetaDataForClass(AbstractAnnotationReader.java:125)
at org.datanucleus.metadata.annotations.AnnotationManagerImpl.getMetaDataForClass(AnnotationManagerImpl.java:171)
at org.datanucleus.metadata.MetaDataManager.loadAnnotationsForClass(MetaDataManager.java:2459)
at org.datanucleus.metadata.MetaDataManager.addAnnotationsDataToClass(MetaDataManager.java:1729)
at org.datanucleus.metadata.ClassMetaData.populate(ClassMetaData.java:173)
at org.datanucleus.metadata.MetaDataManager$1.run(MetaDataManager.java:2508)
... 152 more
异常消息显示为典型的类加载问题。显然,类javax.jdo.annotations.IdentityType
被加载两次不同的类加载器,因此导致ClassCastException。
如何解决此问题?