跨数据库事务的解决

来源:互联网 发布:破壁灵芝孢子粉 知乎 编辑:程序博客网 时间:2024/06/08 18:42

  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了,容器不让你这样写代码。
继续学习中~
 
原创粉丝点击