1

我使用 weblogic 10。它提供了一个 Oracle JDBC 驱动程序 10.2.0.2(在 weblogic home 的 server/lib 中)。

实际上,很久以前有人在工作中将 10.2.0.3 驱动程序放在实例 libext 文件夹中。

但在生产中,我们得到了一个 jdbc 驱动程序堆栈(空指针:O),通过逆向工程,我们似乎使用的是驱动程序 10.2.0.2。

我们知道我们可以更改 weblogic 的服务器/库中的驱动程序,但我想了解。

libext 不应该覆盖像 META-INF 库这样的服务器库覆盖 libext 吗?

顺便说一句,我们处于一个奇怪的情况: - 我们有 2 个 EAR,并且对于这 2 个完全相同的处理,有时一个会抛出 oracle 驱动程序空指针,而另一个不会 - 我想知道一只耳朵是否没有使用10.2.0.2,而另一个正在使用 10.2.0.3(我看到一个错误已修复,可能适合我们这个版本的问题)。- 我需要看起来更好,但乍一看,两只耳朵都使用在 weblogic JNDI 资源中设置的完全相同的数据源

任何的想法?

4

2 回答 2

1

任何人都不应该将任何东西放入 lib/ext 目录,尤其是 JDBC 驱动程序 JAR。该目录用于库扩展。我会立即从 lib/ext 中删除该 JAR。

正如你所说,如果 10.2.0.3 版本是一个错误修复,那么放置它的正确位置应该是 server/lib,而不是 lib/ext。

两个 EAR 意味着两个独立的服务器或两个不同的端口?我不确定为什么 WebLogic 会为相同的配置选择一个驱动程序而不是另一个驱动程序。

于 2010-06-09T09:35:54.287 回答
1

正如@duffymo 和 Oracle 文档所述:http: //download.oracle.com/docs/cd/E11035_01/wls100/jdbc_admin/third_party_drivers.html#wp1048361驱动程序位置应该是 server/lib。

您可以从每个 EAR 上的 JSP 运行它吗 - 这应该为您提供加载驱动程序的 jar 文件。

try {
  String candidate = "oracle.jdbc.driver.OracleDriver";
  Class clazz = Class.forName(candidate);
  java.security.ProtectionDomain dom = clazz.getProtectionDomain();
  java.security.CodeSource cs = dom.getCodeSource();
  java.net.URL url = cs.getLocation();
  out.println("<TITLE>" + candidate + "</TITLE></head><body>");
  out.println("Path for " + candidate + " = " + url.getFile());
} catch (Exception t) {
  t.printStackTrace(response.getWriter());
}
于 2010-06-09T10:38:29.003 回答