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) {

}
}
...全文
158 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
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) {

}
}

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧