stateless session bean中跨数据库的事务的维持

在上一篇blog中我写到了一个困饶我的问题,就是如何在stateless session bean中的一个方法内如果有多个数据库操作,怎样维持它们的事务性,经过实验,下面给出它的一种解决方法。
首 先像这样的问题我们应该相信ejb是能够解决的,因为ejb的事务机制是很强大的,而上述的问题并不是很特殊的情况,而是种普遍的情形。怎样解决了,其实 也是很简单的,但这里有个前提,就是你的数据库操作中的数据库连接不能用simple的jdbc连接(这也是为什么我开始的demo总是不行的原因),必 须要用连接池来获得connection,原因我后面再说,当我们进行跨数据库的操作时,每一个dao的操作我们必须要抛出异常,即在dao中我们的操作 方法遇到异常时,在catch部分处理掉了异常后,要再抛出一个异常(任意的都可以,其实也可以在dao中不捕获异常,直接让异常到上一层),这样异常就 会传到session bean的方法中,然后session bean再捕获它,在session bean 的方法的catch部分加上sessionContext.setRollbackOnly()这样就能做到整体操作的事务一致性的维护了。
      我感觉这里面的实际情况还是用到了ejb容器提供的强大的事务性机制,只是我们要让异常得以通知到ejb容器,然后在catch部分实现回滚。至于为什么 非要用数据源了,我感觉是因为在数据源中当我将connection.close()是有可能并没有真正的close()(数据源是有优化的,所以它还可 能保留了连接的信息),而simple的jdbc可能要是close()就真正的close了,但这只是猜测!
     当然ejb的声明性事务处理还要再学习学习,这也是它强大的一个地方,感觉与spring的有几分相似!
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值