環境:
weblogic10.3.5,hibernate3,GGTS(groovy/grails tools suite);
出現這問題是由於該項目是從weblogic8.1.6下移植到weblogic10.3.5;其中在tomcat中調用過;linux
上網百度一把:說是hibernate.query.factory_class改爲這個org.hibernate.hql.classic.ClassicQueryTranslatorFactory就沒有這個問題;發佈到weblogic了沒有問題;web
可是多選刪除功能沒法使用;因而又百度一把:(參考這個文檔http://wangzhen-1104.iteye.com/blog/221444)緣由以下:tomcat
Hibernate3.0 採用新的基於ANTLR的HQL/SQL查詢翻譯器,經過配置hibernate.query.factory_class屬性:當設置爲org.hibernate.hql.ast.ASTQueryTranslatorFactory 選擇Hibernate3.0的查詢翻譯器,可使用批量更新和刪除功能;而設置爲org.hibernate.hql.classic.ClassicQueryTranslatorFactory 選擇Hibernate2.x的查詢翻譯器時,不能批量更新和刪除;dom
可是我代碼的功能多數使用到了批量刪除和更新,因此不可能去更改代碼;只能選擇3.0;學習
再繼續看:「在hibernate3中須要用到antlr,然而這個包在weblogic.jar中已經包含了antlr類庫,就會產生一些類加載的錯誤,沒法找到在war或者ear中的hibernate3.jar。」這個項目原來是weblogic8.1.6,我查看原來的代碼裏,是一個weblogic.jar的,打開這個jar中,裏邊是antlr類庫的,weblogic8.1.6的weblogic.jar也有;項目中沒有antlr-2.7.7.jar因此在原來的項目中,若是放在tomcat下,有weblogic.jar的支持,使用hibernate3是沒有問題的,放到weblogic8.1.6也不會有問題,由於8.1.6的weblogic.jar中也包含了antlr的相關類庫;ui
因而我想過幾個辦法:(不就是沒有antlr相關類庫嘛)google
一、直接把weblogic10.3.5的weblogic.jar直接換個8.1.6的,不成功就不說了,只能說明是個初級猿(直接說版本不對);spa
二、在項目中加入antlr-2.7.7.jar而後去掉含有antlr類庫的weblogic.jar,也不行;(說明這個antlr是在weblogic啓動時就須要加載的,而不是部署項目的時候)hibernate
由於weblogic10.3.5中沒有antlr類庫,因此參考文檔中的第二種方法不符合個人實際狀況;因此也沒有參考第三狀況;翻譯
百度無果,果斷google之,很快http://xuejiangtao.iteye.com/blog/1195897映入個人眼簾;weblogic版本相同,果斷試之,方法和前邊一遍文章的最後一種方法一致,你們都這麼說,我只能相信了;
三、將工程裏的antlr-2.7.7.jar拷貝到weblogic的wlserver_10.3.5\server\lib文件夾下面,在domains\base_domain\bin裏找到startWebLogic.cmd(注意不是domains\base_domain\裏的startWeblogic.cmd這個只是調用bin下邊那個startWeblogic.cmd的)文件,在set classpath 的上下分別增長了兩句話,以下:
set PRE_CLASSPATH=%WL_HOME%\server\lib\antlr-2.7.6rc1.jar
set CLASSPATH=%SAVE_CLASSPATH%
set CLASSPATH=%PRE_CLASSPATH%;%CLASSPATH% ;
linux下startWeblogic.sh:
PRE_CLASSPATH="${WL_HOME}/server/lib/antlr-2.7.7.jar"<注意是'/',不是'\'>
CLASSPATH="${SAVE_CLASSPATH}"
CLASSPATH="${PRE_CLASSPATH}:${CLASSPATH}"
從新啓動weblogic就沒有問題了;由於我用的是ggts,直接使用上述方法修改以後,就能夠在在IDE中起動了;
總結幾點:
一、若是hibernate3的項目是從weblogic8.1.6項目移植到10.3.5的話,須要的只是加入antlr類庫到weblogic的啓動中去;這weblogic的區別可能就是有些類庫須要在容器啓動就加載,而tomcat相對這樣的狀況少些(tomcat也有啓動加載一些配置);二、weblogic8.1.6到10.3.5從weblogic.jar中去掉了antlr部分,應該也是其變的更加活用,獨立和增強適應性的一種體現吧,這些思想也是值得學習的;
三、「版本」果真能引發不少問題;
PS:::::::::::::::::::::::::::::::::::::::::::::若是哪裏不對的地方,還請不吝指出:::::::::::::::::::::::::::::::::::::::::::::::::::