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的資源指定方式。

2007/6/21

不舉 的左手

應該是職業傷害的關係,長久以來,我的肩膀總會覺得酸痛,還常常落枕,最近,左手肩膀又開始出毛病了,現在在左手上胳臂跟肩膀的連接處不是酸痛而是有一點刺痛,這是不是五十肩的症狀?我開始試著在沒事的時候將左手往上舉高,也稍微繞繞肩膀,不知道會不會有幫助。

不僅僅肩膀有問題,我可以感覺得到,因為長期低頭面對電腦銀幕的關係,我的脖子兩側因缺乏運動而覺得很緊,這或許是靜態工作者的原罪。現在的社會要求「專業」,但專業的成份得要一分努力一分收穫,得花時間培養這種專業,而經過了這麼久的時間,讓我們的生活養成習慣,可以為了一個搞不清楚為甚麼的bug,一直坐著想辦法解決問題,這是一種不可避免的惡性循環。

公司提供健康檢查的機會,希望大家注意身體健康,但治標不能治本,其實得要更積極地要求工程師,每1~2小時,就強迫離開電腦銀幕,離開座位10分鐘,看看窗外遠方,讓視線與心情暫時跳離一行一行的程式碼。

ps.
才剛解決weblogic與tomcat中,getRealPath的差異(以getResourceAsStream取代),又發現Hibernate 3跟weblogic中舊版的ANTLR相衝這個大問題,得儘快解決。

weblogic這麼昂貴的AP server,在我們的伺服器上卻得耗掉200~300MB的記憶體,速度很慢跑不大動,每一次重開Server就得花掉5 mins(還是Tomcat好用多了),又遇上Hibernate的大問題,真的很麻煩,功能多了反而問題更多,這似乎又是軟體的另一樁原罪。

2007/6/14

Anti-Hack 的解決方案

要對付XSS, SQL injection,How to add validation logic to HttpServletRequest這個網站提供了一個包裝HttpServletRequestWrapper的方式,可以封裝HttpServletRequest,然後再以filter的方式,把這個wrapper套用到 /* 所有網址上。

這篇文章提到的canonicalize與HTMLEntityEncode,我們並沒有採用,其實我還不大瞭解canonicalization的原理,或許在瞭解後會加上去。我們是利用regular expression pattern matching的方式,將一些已知基本的攻擊字元替代掉,也就是這篇文章BadInputFilterValve.java提到的方式,直接用String.replaceAll的方法,將reqest裡的參數都處理掉,把 \" 取代成 " ,把 document(.*)\\.(.*)cookie 取代成 document.cookie 。