如何避免@Asynchronous ejb方法上的异常catch块

时间:2014-07-02 17:14:10

标签: java java-ee asynchronous ejb-3.1

假设我们有一个远程ejb,它提供了一个带异常的异步方法

@Stateless
public class MyBean {
    ...

       @Asynchronous
       public Future<Void> doSomething()
       throws MyException
       {
             //implementation
       }

    ...
}

现在是客户端:

 try {
       Future<Void> result = myBean.doSomething()
 }
 catch(MyException e)
 {
       //Useless required catch block?
 }

我知道返回时可以检索Future对象的异常。

我的问题是,如果有一个更好的实现没有无用的空catch块,无论如何都不会被调用。

2 个答案:

答案 0 :(得分:0)

实际上,如果你抛出自定义异常,那么你决定调用代码必须处理它,你可以像任何同步方法一样捕获它。如果你说,catch块是无用的,那么问题是,为什么你抛出异常呢?

为避免在客户端代码中处理异常,您可以返回一个保存调用结果的对象,这可能是发生的错误。你仍然需要处理这种情况,但你不需要一个try-catch-block。有关示例,请参阅this post

进一步阅读:Java EE Tutorial

答案 1 :(得分:0)

另一种解决方案是使MyException像这样扩展RunTimeException。不确定这是否可行。注意带有rollback = false的注释(假设您有一个未经回滚设置为true的已检查异常)。这样你就不必在throws子句中提及它或捕获它。注释将确保它不会包装在EJBException中。

@ApplicationException(rollback = false)
public class MyExcepton extends RuntimeException {

...
}