【EJB】会话Bean(Session Bean)

会话Bean的类型


会话bean有三种类型:有状态,无状态和单例。

有状态会话Bean

对象的状态由其实例变量的值组成。在有状态会话bean中,实例变量表示唯一客户/ bean会话的状态。由于客户端与bean交互(“对话”),这个状态通常被称为会话状态。

顾名思义,会话bean类似于交互式会话。会话bean不共享; 它只能有一个客户端,就像一个交互式会话只能有一个用户一样。当客户端终止时,其会话bean似乎终止,不再与客户端关联。

该状态在客户端/ bean会话期间被保留。如果客户端删除了这个bean,这个会话就结束了,这个状态就消失了。然而,这种状态的暂时性不是问题,因为当客户端和bean之间的对话结束时,不需要保持状态。

无状态会话Bean

无状态会话bean不会与客户端保持对话状态。当客户端调用无状态bean的方法时,bean的实例变量可能包含特定于该客户端的状态,但仅在调用期间。该方法完成后,客户端特定状态不应保留。但是,客户端可能会更改共用无状态bean中的实例变量的状态,并且此状态将被保留到下一次对共用无状态bean的调用中。除了在方法调用期间,无状态bean的所有实例都是等价的,允许EJB容器将实例分配给任何客户端。也就是说,无状态会话bean的状态应该适用于所有客户端。

因为它们可以支持多个客户端,所以无状态会话bean可以为需要大量客户端的应用程序提供更好的可伸缩性。通常情况下,应用程序需要比有状态会话bean更少的无状态会话bean来支持相同数量的客户端。

无状态会话bean可以实现Web服务,但是有状态会话bean不能。

单例会话Bean

单例会话****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注解的方法。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

我还为大家准备了一套体系化的架构师学习资料包以及BAT面试资料,供大家参考及学习

已经将知识体系整理好(源码,笔记,PPT,学习视频)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
中…(img-Va0hBqMh-1713523411393)]

[外链图片转存中…(img-EXVtdZvg-1713523411393)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 19
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值