假设我们有一个远程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块,无论如何都不会被调用。
答案 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 {
...
}