有状态会话Bean何时销毁?

我是ejbs的新手,我想知道有状态会话bean是否会被销毁。 我在我的servlet中注入了一个有状态的会话bean。 即使在30分钟后,我看到这个bean是活跃的。 我正在使用jboss eap 6.0。 我相信HttpSession与有状态会话bean无关。 我使HttpSession无效,以确保HttpSession与静态会话bean无关。 那么,如果我的应用程序有很多用户,并且如果我创建了一个新的bean,那么如果我的服务器的性能下降了,每个用户会如何呢? 容器如何管理有状态会话bean。 什么时候删除或销毁了一个bean?

我阅读这篇文章和其他几个人。 但是我没有弄清楚。


有状态会话Bean不是客户端背景化的,必须在您的代码中明确销毁。

1)SFSB必须定义一个由@Remove注释的方法:

@Stateful
@Local(ILocalQuiz.class)
public class QuizBean implements ILocalQuiz{

//...

    @Remove
    @Override
    public void end() {
        System.out.println("QuizBean instance will be removed..");
    }

}

2)SessionScoped bean必须显式调用end()方法:

public void cleanUp(){
    System.out.println("Cleaning up before destroying the SessionScoped  bean.");
    quizProxy.end();
}

@SessionScoped注释只在Web上下文中有意义,在Web上下文之外,您应该假定您的@SessionScoped将被忽略,并且您的有状态EJB将像旧的常规有状态EJB那样工作,并且您不应注入有状态的资源(旧的常规有状态的EJB)转换为无状态的(Servlet),在这种情况下,有状态ejbs的范围将取决于servlet实例的范围和java servlet规范。 并不严格要求容器为每个会话或请求创建一个servlet实例,事实上,某些容器将使用servlet的单个实例来为所有客户端提供服务,在这种情况下,您最终会遇到这种丑陋的情况如果一个有状态的ejb实例会为所有的客户提供服务,请检查一下,

在战争中打包并打包在ear-> jar中时,有状态会话Bean意外行为

链接地址: http://www.djcxy.com/p/18775.html

上一篇: When is the stateful session bean destroyed?

下一篇: How do you remove duplicates from a list whilst preserving order?