EJB事务管理2--bug修改记

来源:互联网 发布:青岛知行国际靠谱吗 编辑:程序博客网 时间:2024/05/03 19:45

其实上一篇《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

原创粉丝点击