EJB3的异常处理问题

这个问题是我在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实现的.

AOP是JBoss底层实现,已经被EJB3标准封装,所以实际使用EJB3时不用担心。

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