【EJB】会话Bean(Session Bean)
2018-01-16 17:26
537 查看
前言
会话bean封装了可以由客户端通过本地,远程或Web服务客户端视图以编程方式调用的业务逻辑。要访问部署在服务器上的应用程序,客户机将调用会话Bean的方法。会话bean为客户端执行工作,通过在服务器内执行业务任务来避免复杂性。会话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<String> 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; } }无状态会话Bean
package org.sample; @Stateless public class AccountSessionBean{ public float withdraw(){} public void deposit(float amount){} }单例会话Bean
@Singleton public class MySingleton{ }
小结
会话Bean是企业Bean类型中的一种,那么另外的一种消息驱动Bean又是什么呢?这两者之间又有什么区别呢?敬请看小编的下一遍博客吧。相关文章推荐
- 在ejb的会话bean(session bean)中使用数据源(DataSource)!!!
- ejb3(session bean)会话bean的使用!!!
- EJB3 session bean(会话bean)
- EJB 会话bean and Jboss JNDI
- EJB3.0开发指南:有状态会话Bean
- EJB两种会话Bean的误解
- Java之旅EJB(2)——三种bean之会话bean
- Eclipse3.2.1+jboss4.0.5开发J2EE中的EJB(无状态会话Bean 附图)
- EJB开发第一个无状态会话bean、开发EJBclient
- EJB 3.0中会话Bean,实体Bean,消息驱动Bean的作用和例子
- EJB-无状态会话Bean实例+与状态bean区别
- 【EJB】Developing EJB Applications -- Chapter5(调用会话Bean)
- EJB系列 - 会话Bean基础知识
- Session Bean(会话Bean)
- EJB——会话bean(一)
- EJB会话bean查找和注入注解两种方式
- EJB——会话bean(二)
- ejb2.0---无状态会话bean
- EJB3~单例会话bean
- EJB中有状态会话Bean的理解