在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
了,容器不让你这样写代码。
继续学习中~