2007/6/22

Weblogic with Spring - Hibernate

由於Hibernate3使用了ANRLR當作SQL語法的parser,但是weblogic裡內含了舊版的ANTLR,這兩個是不能共用的會相衝突,因此得用classpath設定的方式將weblogic的ANTLR蓋掉。

修改的步驟如下:

Step 1.
把Spring使用的ANTLR jar,原本放在WEB-INF/lib/antlr-2.7.6rc1.jar,複製到C:\bea\wlserver_10.0\samples\domains\wl_server\lib

Step 2.
修改 C:\bea\wlserver_10.0\samples\domains\wl_server\bin\setDomainEnv.cmd
在 set CLASSPATH=%PRE_CLASSPATH%; 的後面加上 C:\bea\wlserver_10.0\samples\domains\wl_server\lib\antlr-2.7.6rc1.jar; 如同下面的範例

set CLASSPATH=%PRE_CLASSPATH%;C:\bea\wlserver_10.0\samples\domains\wl_server\lib\antlr-2.7.6rc1.jar;%WEBLOGIC_CLASSPATH%;%POST_CLASSPATH%;%WLP_POST_CLASSPATH%


另外在設定spring跟hibernate的時候,程式裡面要取得Spring的ApplicationContext可以將spring設定檔放在classes/config裡面,並將路徑設定為:
ApplicationContext springContext = new ClassPathXmlApplicationContext("config/bean/bean-config*.xml");

在spring設定檔中,要建立org.springframework.orm.hibernate3.LocalSessionFactoryBean的sessionFactory bean的時候,可以把hibernate設定檔中資源路徑的地方,設定為以下的方式,總共有四種mappingResources、mappingLocations、mappingDirectoryLocations與mappingJarLocations可以使用,因為weblogic會自動將classes裡面的設定檔跟.class檔案都jar在_wl_cls_gen.jar這個檔案裡面,以前用mappingDirectoryLocations classpath:/config/mappings/mysql這個寫法,是不能運作的,改成這個也不行 mappingLocations classpath*:/**/mappings/mysql/**/*.hbm.xml,最後才試出這種寫法,在tomcat跟weblogic都可以正常運作


config/mappings/mysql/**/*.hbm.xml



Spring的資源處理比我想像的還厲害,Chapter 4. Resources Chapter 4. 資源,在指定資源路徑的時候,支援類似ANT的資源指定方式。