单例会话****bean在每个应用程序中实例化一次,并存在于应用程序的生命周期中。单例会话bean是为单个企业bean实例在客户端之间共享和并发访问的环境而设计的。
单例会话Bean提供了与无状态会话Bean相似的功能,但与它们不同,因为每个应用程序只有一个单一会话Bean,而不是无状态会话Bean池,其中任何一个都可以响应客户端请求。像无状态会话bean一样,单例会话bean可以实现Web服务端点。
单例会话bean在客户端调用之间保持其状态,但不需要在服务器崩溃或关闭时保持其状态。
使用单例会话bean的应用程序可能会指定应用程序启动时单例应该被实例化,这允许单例程序为应用程序执行初始化任务。单例也可以在应用程序关闭时执行清理任务,因为单例将在应用程序的整个生命周期中运行
何时使用会话Bean
1、如果满足以下任何一个条件,则有状态会话Bean是合适的。
(1)bean的状态表示bean和特定客户端之间的交互。
(2)bean需要在方法调用中保存有关客户端的信息。
(3)该bean在客户端和应用程序的其他组件之间进行调解,为客户端提供了一个简化的视图。
(4)在幕后,这个bean管理着几个企业bean的工作流程。
2、为了提高性能,如果具有这些特性中的任何一个,你可以选择一个无状态会话bean。
(1)bean的状态没有特定客户端的数据。
(2)在单个方法调用中,bean为所有客户端执行一个通用任务。例如,您可以使用无状态会话bean发送确认在线订单的电子邮件。
(3)这个bean实现了一个web服务。
3、在以下情况下,单例会话bean是合适的。
(1)状态需要在整个应用程序中共享。
(2)一个企业bean需要被多个线程同时访问。
(3)应用程序需要一个企业bean在应用程序启动和关闭时执行任务。
(4)这个bean实现了一个web服务。
代码实现
有状态会话Bean
//通过使用@Stateful定义一个简单的有状态会话Bean
import java.util.ArrayList;
import java.util.List;
//package org.sample;
//这个一个标有@Stateful注解的POJO
@Stateful
public class Cart {
List items;
public Cart(){
items=new ArrayList<>();
}
public void addItem(String item){
items.add(item);
}
public void removeItem(String item){
items.remove(item);
}
public void purchase(){
}
//remove方法标有@Remove注解。客户端可以通过调用remove方法删除有状态会话Bean。
//调用这个方法将导致容器调用标有@PreDestroy注解的方法。
//删除有状态会话Bean是指特定于该客户端的实例状态已经不存在了。
@Remove
public void remove(){
items=null;
}
}
最后
ActiveMQ消息中间件面试专题
- 什么是ActiveMQ?
- ActiveMQ服务器宕机怎么办?
- 丢消息怎么办?
- 持久化消息非常慢怎么办?
- 消息的不均匀消费怎么办?
- 死信队列怎么办?
- ActiveMQ中的消息重发时间间隔和重发次数吗?
ActiveMQ消息中间件面试专题解析拓展:
redis面试专题及答案
- 支持一致性哈希的客户端有哪些?
- Redis与其他key-value存储有什么不同?
- Redis的内存占用情况怎么样?
- 都有哪些办法可以降低Redis的内存使用情况呢?
- 查看Redis使用情况及状态信息用什么命令?
- Redis的内存用完了会发生什么?
- Redis是单线程的,如何提高多核CPU的利用率?
Spring面试专题及答案
- 谈谈你对 Spring 的理解
- Spring 有哪些优点?
- Spring 中的设计模式
- 怎样开启注解装配以及常用注解
- 简单介绍下 Spring bean 的生命周期
Spring面试答案解析拓展
高并发多线程面试专题
- 现在有线程 T1、T2 和 T3。你如何确保 T2 线程在 T1 之后执行,并且 T3 线程在 T2 之后执行?
- Java 中新的 Lock 接口相对于同步代码块(synchronized block)有什么优势?如果让你实现一个高性能缓存,支持并发读取和单一写入,你如何保证数据完整性。
- Java 中 wait 和 sleep 方法有什么区别?
- 如何在 Java 中实现一个阻塞队列?
- 如何在 Java 中编写代码解决生产者消费者问题?
- 写一段死锁代码。你在 Java 中如何解决死锁?
高并发多线程面试解析与拓展
jvm面试专题与解析
- JVM 由哪些部分组成?
- JVM 内存划分?
- Java 的内存模型?
- 引用的分类?
- GC什么时候开始?
JVM面试专题解析与拓展!
面试解析与拓展**
[外链图片转存中…(img-pZ6a7fGy-1726126099976)]
jvm面试专题与解析
- JVM 由哪些部分组成?
- JVM 内存划分?
- Java 的内存模型?
- 引用的分类?
- GC什么时候开始?
JVM面试专题解析与拓展!
[外链图片转存中…(img-UQwCd5RZ-1726126099977)]