Weblogic服务器lib VS实例libext

时间:2010-06-09 09:28:06

标签: java-ee weblogic application-server

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

实际上有人在很久以前就把10.2.0.3驱动程序放在了libext文件夹中。

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

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

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

顺便说一下,我们处于一种奇怪的境地: - 我们有2个EAR,对于那些2中的完全相同的处理,一个有时会抛出oracle驱动程序nullpointer而另一个不会 - 我想知道是否有一只耳朵没有使用10.2.0.2而另一只耳朵使用的是10.2.0.3(我看到修复过的错误可能适合我们这个版本的问题)。 - 我需要看起来更好但乍一看,两个耳朵使用weblogic JNDI资源中完全相同的数据源集

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

没有人应该将任何内容放入lib / ext目录,尤其是JDBC驱动程序JAR。该目录用于库扩展。我会立即从lib / ext中删除那个JAR。

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

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

答案 1 :(得分: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());
}