部落客廣告聯播

2008年8月14日 星期四

Eclipse 匯出WAR透過Websphere主控台程式安裝到WAS會有文件丟失問題

Eclipse 匯出WAR透過Websphere主控台程式,
安裝到WAS, WAS在解開時會有文件丟失問題。

此乃該Eclipse專案為CVS專案, 其WAR檔可能會有內含 「.#」開頭的垃圾檔案。
只要刪除WAR檔中的這些垃圾檔案, 即可正常deploy至Websphere。

詳細可參考:
解决webspherewar包部署后丢失文件的问题

2008年8月7日 星期四

RowSet分頁與MS SQL Server2005的問題

使用CachedRowSet的setPageSize()之後, 作execute動作竟然會錯誤 -->
com.microsoft.sqlserver.jdbc.SQLServerException: 不支援此資料指標類型/並行的組合。(The cursor type/concurrency combination is not supported.)

上網查了一下, 大概得到的答案是MS SQL Server 2005不支援 (TYPE_SCROLL_INSENSITIVE + CONCUR_UPDATABLE)組合。
納悶的是我明明已經將CachedRowSet物件設為 ( TYPE_SCROLL_INSENSITIVE , CONCUR_READ_ONLY)組合, 為何在setPageSize後會出現錯誤呢??

RowSet RI現行版本是non-Open Source的(在OPEN JDK7中才有公開原始碼), 所以Debug時真的不好抓出問題點。

通過些反編工具檢查原始碼, 才發現在CachedRowSetReader類別readData方法中有一段:

.......
if (cachedrowset.getPageSize() == 0) {
cachedrowset.populate(resultset);
} else {
preparedstatement = connection.prepareStatement(
cachedrowset.getCommand(), ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE);
..........


既然如此, 也就是說要解決此問題的話, 我們要建立自己的CachedRowSetReader和Provider類別並在實體化CachedRowSet物件時指定Provider。
另外建立一繼承CachedRowSetImpl物件override傳hashtable建構子在其內要生成SQLWarning及RowSetWarning給自己的成員,才不會照成NullPointException