EJB事務管理2--bug修改記

其實上一篇《EJB事務管理--bug修改記》還有問題,鏈接如下http://blog.csdn.net/lele2426/article/details/8848645點擊打開鏈接

架構EJB+IBATIS+JBOSS

主程序調用BeanA,BeanA開始事務,並調用BeanB和BeanC,提交事務。

將jboss數據庫連接池設爲一條連接,BeanA,BeanB,BeanC均使用EJB Bean管理事務方式,執行沒問題,但是無法手動回滾事務。

將jboss數據庫連接池設爲n條連接,BeanA爲Bean管理事務方式,BeanB,BeanC爲容器管理方式,正常,且可以手動回滾事務。但是如果連接爲一條則報錯。


日後再仔細研究事務怎麼回事,理解着可能嵌套Bean事務可以通過容器事務管理方式可以傳遞下去,如果父子Bean都是Bean管理,雖然通過UserTransaction可以使用一條數據庫連接,但是子Bean開始的時候爲自動提交,所以在父Bean裏無法手工回滾。


其中ibatis事務管理記錄如下。在ibatis裏事務方式有三種。在sql-map-config.xml中

<transactionManager  commitRequired="true"  type="EXTERNAL">
<property name="DefaultAutoCommit" value="false"/>
<property name="SetAutoCommitAllowed" value="false"/>
<dataSource type="JNDI">
<property name="DataSource" value="${dataSource}" />
<property name="context.java.naming.factory.initial" value="${java.naming.factory.initial}" />
<property name="context.java.naming.factory.url.pkgs" value="${java.naming.factory.object}" />
<property name="context.java.naming.provider.url" value="${java.naming.provider.url}" />
</dataSource>
</transactionManager>

transactionManager元素ibatis內置的type值有JDBC,JTA,EXTERNAL。EXTERNAL表示事務管理器由應用程序負責,而不是ibatis,本架構中指有EJB自己控制。

commitRequired屬性表示連接釋放前必須提交或者回滾

property表示配置transactionManager配置項

dataSource表示配置數據源工廠,可以是JNDI,DBCP,SIMPLE

發佈了53 篇原創文章 · 獲贊 7 · 訪問量 34萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章