EJB中事务问题?

cookie2189 2005-03-15 01:33:37
大家都知道EJB中的事务分为两种,即容器管理事务,编程实现事务。
容器管理事务是我们声明ejb的trasaction为Container,编程实现事务是声明ejb的trasaction为bean。我现在遇到了一个问题。
我建了一个sessionbean,并声明它的trasaction为Container,于是我在这个sessionbean中一个方法中有两年数据库操作,我认为它是支撑事务操作的。可是不像我想的那样。我在第一个数据库操作执行错误并且抛出异常的情况下,第二个数据库操作还是执行了。不知道这是为什么?

我的代码(伪代码)如下:
public void excHqlTest(String tblName, Object vo1, String tblName2 , Object vo2) {
try {
bo.excHqlTest(tblName2, vo2);
}
catch (Exception ex) {

}
try {
bo.excHqlTest(tblName, vo1);
}
catch (Exception ex) {

}
}
...全文
132 点赞 收藏 7
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
eagle51998 2005-06-13
容器管理的事务,不是在任何exception下都rollback,这需要容器来判断,当然你的这种情况,我认为是应该rollback的,既然他们是同一个原子操作,你为什么不把他放如同一个try{}catch{}中呢,还有就是我认为如果你采用的是CMT,那么你就不用try{}catch{}块了啊,应为你那两步都是对DB操作,那么throw Exception,容器会自动识别出它是需要rollback的
回复
cookie2189 2005-03-21
darkattack(居士):
这是最早试过的,不行!
回复
darkattack 2005-03-18
你就不要try...catch了,让他抛出来好了。
应该这样理解,第一个方法抛出异常,那程序就应该中断了,第二个方法应该执行不到了。
如果第1个方法没有抛异常,而第2个方法抛异常,那第一个方法中的操作就应该回滚掉。
现在你都catch住了,假如第2个方法抛异常,但是被你catch住了,对第1个方法来说,就像没发生过异常一样,一直顺利执行到excHqlTest{...}方法后一个"}"结束咯。
回复
cookie2189 2005-03-18
老兄,不行呀!还有什么别的原因吗?
回复
ziffle 2005-03-15
catch(Exception ex)
catch(EJBException ex)
区分~
回复
freedy_hu 2005-03-15
朋友,看看j2ee文档。你的问题解决是:catch(Exception ex)都改为catch(EJBException ex)就可以了。给分吧
回复
cookie2189 2005-03-15
public void excHqlTest(String tblName, Object vo1, String tblName2 , Object vo2) {
try {
bo.excHqlTest(tblName2, vo2);//第一个数据库操作
}
catch (Exception ex) {

}
try {
bo.excHqlTest(tblName, vo1);//第二个数据库操作
}
catch (Exception ex) {

}
}
回复
相关推荐
发帖
Java EE
创建于2007-09-28

6.6w+

社区成员

J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
申请成为版主
帖子事件
创建了帖子
2005-03-15 01:33
社区公告
暂无公告