EJB3的异常处理问题

06-05-18 kindywu
这个问题是我在Jboss的SEAM的message例子里面遇到的.

情况这样:

程序由JSF调用SessionBean调用EntityManager去删除一个实体对象。

而同时我是先从数据库中删除了这条记录,并且期待捕获到一个并发错误。

SessionBean代码片断如下:

try {

//删除一个ejb3的实体类message

em.remove(message);

message = null;

} catch (Exception e) {//这个捕获没有任何意义.

e.printStackTrace();//事实上数据库里面已经没有这条记录了,我已经在外部把它删除掉,但是一般数据库运行删除语句没有返回错误.所以没有进入.

return null;

}

System.out.println("pass");//正常运行

但是最后,Jboss的EJB3服务是由AOP实现的,SessionBean的函数支持事务,函数运行完,在他提交的时候由hibernate的Commit函数去检测,发现了并发错误。这时候代码无法进行任何处理。error return 0 expert is 1,希望返回1,但是实际上没有删除任何行.

我想问一下彭老师,这是EJB3的接口定义有问题,因为它没有返回异常,还是AOP的实现上存在缺陷呢?如何捕获这类异常,如果他是由AOP实现的.

banq
2006-05-22 16:25
AOP是JBoss底层实现,已经被EJB3标准封装,所以实际使用EJB3时不用担心。

你这个问题,是你捕获错误,应该是EJBException吧?

猜你喜欢