网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.Java基础-关于session的详细解释.
.Java应用技巧-Java中的发声提示.
.在 Java 类型中对称设计的重要性.
.Java解析XML文档——dom解析xml.
.Java容器分析—List和Set.
.将Java的class文件转为EXE的八种.
.Sun认证Java开发员(SCJD).
.实例讲解JAVA中“类”的应用.
.apache+Tomcat负载平衡设置详解.
.Tomcat5的web应用启动顺序详解.
.将 TOC 从 XML 带到 DHTML地带.
.JAVA程序员必读---编程中的一些共.
.深入浅析Tomcat配置技巧Top10.
.JAVA中用接口实现多继承和多态的.
.用LineNumberReader 提供更好的出.
.关于Java异常处理机制的深入理解.
.Apache WS Policy&nbs.
.Eclipse开发J2ME程序之Hello Wor.
.DWR - Direct Web Remoting 实际.
.Java实现汉字转换为拼音.

专稿:实战EJB之三 开发会话Bean(有状态会话Bean)

发表日期:2008-1-5



实战EJB系列



在以后的日子里,将由Jackliu向大家陆续提供一系列EJB教程,有学习EJB的朋友请同步参考EJB相关书籍,实战系列将以例程的方式帮助你理解这些基本的概念,其中将包括:



专稿:实战EJB之三 开发会话Bean(有状态会话Bean)(图一)
点击查看大图


所有章节完毕后将制作成pdf电子文档,供大家下载。



实战EJB之三 开发会话Bean(有状态会话Bean)


会话Bean可以分为有状态会话Bean(stateful Bean)和无状态会话Bean(stateless Bean),有状态会话Bean可以在客户访问之间保存数据,而无状态会话Bean不会在客户访问之间保存数据。两者都实现了Javax.ejb.SessionBean接口,EJB容器区通过部署文件ejb-jar.XML来判定是否为一个SessionBean提供保存状态的服务,另外,在程序实现上,无状态Bean不能声明实例变量,每个方法只能操作方法传来的参数,假如需要在引用期间维持一些数据状态,以在其他方法中可以引用,则可以把Bean设计成有状态会话Bean。在第二节中我们用一个SatatelessDate
Bean例子描述了开发无状态会话Bean的过程及特性,下面的一节将介绍关于有状态会话Bean的一些特性和寿命周期,并用一个例子来证实这些特性。


在本节中你将了解到:



  • 什么是有状态Session Bean?
  • 有状态Session Bean寿命周期
  • 编写一个有状态Session Bean程序
  • 部署到应用服务器
  • 开发和部署测试程序
  • 运行测试程序

什么是有状态Session Bean?


有状态会话Bean(Stateful Session Bean)就是在客户引用期间维护Bean中的所有实例数据的状态值,这些数据在引用期间可以被其他方法所引用,其他客户不会共享同一个Session
Bean的实例。Bean的状态被保存到临时存储体中,因为Bean是可以被序列化的,所以同样也可以把一个Bean状态保存到文件系统或数据库中。因为在调用方法时需要维护状态(这部分是有开销的),所以只有需要维护客户状态时才使用有状态会话Bean。典型的会话Bean是购物车,当一个客户第一次打开购物车时,系统为他分配一个购物车的会话Bean,在以后,每当客户选购了商品将改变购物车的商品记录,而这些记录数据将保存到用户会话数据中。


有状态Session Bean寿命周期


有状态Session Bean寿命周期由容器控制,Bean的客户并不实际拥有Bean的直接引用,当我们部署一个EJB时,容器会为这个Bean分配几个实例到组件池(component
pooling)中,当客户请求一个Bean时,J2EE服务器将一个预先被实例化的Bean分配出去,在客户的一次会话里,可以只引用一次Bean,就可以执行这个Bean的多个方法。假如又有客户请求同样一个Bean,容器检查池中空闲的Bean(不在方法中或事务中,假如一个客户长时间引用一个Bean但执行一个方法后需要等待一段时间再执行另一个方法,则这段时间也是空闲的),假如全部的实例都已用完则会自动生成一个新的实例放到池中,并分配给请求者。当负载减少时,池会自动治理Bean实例的数量,将多余的实例从池中释放。


有状态会话Bean的寿命周期比无状态会话Bean更加的复杂,有状态会话Bean有四种状态:



  1. 不存在
  2. 方法现成
  3. 事务中方法现成
  4. 钝化

如图3-1所示:



专稿:实战EJB之三 开发会话Bean(有状态会话Bean)(图二)


<图3-1>


有状态会话Bean的初始化状态为不存在,当有客户引用一个Bean时,按照顺序调用newInstance()、setSessionContext()和ejbCreate()方法,与第一节中讲到的无状态调用顺序相同。当处于方法现成状态时,假如客户调用remove()方法,则回到不存在状态,并触发Bean的ejbRemove()方法。假如客户长时间不调用Bean或服务器预备释放一些内存资源,则容器将这些Bean从组件池中钝化,钝化过程容器将调用Bean的ejbPassivate()方法,使程序员有机会在钝化Bean时释放分配的资源。当一个客户请求一个被钝化的Bean时,容器可以激活Bean,激活过程容器将调用ejbActivate()放,使程序员有机会在Bean转到方法现成状态时分配Bean所需的资源。



上一篇:专稿:实战EJB之四 开发实体CMP(EJB 1.1规范) 人气:762
下一篇:专稿:实战EJB之五 开发实体BMP(EJB 1.1规范) 人气:678
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐