您的位置:首页 > 编程语言

EJB编程中有状态会话Bean和无状态会话Bean

2014-02-21 21:17 239 查看
在讲解EJB的两种会话Bean之前,我们先来介绍一下什么是EJB,它是用来做什么的。EJB (Enterprise JavaBean)是J2EE的规范之一,是一种服务器端组件模型,主要用于部署分布式应用程序。严格来讲它不是一种产品。EJB在我们的中间件编程中具有很重要的作用,其最重要的用处体现在以下两个方面:

1.分布式部署。EJB的一个重要用途就是分布式应用,从我们的实际情况来讲,很多的大型软件都是采用的分布式数据库,用来解决大数据问题。理论上说无论多大的数据量我们都可以通过分布式将其进行数据分割,从而解决网络拥塞以及性能问题。除了数据库的分布式部署外,我们也可以将不同的ejb对象部署在不同的机器上,在具体使用ejb对象的时候通过jndi进行查找,从而大大减轻的单个服务器的压力。

2.事务处理。分布式数据库系统的应用虽然极大的提高了系统性能,但是它所带来的另外一个问题就是事务处理问题,实际情况下当我们的操作涉及到多个数据库(分布式数据库)的时候,如果一个数据库操作成功另外一个失败的话,进行人的事务工回滚是非常困难的,ejb的出现恰恰为我们解决了这个问题。EJB容器对分布式数据库的事务支持主要有两种方式,一种是通过容器进行事务管理(即CMT),另一种是通过Bean管理的事务(即BMT)。这两种方式都是通过两阶段提交协议来管理多个分布式资源的事务的。当发起一个事务的时候两阶段提交协议更像是一个总负责人,而针对每一个数据库操作又有一个各自的负责人,提交事务之前,总负责人会询问每个人数据库操作负责人对各自的数据库操作是否成功,如果有任何一个数据库操作报告异常则回滚所有的数据库操作。

在简单了解了EJB的用处后我们再来详细的探讨以下有状态的会话Bean和无状态的会话Bean这两个概念。有状态的会话Bean和无状态的会话Bean是根据不同的需要提出的,比如当一个数据需要被多个用户共同操作的时候,我们必须把他放在无状态的会话Bean中,一个典型的应用是统计在线人数,每当一个用户登录成功后,必须对其进行+1操作。而像每个用户的个人数据必须是每个人一份,这是我们必须使用有状态的会话Bean。更简单的来讲无状态的会话Bean一旦被实例化后就会进入到会话池,所有的用户都可以对其进行操作,某单个用户的会话是否结束不影响无状态会话Bean实例的生命周期。而有状态的会话Bean更像是一个普通的java类,每个用户持有一个该java类的实例,在会话未结束之前bean保存了用户的私人信息,这些信息对外是不可见的,一旦会话结束bean的生命周期也随之结束。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: