论坛首页 Java企业应用论坛

ibatis中的事物传播机制

浏览 4001 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-09-05  
我们这边在使用ibatis进行事务管理的时候遇到的了一个问题:IBATIS中好像不能设置事务的传播机制。

当存在方法foo()和doo(),并且在此两方法上都加上了事务管理。在foo()方法代码中调用了doo()方法,运行时就会报错提示已经存在一个事务。我记得在EJB中是可以设置事务的传播机制的比如Requirs、RequiresNew等让控制权在到达一个新的方法的事务中的时候选择继续沿用之前的额事务还是另外开启一个等。所以我们现在在比较底层的方法比如DAO和领域对象的方法上都没有添加事务,而是把事务加在了Action一层的方法上,但是感觉这样比较奇怪啊,不知道大家一般如何解决的? 谢谢!!!


抑或本来就不应该由ibatis来管理事务?但是当前的情况是不能用Hibernate,不能用Spring,没有EJB...-_-|||
   发表时间:2008-09-05  
use spring or develop your own transaction manager (reinvent wheel)
0 请登录后投票
   发表时间:2008-09-05  
在服务器上放一个非Auto-Commit的数据源,然后让iBATIS通过JNDI访问这个数据源,在DAO里自己commit,效果和事物一样。
0 请登录后投票
   发表时间:2008-09-05  
楼上说通过JNDI访问数据库的目的是什么? 而且把事务加在DAO上又是什么目的呢?
其实我在想是不是在一般的非EJB环境的javaEE应用中根本就没有所谓的食物传播机制这个概念,在EJB中是因为一个session bean可以调用其他的session bean,但是在非EJB下,Action之间(或者Service方法之间)相互调用基本上不存在吧
0 请登录后投票
   发表时间:2008-09-06  
引用

setAutoCommit

void setAutoCommit(boolean autoCommit)
                   throws SQLException

    将此连接的自动提交模式设置为给定状态。如果连接处于自动提交模式下,则将执行其所有 SQL 语句,并将这些语句作为单独的事务提交。否则,其 SQL 语句将成组地进入通过调用 commit 方法或 rollback 方法终止的事务中。默认情况下,新的连接处于自动提交模式下。

    提交发生在语句完成或执行下一条语句时,以先发生的情况为准。在语句返回 ResultSet 对象的情况下,该语句在已检索完最后一行 ResultSet 对象或已关闭 ResultSet 对象时完成。在更复杂的情况下,单个语句可以返回多个结果和输出参数值。在这些情况下,提交发生在检索到所有结果和输出参数值后。

    注:如果在事务处理期间调用此方法,则提交该事务。

    参数:
        autoCommit - 为 true 表示启用自动提交模式;为 false 表示禁用该模式
    抛出:
        SQLException - 如果发生数据库访问错误
    另请参见:
        getAutoCommit()



http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/sql/Connection.html#setAutoCommit(boolean)
0 请登录后投票
   发表时间:2008-10-16  
我认为事物不要写在方法内部,而是通过Connection或者便向的Connection的传递来控制实物。

这样可以解决在多个需要事物的方法在同时调用的问题。
0 请登录后投票
   发表时间:2008-10-17  
同意gumpgz的观点,
同时方法级别的事务管理,也会对以后的维护造成很大麻烦
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics