WebLogic Server 12c上でHibernateを使う
WebLogicでHibernateを使った時にはまったことをメモしておきます。
利用している環境はWebLogic Server 12c。
発生したエラーはClassNotFound。
org.hibernate.QueryException: ClassNotFoundException: org.hibernate.hql.ast.HqlToken [from 自分で作ったクラス]
解決方法はデプロイしようとしているのがwarファイルだったので、weblogic.xmlを開いてWEB-INF/lib以下を優先するように設定。
1.WEB-INF/lib以下全部を優先する場合
<weblogic-web-app>
(略)
<container-descriptor>
<prefer-web-inf-classes>true</prefer-web-inf-classes>
</container-descriptor>
(略)
</weblogic-web-app>
2.特定のjarのみWEB-INF/lib以下を優先する場合 今回使っているのはantlr-2.7.6.jarでした。
<?xml version="1.0" encoding="UTF-8"?>
<weblogic-web-app>
(略)
<container-descriptor>
<prefer-web-inf-classes>false</prefer-web-inf-classes>
<prefer-application-packages>
<package-name>antlr.*</package-name>
</prefer-application-packages>
</container-descriptor>
(略)
</weblogic-web-app>
なるべくJava EEの標準ライブラリでやった方がこの手の問題は絶対楽だな。
参考サイト
https://blogs.oracle.com/WebLogicServer/entry/resolving_conflicts_with_classloaders http://stackoverflow.com/questions/2702266/classnotfoundexception-hqltoken-when-running-in-weblogic http://docs.oracle.com/cd/E24329_01/web.1211/e24368/classloading.htm#i1098467 Log4jとantlrはWebLogicのマニュアルのサンプルに載るくらい皆はまってるってことだな。