ejb 的事务问题,请各位大侠帮忙呀!

alaxing
04-07-28 2 125

//无状态sb中的一个方法:
public void transTest(){
...
x.setCMP();//采用cmp的方式插入一条正确的数据到数据表中
y.DAO();//采用调用DAO(sql的insert语句)的方式,插入一条错误的记录(故意制造错误)
...
}
//客户端调用的结果是:x.setCMP()数据插进去了;y.DAO()报告错误,没有插入数据库
//希望利用ejb的事务机制来实现回滚,但是为什么DAO嵌在SessionBean中(用默认的方式<trans-attribute>Required</trans-attribute>)不行呢?
以前在一个SLSB的一个方法中调用两个CMP实例,一个执行删除,一个插入,当后面一个插入出现错误时,删除的也回滚了,
怎么能达到这样的效果呀?
以上例子,dao和cmp都是采用同一个数据源!
请各位大侠Help呀!

alaxing
2004-07-28 17:49

我现在在这个session bean里判断 y.DAO();方法是否出错,如出错,则
sessionContext.setRollbackOnly();

这样是可以回滚的,可是这样好麻烦!不知道各位大位是如何解决的!
up!

banq
2004-07-30 12:55

y.DAO()要抛出Exception 就可以了