部落客廣告聯播
2008年9月28日 星期日
2008年9月15日 星期一
2008年9月6日 星期六
2008年9月1日 星期一
2008年8月14日 星期四
Eclipse 匯出WAR透過Websphere主控台程式安裝到WAS會有文件丟失問題
安裝到WAS, WAS在解開時會有文件丟失問題。
此乃該Eclipse專案為CVS專案, 其WAR檔可能會有內含 「.#」開頭的垃圾檔案。
只要刪除WAR檔中的這些垃圾檔案, 即可正常deploy至Websphere。
詳細可參考:
解决websphere下war包部署后丢失文件的问题
2008年8月13日 星期三
2008年8月7日 星期四
RowSet分頁與MS SQL Server2005的問題
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
2008年7月30日 星期三
[Javascript] parseInt("08")問題
parseInt("01") ~ parseInt("07") 都正常
但parseInt("08") parseInt("09")結果都為零
原因可參考http://blog.xuite.net/n3785/tech/12824014
解決方法:
parseInt("08",10);
Number("08");
2008年7月22日 星期二
[JavaScript]使用CSS Expression達成table奇行偶行顏色變換
<style type="text/css">
tr{
table:expression(this.style.background=(rowIndex%2==1)?'orange':'red')
}
</style>
很可惜的CSS Expression只在IE適用..........
2008年7月20日 星期日
[JavaScript] onScroll在IE與Firefox中的不同
IE: //作用於body
document.body.attachEvent("onscroll", method1);
Firefox: //作用於document或window
document.addEventListener("scroll", method1,false);
或是
window.addEventListener("scroll", method1,false);
2008年7月15日 星期二
TOMCAT 指定使用其他JDK
set JAVA_HOME="c:\jre_dir"
set CATALINA_HOME="D:\tomcat_dir"
2008年7月14日 星期一
2008年6月16日 星期一
2008年6月7日 星期六
tomcat DBCP 與 MySQL
故事是這樣的:
我的程式直接使用MySQL connector/J JDBC Driver連接資料庫操作都很正常 ,
但透過Tomcat配置的data source(DBCP)取得connection來對資料庫操作 ,
總是不定時的會出現 'No operation allowed after connection closed' 錯誤訊息,
意思是connection已經被關閉掉了,
也換了最新的JDBC Driver, 也換過Tomcat 版本,怎麼試結果都一樣,還是錯,
查了許久也作了trace, 這connection並不是我的程式關掉的,
同時還將程式移到了websphere 並使用websphere中的connection pool, 結果是不會發生這樣的錯誤的。
那麼剩下的兩個可能便是:
- DBCP程式關掉的
- MySQL server端關掉的
OK, 網上拜神(Google), 搜到許多的線索, 有人說connection url要有autoReconnect=true選項,但這僅適用於連線時間超過八小時者。bug database有類似問提,但早就已經修正好了。 也有人說要改MySQL server的my.ini (my.cnf) ,恩...改了可是還是錯。
OK...上面都是廢言....
解決方案是在 tomcat server.xml中的<context>其內的<resource>標籤(設定DataSource用的)要多一個 屬性 validationQuery="select 1" , 之後便不會再三不五時拿到被關掉的connection了,測底解決。
----------------------------------------------------------------------------------------------
為何如此能解決呢??
我猜想大概是多了validationQuery後, DBCP在做相關資料庫操作時,
若該connection沒被客戶端程式(也就是我的程式)手動關閉connection ,也沒被DBCP關閉connection ,
會先用validationQuery的sql檢查, 是否連線被MySQL server端中斷了 ,如果是就自動再從MySQL server取得一個新的connection。
以上僅是小弟猜測, 因為對DBCP內部運作並不是很熟悉 ,所以如有人能回答請不吝提供正確答案...
-------------------------------------------------------------------------------------------
但... 問題來了....
如果以上我的猜測是正確的..... 那麼DBCP自動從MySQL server再次取得新的connection , 那麼也就代表了我之前被MySQL server端無端close掉的connection若是transaction的(autoCommit=false)不就無端的被中斷掉了,而且我也不會得知..... +.+ \\\
,這樣實在太太太不合理的.....................
所以說呢無端斷線問題暫時解決, 但關於transaction的疑問, 不知有哪位先進可以回答呢??
2008年6月4日 星期三
2008年6月2日 星期一
Sun RowSet bug on JDK 1.4
解決方法:
把rowset.jar中的 com\sun\rowset\RowSetResourceBundle.properties 拷貝兩份出來,一份改名為RowSetResourceBundle_TW.properties,另一份改名為RowSetResourceBundle_zh-TW.properties,再加到jar檔中同個目錄中.
OK, 最後重啟AP Server,問題解決了.
(對了,最後要感謝提供這個解決方法的好心人)
參考來源:
http://thinkbase.net/w/main/Wiki?2006-04-01+rowset+%E5%8F%82%E8%80%83%E5%AE%9E%E7%8E%B0+jdbc_rowset_tiger-1_0_1-mrel-ri.zip+%E7%9A%84+bug
