Upgrade to Spring 2.0
Original System Configuration:
- Spring 1.2.8
- Hibernate 3.0.5
Upgrade to:
- Spring 2.0
- Hibernate 3.2.0rc4
Lists:
- 改變 xml 的 dtd 到 xsd,原來: 成: 上面包括 beans/util/aop/tx 等重要的 xsd,其他還有 jee/lang/tool 等不常用的,詳情請見 xsd-config
- singleton="true" 要改為 scope="singleton",singleton="false" 要改為 scope="prototype"
- <util:foo> 很好用,例如: 可改為
- jdbcTemplate 的 ResultReader 已經正式拿掉了。原本: 改寫為:
- Hibernate3 的 count 回傳原本是 Integer,新版變成回傳 Long (改這個真的是太狠了...)
- 承上,在 hql 直接 new 也受影響:
- Hibernate3 的 UserType 原本在 HQL 只能用 string/int... 代入,現在可直接用 原來的 type:
- Hibernate3 interceptor 加了四個 method: onCollectionRecreate()/onCollectionUpdate()/onCollectionRemove()/onPrepareStatement() 。跟其他 method 不一樣的是,String onPrepareStatement(String statement) 預設最少要回傳 argument statement,而不是 null
- spring.jar 不再內建 hibernate2 相關的 class,舊系統需要的話要加入 spring-hibernate2.jar
- Hibernate3 預設不再偵測 ehcache,需手動設定
- 測試用的 MockServletContext 改變尋找路徑的方法。原本測試時我們可以這樣做假的 webApplicationContext 升級後發現 MockServletContext 內部會改(先?) 用 filesystem 的方式去找檔案,當然就掛了... 解決的方法是強制要它走 classpath: 光這個就搞了我兩個小時... 暈倒...
- MockHttpSesseion 做 setAttribute/removeAttribute 時,現在會 trigger event 給 HttpSessionBindingListener 了 (越來越像真的...快不能叫 Mock 囉)
感覺升級 hibernate 問題比較多 =_=;。至於那個 aop 新的 transaction 的寫法... 呃,我還是覺得 txProxyTemplate 的寫法比較好... aspectj 的方式對 package/class 名稱的限制太多了 (因為要讓 pointcut wildcard "寫的出來"...)。改天拿便當系統來亂改試試,呵
最後,令人失望的是 Spring 2 沒有像 EJB3 那樣直接寫個 @Stateless 就可以定義一個 bean,還是得在 xml 寫一個 <bean>... 真希望能夠在 class 上加個 @Bean(id="fooService") 就 ok 了。很多 bean 都很簡單,不需要什麼設定,很適合這種寫法說。 Spring 就是死也不走侵略式的做法。可我不 care 被 Spring 侵略啊!下次自己寫一個算了 =_=
[Update] 加兩條和測試有關的。
我也是利用這個長假升級到 spring 2.0 (hibernate 3.0 之前已經痛過了), 因為想用新的 aop tx, 惡夢就來啦~~
用 unit test 怎麼跑都正確, 可是換到 ap server 上跑 aspectj 就一定失靈..:S
這裡換換那裡換換也都沒用, 最後只好換回 txProxyTemplate 舊招, 浪費我ㄧ整天..
其他就大致上順利, 因為相容性很好..
由...發表 tempo on 十月 11, 2006 at 05:29 下午 CST #
喔喔,tempo 已經衝上去用 aop tx 了,沒想到這麼難搞... 我才剛想試而己說...
我在 reference 看到範例的 point cut 都很好寫,都是像
execution(* com.foo..service.*.*(..))
這樣,直接用 package 來分就可以。不過我一直認為這是 bad practice
(應該要按 domain 分 package,而不是按架構分)。
結果之前的 code 都是按 domain 的分法,pointcut 反而寫不出來 =_=
繼續 try...
由...發表 ingramchen on 十月 11, 2006 at 06:21 下午 CST #