【问题标题】:@Stateful and @SessionScoped@Stateful 和 @SessionScoped
【发布时间】:2015-01-30 21:22:41
【问题描述】:

我对 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?

谢谢

【问题讨论】:

标签: java jakarta-ee session-scope stateful-session-bean


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2017-02-22
    • 2014-07-29
    • 2012-07-07
    • 2014-12-03
    • 2015-07-21
    • 2011-03-23
    • 2019-02-15
    • 2019-03-31
    • 1970-01-01
    相关资源
    最近更新 更多