跨数据库事务的解决

  session bean中跨数据库的事务处理的解决。

  觉得在ejb中异常的处理还是有许多要注意的地方。

  ejb 中通常分两类异常,
  一类为系统异常,
  一类为应用程序异常(这里暂不包含 JVM 的异常,对 JVM 异常我们一般也无能为力),
     对于应用程序的异常, ejb 容器不会去自动处理, 当我们在进行跨数据库操作时抛出了 SQLException 异常,容器不会管,所以做不到事务的回滚,我们必须要手动的调用 sessionContext 的方法来让容器处理异常,达到事务的一致性;
     而对于系统异常, ejb 容器是会自动去处理的,即使我们对它进行了 catch,ejb 容器仍然会知道,会去处理,所以这给了我们处理跨数据库操作维持事务的第二种方法,就是我们在 ejb 方法中捕获我们实际操作数据库的异常然后重新抛出一个系统异常。
例如: EJBException ,这样容器就会察觉接手处理,从而达到跨数据库事务的自动维护。在这里有个细节就是我要是在业务逻辑处理中抛出 EJBException, 而在 ejb 方法中手动进行了 catch, 则此时容器是不会觉察到系统异常的,但如果我仍在 dao 中抛出 ejbexception ,我在 session bean 中调用它,竟然不用手写 catch ,容器会自动捕获进行处理,并且能做到事务的维护,当然我在 dao 中抛出一个 ejbexception 会显的极不合适;所以最好还是在 ejb 方法中捕获 dao 抛出的应用程序异常,而在 catch 中抛出一个 ejbexception ,让容器去处理,事实上这时你是不能再在 ejb 方法中去 catch 这个 ejbexception 了,容器不让你这样写代码。
继续学习中~
 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值