【问题标题】:Weblogic server lib VS instance libextWeblogic 服务器 lib VS 实例 libext
【发布时间】:2010-06-09 09:28:05
【问题描述】:

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

其实工作人员很久以前就在实例 libext 文件夹中放了一个 10.2.0.3 驱动程序。

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

我们知道我们可以更改 weblogic 的 server/lib 中的驱动程序,但我想了解。

难道 libext 不应该覆盖服务器库,例如 META-INF 库会覆盖 libext?

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

有什么想法吗?

【问题讨论】:

    标签: jakarta-ee weblogic application-server


    【解决方案1】:

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

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

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

    【讨论】:

    • 实际上我在 10.2.0.3 的发行说明中看到了一个已修复的错误:如果发生网络错误,可能出现 4688156 NullPointerException -> 我认为这是我们得到的... Weblogic 文档本身也表示要更新driver 我们可以替换 server/lib 中的文件我根本不知道为什么它会使用一个驱动程序作为一个耳朵而另一个用于另一个......这是我发现的唯一可以解释为什么常见处理的东西(初始化一个翻译缓存)可以用一只耳朵而不是另一只耳朵工作(大约 40% 的应用程序启动失败)...
    • 但实际上我的问题是不知道将 jdbc 驱动程序放入 libext 是否是一个好习惯,但它是否应该覆盖 weblogic 提供的 oracle jdbc 驱动程序:)
    • 我想你有你的答案:“有时”。在我看来,这不是一个非常令人满意的答案。从 lib/ext 中删除 JAR - 除了来自 Sun 的扩展之外,您不应该在其中放置任何东西。对于那些不了解 CLASSPATH 或认为自己很聪明的人来说,它并不是一个拐杖。
    【解决方案2】:

    正如@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());
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-31
      • 1970-01-01
      • 2013-06-30
      • 1970-01-01
      相关资源
      最近更新 更多