@Stateful and @SessionScoped



我有一个关于bean生命周期的问题,我不明白。我的战争中有一颗@SessionScoped豆:

@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的重建?

谢谢

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

如果您确实可以处理"异常",那么捕获它永远不会成为问题。 我的大多数代码在 UI 处理程序级别捕获异常,因此如果代码内部发生意外情况,应用程序不会死机。

相关内容

  • 没有找到相关文章

最新更新