WASCE的資料庫連線池

cow977發表於2011-05-30
在WASCE中使用ORACLE資料庫,按說明配置了資料庫連線池,在說明中,說明了“針對OracleMySQLMaxDBTranQL資料庫使用Generic JDBC Resource Adapter(tranql-connector-ra-version.rar)時,應在資料庫部署規劃中使用CommitBeforeAutoCommit="true",這樣才能立刻將事務提交至資料庫。”因第一次使用,對其中的CommitBeforeAutoCommit不是很理解,況且在WASCE的WEB配置介面中也沒有此引數的設定,因而也沒作深究。
 
在JAVA專案的資料庫操作部分,資料庫連線是採用了連線池,併為保證資料一致性,啟用了事務且關閉了AutoCommit,事務可以正常Commit/Rollback,在程式中也可以看到資料所作的修改,但在資料庫看不到資料修改,換用了程式直接採用JDBC連線資料庫而不用連線池,卻一切正常。
 
首先懷疑的是WASCE是否採用了EJB或XA之類的分散式事務,但透過對程式執行的跟蹤,否定了這一疑點。
 
看來一定是和WASCE中的資料庫連線池配置有關。
 
再次翻看配置說明,仔細研究了對CommitBeforeAutoCommit引數的說明,感覺問題與此引數有關。
 
重新配置資料來源,要加入CommitBeforeAutoCommit,這次採用命令來部署,重新測試,一切正常。
 

deploy.sh deploy $WASCE_HOME/repository/org/tranql/tranql-connector-ra/1.7/tranql-connector-ra-1.7.rar  plan-pool.xml

 

總結:此例的問題是對AutoCommit的理解產生了問題,資料庫連線Connection是有一個AutoCommit引數,表示每次資料庫操作後,是否自動提交事務,即是否次每次資料庫操作都作為一個獨立的事務來處理;而此地的AutoCommit卻並非此含義,而是應該理解為連線池管理的事務的自動提交。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/81227/viewspace-696613/,如需轉載,請註明出處,否則將追究法律責任。

相關文章