在 weblogic 上使用 hibernate 時,幾乎都會發生此錯誤。
原因為 hibernate 在 parse Name Query 會出問題。
目前已知是 antlr 的問題,hibernate 需要 antlr.jar(2.7.6 or 2.7.7) 但是會跟 weblogic.jar 衝突。而通常 classpath 會先 load 到 weblogic server 內的 jar files. 所以hibernate 會認錯 class file。
方法一
修改 domain 下的 startWeblogic.bin (startWeblogic.sh) , 讓 weblogic 優先載入 antlr 。
由於此修改是針對所有的 container , 所以需要評估可能的影響。
在 ${SAVE_CLASSPATH} 修正載入順序。
方法二
修改 WEB-INF/weblogic.xml加入
<weblogic-web-app>
....
<container-descriptor>
<prefer-web-inf-classes>true</prefer-web-inf-classes>
</container-descriptor>
....
</weblogic-web-app>
讓 web project 內的 jar 優先使用。
方法三
在 Hibernate 相關檔案加入以下設定
<property name="hibernate.query.factory_class">org.hibernate.hql.classic.ClassicQueryTranslatorFactory</property>
此方法我還沒試成功過...
沒有留言:
張貼留言