java - weblogic下使用自定义类加载器加载eclipselink域模型

标签 java eclipselink classloader

我编写了一个自定义类加载器,以便能够为更新过程的每个步骤动态加载域模型。在更新的每个步骤中都会创建一个新线程,以确保不仅 contextClassloader 而且当前的类加载器也指向我自己的类加载器。

这听起来有点复杂,但效果很好。

最新的域模型作为静态依赖项添加到项目中,所有以前的域模型作为 jar 添加到资源文件夹中。自定义类加载器从这些 jar 文件加载域类。

所有域类和 eclipselink 类均由我的类加载器加载。但是我仍然遇到以下异常,我不太明白,为什么?

Exception [EclipseLink-59] (Eclipse Persistence Services - 2.1.3.v20110304-r9073): org.eclipse.persistence.exceptions.DescriptorException
Exception Description: The instance variable [hospitalization] is not defined in the domain class [example.role.Patient], or it is not accessible.
Internal Exception: java.lang.NoSuchFieldException: hospitalization
Mapping: org.eclipse.persistence.mappings.DirectToFieldMapping[hospitalization-->Patient.hospitalization]
Descriptor: RelationalDescriptor(example.role.Patient --> [DatabaseTable(Role), DatabaseTable(Patient)])

域类由我的类加载器加载,并且没有缺少的hospitalization字段。没关系,这就是它应该如何工作,但不知何故 eclipselink 加载静态链接到项目的不正确的域版本并从中加载字段名称。

我已经开始深入研究 eclipselink 代码,但尤其是这个映射部分并不是很简单。

最佳答案

Eclipselink 使用 ASM 直接从类的字节表示构建元数据。它通过 getResourceAsStream(className) 加载类。我的类加载器已将这些调用委托(delegate)给父类加载器,这就是为什么始终使用静态链接域的原因。

关于java - weblogic下使用自定义类加载器加载eclipselink域模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18616699/

相关文章:

java - "new"在 Java w.r.t. 中做了什么?类加载器?

java - 如何在 Jfreechart 中进行鼠标跟踪?

java - 架构和项目组织

java - 适合新手的 Jaxb 编码

performance - PostgreSQL-管理用户的联系人-单向或双向关系更好吗?

java - 使用 EclipseLink 自定义 JPA 字段名称映射

java - 从类读取资源与从类加载器读取资源有什么区别?

java - 使用 DFS 迭代克隆图形时出现 NullPointerException

java - 使用 JPA 从子对象级联到父对象

java - 将文件夹添加到 RCP 产品中的类路径