@Stateful和@SessionScoped

时间:2015-01-30 21:22:42

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

我遇到了一个关于我不了解的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?

谢谢

1 个答案:

答案 0 :(得分:0)

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

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