1

私はweblogic10を使用しています。これはOracleJDBCドライバー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.3を使用している間に10.2.0.2(このバージョンの問題に適合する可能性のあるバグが修正されました)。-見栄えを良くする必要がありますが、一見すると、両方の耳がweblogicJNDIリソースに設定されているまったく同じデータソースを使用しています。

何か案が?

4

2 に答える 2

1

lib/ext ディレクトリには、特に JDBC ドライバーの JAR など、何も入れてはなりません。そのディレクトリはライブラリ拡張用です。その JAR をすぐに lib/ext から削除します。

あなたが言うように、10.2.0.3 バージョンがバグ修正である場合、それを配置する正しい場所は lib/ext ではなく、server/lib になります。

2 つの EAR は、2 つの別個のサーバーまたは 2 つの異なるポートを意味しますか? 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 に答える