[WLS, FMW] Resolving conflicts with Classloaders - Example with Hibernate/Antlr

原文はこちら。
https://blogs.oracle.com/WebLogicServer/entry/resolving_conflicts_with_classloaders

Hibernateを使ったアプリケーションをWebLogic Server 9.2.x以後に載せ替えた際に、以下のような例外が発生することがあります。
EXCEPTION STACK TRACE: org.hibernate.QueryException: aggregate function expected before ( in SELECT [select distinct c, (select count(*) from ...
旧環境では同じクエリが正しく動作していたのですが…まず、クエリに構文上の問題があるようにも思えますが、この問題は実際のところ、Parserクライアントが衝突していることが原因で発生しています。解決策は、weblogic-application.xml(application.xmlに対するWebLogic Server固有のデプロイメントディスクリプタ拡張)中でprefer-application-packagesを利用し、どのパッケージをアプリケーションからロードし、システムのクラスローダーからロードしないかを定義する、というものです。
Oracle® Fusion Middleware Oracle WebLogic Server Webアプリケーション、サーブレット、JSPの開発 12c リリース1 (12.1.1)
weblogic.xmlデプロイメント記述子の要素
prefer-application-packages
http://docs.oracle.com/cd/E28613_01/web.1211/b65890/weblogic_xml.htm#WBAPP660
Oracle® Fusion Middleware Developing Web Applications, Servlets, and JSPs for Oracle WebLogic Server 12c Release 1 (12.1.1)
weblogic.xml Deployment Descriptor Elements
prefer-application-packages
http://docs.oracle.com/cd/E24329_01/web.1211/e21049/weblogic_xml.htm#WBAPP660
Oracle® Fusion Middleware Oracle WebLogic Serverアプリケーションの開発 12c リリース1 (12.1.1)
WebLogic Serverアプリケーションのクラスローディングについて
FilteringClassLoaderの構成
http://docs.oracle.com/cd/E28613_01/web.1211/b65893/classloading.htm#WLPRG315
Oracle® Fusion Middleware Developing Applications for Oracle WebLogic Server 12c Release 1 (12.1.1)
Understanding WebLogic Server Application Classloading
Configuring a FilteringClassLoader
http://docs.oracle.com/cd/E24329_01/web.1211/e24368/classloading.htm#WLPRG315
例えば…
<prefer-application-packages>
    <package-name>antlr.*</package-name>
</prefer-application-packages>
の場合、適切なAntlr(Javaベースのコンパイラジェネレータクライアント)のバージョンをアプリケーション内(WEB-INF/lib内)で利用可能にしています。このパーサーはHibernateで利用していたものです。なお、WEB-INFに存在するクラスをシステムのクラスローダーに優先してロードするため、prefer-web-inf-classesを必ずweblogic.xmlにtrue(デフォルト値はfalse)に設定しておく必要があります。
Oracle® Fusion Middleware Oracle WebLogic Server Webアプリケーション、サーブレット、JSPの開発 12c リリース1 (12.1.1)
weblogic.xmlデプロイメント記述子の要素
prefer-web-inf-classes
http://docs.oracle.com/cd/E28613_01/web.1211/b65890/weblogic_xml.htm#WBAPP659
Oracle® Fusion Middleware Developing Web Applications, Servlets, and JSPs for Oracle WebLogic Server 12c Release 1 (12.1.1)
weblogic.xml Deployment Descriptor Elements
prefer-web-inf-classes
http://docs.oracle.com/cd/E24329_01/web.1211/e21049/weblogic_xml.htm#WBAPP659
WebLogic Server 10.3.xはantlr 2.7.7(built on Mon Jun 11 12:19:48 EDT 2007  ImplVersion: 2.7.7)を同梱しています。
WebLogic Server 12c (12.1.1)はantlr 2.7.7.0(built on Fri Nov 4 19:42:39 EDT 2011  ImplVersion: 2.7.7.0)を同梱しています。全てのパッケージバージョンは<Oracle_Home>/modulesから確認できます。もしくは、以下のコマンドを実行しても確認できます。
java weblogic.utils.Versions
クラスローダーのフィルタリング設定にあたっては、Classloader Analysis Tool(CAT)もお役に立つかと思います。
Oracle® Fusion Middleware Oracle WebLogic Serverアプリケーションの開発 12c リリース1 (12.1.1)
WebLogic Serverアプリケーションのクラスローディングについて
クラスローダー分析ツール(CAT)の使用
http://docs.oracle.com/cd/E28613_01/web.1211/b65893/classloading.htm#BABHJGJJ
Oracle® Fusion Middleware Developing Applications for Oracle WebLogic Server 12c Release 1 (12.1.1)
Understanding WebLogic Server Application Classloading
Using the Classloader Analysis Tool (CAT)
http://docs.oracle.com/cd/E24329_01/web.1211/e24368/classloading.htm#WLPRG495

0 件のコメント:

コメントを投稿