0

我有一个使用 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 中包含驱动程序解决了它。

4

2 回答 2

0

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

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

因此,需要检查一些事项:

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

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

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

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

于 2009-05-26T15:17:25.533 回答