实例化Oracle驱动程序会导致InvocationTargetException

时间:2009-05-26 14:39:11

标签: java oracle jdbc instantiation

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

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

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

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

2 个答案:

答案 0 :(得分:0)

如果没有更多信息,很难提供具体的建议;但是我有一个尝试通过本机OCI库连接的Oracle驱动程序的经验,无法找到系统上安装的那些库,并抛出InvocationTargetException。这一切都来自非常模糊的记忆,所以你的里程几乎肯定会有所不同。

已经有一段时间了,但是如果内存为我服务,我有一个连接URL配置不正确的情况,而OracleDriver(或其中一个包装器)通过一组可能的连接方法迭代,试图找到一个有效的连接方法。在正确配置URL的情况下,它从未进行OCI尝试(首先是瘦连接方法尝试),但如果连接URL配置错误,则瘦尝试将失败,导致OCI尝试,然后也失败因为主机上没有安装OCI客户端(导致InvocationTargetException。)

所以,有些事要检查:

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

答案 1 :(得分:0)

2个WAR?我想你的ojdbc.jar位于Web服务WAR的WEB-INF / lib中。

也许你的WAR在EAR中,所以你应该在MANIFEST.MF中引用驱动程序。

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