0

我对 bean 生命周期有疑问,我不明白。我的战争中有一个@SessionScoped bean:

@Named
@SessionScoped
public class UserBean implements Serializable {
  @Inject
  UserServicesLocal userServices;
  [...]
}

然后是 ejb 部分中的 @Staseful 会话 bean:

@Stateful
@LocalBean
@SessionScoped
@ExcludeDefaultInterceptors
public class UserServices implements UserServicesLocal, Serializable {
  [...]
}

他们玩得很好,但是当在 ejb 部分中生成未经检查的异常时,SFSB “死”。我知道这是预期的行为,但我不明白如何处理这种情况。例如:用户进入一个可以上传 xls 文件的页面,上传一个文件,然后文件处理由于某种奇怪的原因而失败。未捕获“WeirdReasonException”,SFSB 消失,并且每个后续调用都会生成“javax.ejb.NoSuchObjectLocalException:EJB 不存在”。我知道我应该避免留下未捕获的异常,但如果有一些奇怪的事情通过,我认为用户应该能够继续他的工作。有没有办法“强制”重新创建 SFSB?

谢谢

4

1 回答 1

0

我假设“SFSB”是指 UserServices bean。如果这是正确的,那么我不会让 bean 死掉——我会包装可能引发未经检查的异常的部分,您可以在 try/catch 块中恢复,并捕获 RuntimeException(顺便说一下,不是 Exception)。记录异常并返回 UI 可以解释为“处理您的输入失败”的内容。

如果你能真正处理它,捕捉“异常”永远不是问题。我的大部分代码都会在 UI 处理程序级别捕获异常,因此如果代码内部发生意外情况,应用程序不会死掉。

于 2015-01-30T22:19:11.433 回答