Glassfish 3.1.2.2 JPA问题与EclipseLink 2.4.2升级解决方案

需积分: 0 0 下载量 51 浏览量 更新于2024-08-04 收藏 250KB DOCX 举报
本文档主要讨论了在 Glassfish 3.1.2.2 环境中使用 EclipseLink JPA 遇到的问题以及解决方法。问题集中在 TcUser 实体类中,当尝试注入多个字段(如 company 等)或者处理额外的 collection 关系时,JPA 注入过程中未能获取到这些字段的值,导致运行时抛出空指针异常 (NPE)。 问题产生的原因被推测可能是 Glassfish 的 ClassLoader 在加载对象时正确,但在 JPA 进行元数据分析时,由于 JPAmetadata 是基于 jar 文件中的 tcUser.class 来确定字段的,而这些 jar 文件中的tcUser 类定义可能不完整,没有包含所有所需的字段,从而导致 SQL 查询语句中的字段缺失。 为了解决这个问题,作者提供了以下步骤: 1. 找到 Glassfish 下的 modules 路径,筛选出所有以 "org.eclipse.persistence.*.jar" 匹配的 EclipseLink 相关文件。这可能包括旧版本的 JAR 文件,如 2.4.2 版本。 2. 将旧版 EclipseLink JAR 替换为较新版本,建议使用 2.5 版本或更新。可以从 EclipseLink 官网下载:<http://www.eclipse.org/eclipselink/downloads/index.php>。确保下载的是 OSGI bundles 文件,因为 Glassfish 可能需要特定的打包格式。 3. 解压新版本的 EclipseLink,并将其中与 Glassfish 需要相关的 org.eclipse.persistence.*.jar 文件复制到 Glassfish 的 modules 路径下。根据经验,至少需要复制 8 个或更多的相关 JAR 文件,具体取决于 Glassfish 的配置需求。 4. 在进行这些操作之前,确保 Glassfish 已经关闭,以防缓存冲突。重启 Glassfish 并清除 domain 下的 osgi-cachefolder 路径下的 felix 目录,以清理旧的缓存。 5. 新的 EclipseLink JAR 文件应存储在一个共享位置,例如 "\\192.168.204.10\TCCI_File\軟體處\Public\Java\Other\eclipselink\",便于管理。 遵循以上步骤后,理论上应该能够解决 Glassfish 3.1.2.2 上的 JPA 问题,使得 TcUser 类及相关关系能够在运行时得到正确的注入和处理。请注意,这个解决方案可能因实际情况和 Glassfish 版本的不同而有所调整,所以在实施时需根据具体环境进行适当验证。