EJB3.0读书笔记 之 会话Bean介绍(一)

原创 2012年03月31日 16:59:19

1 生命周期:从客户视图看待,Bean实例开始于客户获得其引用时,而终止于客户会话的中介。通常,客户会话(Client Session)的持续期决定了使用中的会话Bean的存活期。会话Bean仅仅是内存对象,一旦其生存的周边环境遭到破坏,会话Bean也将不复存在。会话Bean并不是持久化的。实体Bean是持久化对象,是永久性存储源的组成部分。

2 会话Bean的子类型:无状态会话Bean和有状态会话Bean。

(1) 无状态会话Bean

           该Bean服务的业务过程只需要单个业务方法即可完成。因为不需要维护客户多个方法调用间的会话状态,因此是无状态的。

           无状态指的是不存在会话状态。无状态会话Bean能够含有同特定客户不相关的状态信息。无状态会话Bean不保留历史会话信息。

(2)有状态会话Bean

           该Bean服务的业务过程能够延伸到多个方法请求或者事物中。有状态会话Bean需要为单个客户保存状态信息。如果在方法调用期间有状态会话Bean的状态发生改变,则这种改变必须反映到同一客户的随后调用中。

3 有状态会话Bean的不同点

(1)实现实例池功能

          为了限制内存中运行的有状态会话Bean实例的数量,EJB容器需要将有状态会话Bean的会话状态保存到硬盘或其他存储源中,该过程称之为挂起。

          一旦被挂起的有状态会话Bean实例的客户再次调用它,被挂起的会话状态将重新回到有状态会话Bean实例中,该过程称之为激活。

          大部分容器使用最近最少使用(Least Recently Used,LRU)挂起策略,即简单地挂起最近没有使用到的有状态会话Bean实例。但是,凡是参与到事务中的有状态会话Bean实例,EJB容器必须在事务完成后才能够挂起Bean实例。

          激活有状态会话Bean实例,大部分EJB容器通常都会使用just-in-time算法,即只有在客户请求到来时,才会激活有状态会话Bean实例。如果客户请求传入到EJB容器中,而且容器已经挂起了该客户的会话状态,则容器会马上激活它,从而将挂起的状态信息写入到内存中。

(2)维护会话状态的规则

          在挂起有状态会话Bean实例时,EJB容器借助于对象序列化将会话状态转换成二进制blob,然后写入到硬盘。在转移会话状态信息后,有状态会话Bean实例(指挂起了会话状态的那些EJB实例)还能够服务于其他客户,即同新的客户进行新的会话过程。

          激活过程:将写入到硬盘的序列化blob读入到内存中,然后转换成有状态会话Bean实例的会话状态信息。

          EJB组件中的成员变量符合如下条件,则可以认为它是会话状态的组成部分之一:

                    <1>成员变量是非transient类型的Java原始类型(primitive)。

                    <2>成员变量是非transient类型的Java对象类型(继承于java.lang.Object)。

         Java的serialization提供了一种持久化对象实例的机制。当持久化对象时,可能有一个特殊的对象数据成员,不用serialization机制来保存它。为了在一个特定对象的一个域上关闭serialization,可以在这个域前加上关键字transient。Transient是用来表示一个域不是该对象串行化的一部分。当一个对象被串行化的时候,transient型变量的值不包括在串行化的表示中,然后非transient型的变量是被包括进去的。

        在完成挂起和激活操作时,EJB容器必须保存如下几方面的信息:

                   <1>本地或远程业务接口引用

                   <2>针对SessionContext对象、UserTransaction、EntityManager或EntityManagerFactory对象、Timer对象的引用

                   <3>JNDI命名上下文







版权声明:本文为博主原创文章,未经博主允许不得转载。

EJB3.0 有状态会话bean无状态会话bean详解

在网上看到了这一篇文章详细描述了两种会话hean的区别,但因转载的人实在太多了,所以无法注明原文出处。只好用原创表示,对于文章的原创者,表示尊敬。   下面主要对Session  Bean讨论  ...
  • lijia415909
  • lijia415909
  • 2013年03月07日 16:48
  • 416

EJB3.0 有状态会话bean无状态会话bean详解

在网上看到了这一篇文章详细描述了两种会话hean的区别,但因转载的人实在太多了,所以无法注明原文出处。只好用原创表示,对于文章的原创者,表示尊敬。   下面主要对Session  Bean...
  • goodyuedandan
  • goodyuedandan
  • 2016年05月27日 15:20
  • 278

EJB3简介、环境搭建、的三种bean

简介:     EnterpriseJavaBeans是一个用于分布式业务应用的标准服务端组件模型。采用Enterprise JavaBeans架构编写的应用是可伸缩的、事务性的、多用户安全的。采用e...
  • crown_0726
  • crown_0726
  • 2015年04月04日 12:22
  • 486

EJB有状态的会话Bean和无状态的会话Bean的区别

在EJB里面,会话Bean分为两种,一种是有状态的会话Bean,另一种是无状态的会话Bean,本节主要讲解一下两者之间的区别。        对于有状态的会话Bean,这种情况属于,服务端与你单独开...
  • zc474235918
  • zc474235918
  • 2016年02月18日 16:59
  • 1554

ejb3.0学习之三:会话Bean的生命周期

上两节各写了EJB3.0会话bean的小例子,现在我们来看看他们的生命周期是怎么样的 1.无状态Bean(生命周期图) 说明:a、一开始Bean并不存在,如当服务器刚刚完成启动。 b、ejb容...
  • zhenlai2012
  • zhenlai2012
  • 2013年09月02日 20:44
  • 743

ejb3.0学习之一:无状态会话bean开发

1.介绍:ejb3.0把bean组件分为不同的类型,主要有 a、会话bean:(主要用于业务流程的建模,如对数据的crud) b、实体bean(用于建模业务数据) c、消息驱动bean(类似于会话be...
  • zhenlai2012
  • zhenlai2012
  • 2013年08月21日 07:57
  • 596

ejb3.0学习之二:有状态会话bean开发

1、说明: 有状态的会话bean与无状态的会话bean是有区别的 a.无状态会话bean中ejb组件会使他忘记过去,他不会维护方法调用其间的会话信息。 b.而有状态的就不一样,ejb容器会维护其方法调...
  • zhenlai2012
  • zhenlai2012
  • 2013年08月22日 20:59
  • 584

有状态会话bean

在会话bean综述中,描述了无状态和有状态bean的区别在于客户端和服务器之间交互形式不同。对于无状态会话bean,交互的开始和结束都在同一个方法中。有时客户端需要发出多个服务请求(需要调用多个方法)...
  • beijiguangyong
  • beijiguangyong
  • 2014年11月04日 22:27
  • 2180

有状态会话bean与无状态会话Bean的区别

有状态会话Bean和无状态会话Bean的区别 状态通常理解为对象的属性,那么无状态就是没有属性,有状态就是有属性,这种理解是不正确的。 这里的无状态确实与属于相关,但有状态会话Bean和无状态会话...
  • u011606984
  • u011606984
  • 2013年08月06日 11:49
  • 913

EJB 实体bean,会话bean,和消息驱动bean

http://javapub.iteye.com/blog/751459 EJB 3.0规范使开发EJB比过去更容易,可能诱惑你考虑开发第一个EJB。如果真是这种情况,那么祝贺你,你已经...
  • xianymo
  • xianymo
  • 2015年11月26日 11:51
  • 1357
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:EJB3.0读书笔记 之 会话Bean介绍(一)
举报原因:
原因补充:

(最多只允许输入30个字)