@Stateful 和@SessionScoped

@Stateful and @SessionScoped

我对 bean 生命周期有疑问,我不明白。 我的 war:

中有一个 @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 {
  [...]
}

它们运行良好,但是当在 SFSB 的 ejb 部分中生成未经检查的异常时 "die"。我知道这是预期的行为,但我不明白如何处理这种情况。 例如: 用户进入一个页面,在那里他可以上传一个 xls 文件,上传一个文件,然后由于一些奇怪的原因,文件处理失败。 "WeirdReasonException" 未被捕获,SFSB 消失,随后的每个调用都会生成一个 "javax.ejb.NoSuchObjectLocalException: The EJB does not exist"。 我知道我应该避免留下未捕获的异常,但如果有奇怪的事情通过,我认为用户应该能够继续他的工作。 有没有办法"force"重建SFSB?

谢谢

我假设 "SFSB" 你指的是 UserServices bean。如果那是正确的,那么我不会让这个 bean 死掉——我会把可能抛出未经检查的异常的部分包装在 try/catch 块中,然后捕获 RuntimeException(不是 Exception,顺便说一下).记录异常和 return UI 可以解释为 "processing your input failed".

的内容

抓"Exception"从来都不是问题,只要你能应付得了。我的大部分代码在 UI 处理程序级别捕获异常,因此如果代码内部发生意外情况,应用程序不会死掉。