java.util.ServiceConfigurationError: org.firebirdsql.gds.impl.GDSFactoryPlugin: 从 Oracle 中的 Java 存储过程读取配置文件时出错

问题描述

我将 loadjava 工具 Jaybird-3.0.9-JDK_1.8 JDBC 驱动程序和我的 java 类加载到 Oracle 数据库。所有的类都解决了。当我第一次从 Oracle 运行 Java 存储过程时

错误 ORA-29532:Java 调用被未捕获的 Java 异常终止:java.util.ServiceConfigurationError:org.firebirdsql.gds.impl.GDSFactoryPlugin:读取配置文件时出错

Java 应用程序正在创建连接时。

具有相同 Oracle 连接的下一个调用导致

ORA-29532:Java 调用被未捕获的 Java 异常终止:java.lang.NoClassDefFoundError

重新连接后,我再次收到 ServiceConfigurationError 异常。 相同的代码在java中运行良好。有什么好主意吗?非常感谢

解决方法

Jaybird 通过 java.util.ServiceLoader 将其某些组件加载为插件,如果这不起作用,它将回退到固定的插件列表。不幸的是,在这种情况下,在 Jaybird 没有预料到的地方抛出了一个 ServiceConfigurationError,因此没有处理这个错误,结果类 GDSFactory 的加载被终止(这导致随后的 NoClassDefFoundError)。

根据您的问题,我不确切知道此故障是什么,但猜测是 loadjava 或 Oracle 类加载器似乎损坏了服务定义文件 (META-INF/services/org.firebirdsql.gds.impl.GDSFactoryPlugin),否则会导致异常读取时。

我创建了错误 JDBC-636,以便在 Jaybird 3.0.10、4.0.2 和即将推出的 Jaybird 5 中处理此异常。

Jaybird 3.0.10 和 4.0.2 已经发布,所以请使用这些版本而不是下面的快照。

只要 Jaybird 3.0.10 和 4.0.2 尚未发布,您可以尝试使用 Sonatype 快照存储库中的 3.0.10-SNAPSHOT 或 4.0.2.java8-SNAPSHOT (https://oss.sonatype.org/content/repositories/snapshots ) 使用 Maven 或 Gradle。或者,您可以直接从快照存储库下载 jar(注意:部署较新的快照后,这些链接将断开):