我使用的是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资源中完全相同的数据源集
有什么想法吗?
答案 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());
}