有状态会话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?