2010-06-09 36 views
1

我使用weblogic 10. 它提供了一个Oracle JDBC驱动程序10.2.0.2(在weblogic home的server/lib中)。Weblogic服务器lib VS实例libext

实际上有人在工作中很久以前就在实例文件夹中放入了一个10.2.0.3驱动程序。

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

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

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

通过我们正处于一个奇怪的现象方式: - 我们有2个EAR,并在这些2完全相同的待遇,一个有时会扔Oracle驱动程序空指针,而另一个没有 - 我不知道一个耳朵不使用10.2.0.2,而另一个耳朵使用10.2.0.3(我看到一个修复的bug,可以适应我们这个版本的问题)。 - 我需要看起来更好,但乍一看,双耳使用完全相同的数据源设置在weblogic JNDI资源

任何想法?

回答

1

没有人应该把任何东西放到lib/ext目录中,特别是不要使用JDBC驱动程序JAR。该目录用于库扩展。我会立即从lib/ext中删除该JAR。

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

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

+0

其实我在10.2.0.3版本说明中的错误固定的看到: 4688156 NullPointerException异常可能,如果发生网络错误 - >我认为这是我们得到了什么? 同样的Weblogic文档本身是最高审计机关要更新我们可以用驱动程序替换server/lib中的文件 我完全不知道为什么它会使用一个驱动程序作为耳朵,另一个用于其他驱动程序......这是我发现的唯一可以解释为什么常见处理(初始化一个翻译缓存)可以在一个耳朵上工作,而不是在另一个耳机上工作(在应用程序启动时失败大约40%)... – 2010-06-09 10:12:15

+0

但实际上我的问题是不知道将jdbc驱动程序放在解压缩文件中是否是一种好的做法,但如果它应该重写weblogic提供的oracle jdbc驱动程序:) – 2010-06-09 11:29:14

+0

我想你有你的答案:“有时候”。我认为这不是一个非常令人满意的答案。从lib/ext中删除JAR - 除了Sun的扩展外,你不应该放置任何东西。对于不懂CLASSPATH或认为自己聪明的人来说,这并不意味着成为拐杖。 – duffymo 2010-06-09 13:29:59

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