【问题标题】:Instantiating Oracle Driver results in InvocationTargetException实例化 Oracle 驱动程序导致 InvocationTargetException
【发布时间】:2009-05-26 14:39:11
【问题描述】:

我有一个使用 oracle 数据库的简单 Web 服务。但是,当我在内部测试该服务时,它可以正常工作,但是,通过我的客户端(在同一台机器上但在不同的 WAR 中)调用 Web 服务会引发 invocationtargetexception。我终于发现这是实例化 OracleDriver 的问题。它根本不会抛出任何异常,所以我无法找出错误是什么。

谷歌搜索只提供了使用 oracle.jdbc.driver.OracleDriver 而不是 oracle.jdbc.OracleDriver 的解决方案,但这似乎没有解决任何问题。我正在使用的 jar 是 ojdbc14.jar,据我所知,它已正确包含在 Web 服务的类路径中......因为当我使用简单的 main 方法测试服务时它可以工作。

编辑: InvocationTargetException 由来自 Axis 服务器的 AxisFault 生成。 invocationtargetexception 是一个包装类,我尝试使用 .getCause() 提取异常的尝试总是返回 null。

我正在使用 jboss 部署服务,并将驱动程序 JAR 文件包含在库中用于源代码但不用于服务器。包含 /jboss/server/default/lib 中的驱动程序解决了它。

【问题讨论】:

  • 你能发布完整的例外吗?
  • 特别是什么异常导致了异常。
  • 问题说它不会引发异常 - 但 InvocationTargetException 是一个明显被实例化的异常。有关异常的更多详细信息肯定会很有用 - 请参阅下面的我的回答,以了解可能没有充分了解以提供实际帮助的总体猜测。

标签: java oracle jdbc instantiation


【解决方案1】:

2 战争?我想您的 ojdbc.jar 位于 Web 服务的 WAR 的 WEB-INF/lib 内。

也许您的 WAR 在 EAR 中,因此您应该在 MANIFEST.MF 中引用驱动程序。

更多信息:http://java.sun.com/j2ee/verified/packaging.html

【讨论】:

  • 是的,我的意思是两个不同的 EAR。我正在编写 Web 服务以及客户端。我将不得不查看清单;我看过它,但从来不知道它做了什么。
【解决方案2】:

没有更多信息,很难提供具体建议;然而,我有使用 Oracle 驱动程序的经验,该驱动程序尝试通过本机 OCI 库进行连接,无法找到系统上安装的那些库,并引发 InvocationTargetException。这一切都来自非常模糊的记忆,因此您的里程几乎肯定会有所不同。

已经有一段时间了,但如果我没记错的话,我遇到了一个连接 URL 配置不正确的情况,OracleDriver(或其包装器之一)迭代了一组可能的连接方法,试图找到一个有效的连接方法.在正确配置 URL 的情况下,它永远不会进行 OCI 尝试(首先尝试精简连接方法),但如果连接 URL 配置错误,则精简尝试将失败,导致 OCI 尝试,然后也失败因为主机上没有安装 OCI 客户端(导致 InvocationTargetException。)

所以,有一些事情要检查:

  1. 连接 URL 是否有效?如果您在两个地方使用相同的连接 URL,您确定两个进程都绑定到同一个 NIC 吗?如果它们绑定到不同的 NIC,则可能会导致连接异常,即使在同一主机上也是如此。
  2. 两种情况下的环境是否相同 - 如果 OCI 客户端正在您的开发环境中使用,它可能依赖于多个环境变量。如果这些环境变量在 servlet 容器运行的环境中的设置不同,我预计会有不同的行为。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-30
    • 2017-11-15
    • 2022-11-04
    • 1970-01-01
    • 2015-03-23
    • 2012-08-27
    • 2021-11-12
    • 1970-01-01
    相关资源
    最近更新 更多