J2EE基础之EJB全面了解_java

1、什么是EJB?

 EJB(Enterprise Java Beans),是JavaEE中的商业应用组件技术,是JavaEE三大组件(Servlet,JSP,EJB)之一。EJB提供了让客户端使用远程分布式对象的框架,极大地简化了具有良好的可扩充性的企业级应用的开发。EJB组件结构是基于组件的分布式计算结构,是分布式应用系统中的组件。

EJB是Java服务器端服务框架的规范,为服务器端构件系统定义了一个技术规范。该规范能提供一个标准的、分布式的、基于面向对象的体系结构。它为构件开发者和使用者屏蔽掉复杂的系统级底层功能实现,使开发者专注于业务逻辑的实现,其中一些复杂的底层服务由EJB容器负责。EJB可以根据应用的增长而扩展,EJB服务器提供了负载平衡功能,以及资源的访问权限控制。

2、EJB容器及组件间通信

 EJB容器为EJB组件提供了运行环境,EJB容器管理EJB的方式与Web容器管理Servlet的方式类似,EJB必须在EJB容器里运行。EJB容器主要管理了EJB的持久性、生命周期管理、安全性管理、事务管理、远程连接、并发处理、集群和负载均衡等问题。容器管理EJB组件的实例,使EJB组件实现最大的效能和内存利用率。容器能够激活和钝化EJB组件、管理实例池等。容器负责管理分布式事务处理的复杂问题,为远程连接管理低层的通信问题,而且对EJB组件的开发者和客户都隐蔽了通信问题。因此,EJB组件开发人员可以把精力集中于封装商务逻辑,容器负责处理其他一切事务。EJB通过ejbContent、JNDJ、回调函数等机制与容器交互。

JBoss是一个管理EJB的容器和服务器,支持EJB1.1、EJB2.0和EJB3的规范,其一般和Tomcat或Jetty绑定使用。

下面请看图一(EJB容器的工作原理图):

图一:EJB容器工作原理

EJB组件是一种分布式对象,当它被实例化后,可以与其他地址空间中的应用程序进行通信。EJB实例被封装在框架(skeleton)对象中,它通过存根(stub)对象与客户端交流。存根不包括商务逻辑,但实现了商业接口。每当存根商业接口上的商业方法被调用时,存根就把网络消息发送给框架,告诉它调用了哪些方法。框架调用EJB实例的相应方法,并把EJB实例返回的结果发送给存根,由存根把这些结果再返回给相应的应用程序。通过存根和框架这两个中间对象,屏蔽了分布式对象之间的复杂通信过程。框架由容器实现,而存根由开发工具自动生成,二者都不需要编写代码。下面请看图二(EJB组件通信原理图):

图二:EJB组件间通信原理

3、EJB分类

 EJB组件可以分为会话Bean和消息驱动Bean两种。会话Bean封装了商务逻辑,客户端可以通过本地、远程、Web服务的方式调用会话Bean的方法来访问部署在服务器上的应用程序,从而调用其他Bean的方法,会话Bean不具有持久性,即它的数据不保存在数据库里。其中会话Bean又包括有状态会话Bean、无状态会话Bean和单件会话Bean三种。消息驱动Bean通常用作特定类型消息的监听器,使JavaEE可以处理异步消息,而客户端不会通过接口访问消息驱动Bean。

下面将依次具体介绍有状态会话Bean、无状态会话Bean、单件会话Bean和消息驱动会话Bean。

4、无状态会话Bean

 无状态会话Bean只为客户端提供商务逻辑,不为客户端保留会话状态。在客户端调用无状态会话Bean的方法时,对应会话Bean的属性会描述这个调用状态,但仅仅只在该方法调用期间保持这个状态。当方法调用结束,状态就被清除。

无状态会话Bean的生命周期由容器控制。当EJB容器收到客户端对无状态会话Bean的请求时,如果EJB不存在,则容器会创建一个Bean的实例,再将需要的资源注入组件,然后容器回调PostConstruct方法,组件创建完毕。此时,Bean从“不存在”状态转换到“存在”状态。客户端调用结束,容器回调PreDestroy方法,Bean将被销毁,此时,Bean从“存在”状态转换成“不存在”状态。下面请看图三(无状态会话Bean的生命周期):

 

图三:无状态会话Bean的生命周期

5、有状态会话Bean

有状态会话Bean为用户保留了一次会话状态,它不能像无状态会话Bean一样被放到组件池里让不同用户共享。对于有状态会话Bean来说,只要有客户端发送请求,容器就创建一个实例与该客户端对应,一个客户端对应一个实例。在生存期内,有状态会话Bean保持了用户的信息,一旦会话结束,有状态会话Bean的生命周期也告结束。

有状态会话Bean有三种活动状态:不存在、活动和钝化。当有状态会话Bean处于活动状态一段时间后,如果仍然没有收到外部客户端的请求,为了节省系统资源,容器会把有状态会话Bean中的状态信息序列化到临时存储空间,并把有状态会话Bean从内存中移除,这个过程称为“钝化”。在钝化之前,容器回调PrePassivate方法。当容器收到对已经被钝化的有状态会话Bean的请求,会重新初始化有状态会话Bean的实例,并将状态信息从临时空间取出,使之重新回到活动状态,这个过程称之为“激活”。在激活之后,容器回调ProActivate方法。当有状态会话Bean钝化一段时间后,容器将彻底清除该实例,回调PreDestroy方法。下面请看图四(有状态会话Bean的生命周期):

 

图四:有状态会话Bean的生命周期

6、单间会话Bean

单件会话Bean对每个应用程序实例化一次,并且在应用程序的生命周期中一直存在。单件会话Bean为特定的情景而设计,客户端可以以共享且并发的模式访问这个唯一的EJB实例。

单件会话Bean与无状态会话Bean很相似,区别在于单件会话Bean在应用中只有一个实例,而无状态会话Bean可以有很多实例,每一个实例都被放在组件池里,使用户共享。

单件会话Bean像无状态会话Bean一样,从不钝化。其生命周期只包含两种状体:“不存在”和“存在”。下面请看图五(单件会话Bean的生命周期):

图五:单件会话Bean的生命周期   

7、消息驱动Bean

消息驱动Bean是设计用来专门处理基于消息请求的组件。消息驱动Bean集成了Java消息服务(Java Message Service,JMS)和企业Bean的功能。不能由客户端直接获取其引用而调用方法,只能由系统消息来启动。

EJB容器通常创建一个消息驱动Bean的组件池。与无状态会话Bean类似,消息驱动Bean从不被钝化,其生命周期只包含两个阶段:不存在和存在。

 消息驱动Bean类必须实现MessageListener接口。当容器检测到Bean监听的队列里的一条消息时,就调用onMessage()方法,将消息作为参数传入。

时间: 2024-11-05 12:19:31

J2EE基础之EJB全面了解_java的相关文章

走上开放之路: ASP开发人员的J2EE基础(下)

相关文章:走上开放之路: ASP 开发人员的 J2EE 基础(上) ASP/COM 和 J2EE 应用程序模型 接下来研究不同的应用程序体系结构,您可以使用这些体系结构开发 J2EE 应用程序并将 其与相应的 ASP/COM 应用程序体系结构关联起来. 使用 Java Servlets 编程:基础知识 编写 Java Servlets 就可以对来自 URL 的请求进行可编程控制.典型的 servlet 调用 类似于以下步骤: 客户机向 Web 服务器发出请求,将 servlet 命名为 URL

走上开放之路: .NET开发人员的J2EE基础(下)

相关文章:走上开放之路: .NET 开发人员的 J2EE 基础(上) .NET 和 J2EE 应用模型:理解它们的区别 要理解 J2EE 应用程序体系结构的基本概念,第一步是确定如何将现有的 ASP.NET 应用 程序移植到一个基于 J2EE 的模型,或者确定如何从头编写一个 J2EE 应用程序.我们将考 察几个 ASP.NET 模型,以及可能如何将它们转换为根据 J2EE 组件构建的模型.您将看到简 单的"意大利面条式的代码"如何演进为一个更优雅.可复用和可扩展的环境.在研究一些 代

J2EE基础:Servlet实现代理服务器功能

J2EE基础:Servlet实现代理服务器功能. import java.io.*; import java.net.*; import javax.servlet.*; import javax.servlet.http.*; public class Proxy extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletExce

java、J2EE基础问题汇总

j2ee|问题 一.Java基础方面: 1,作用域public,protected,private,以及不写时的区别 public 在其他的包中的类也可以引用,protected只限于同一个包内的类,private只有自己可以使用.不写的时候和protected一样. 2,ArrayList和Vector的区别 ArrayList需要预先定义大小,Vector不用: Vector的方法都是同步的(Synchronized),是线程安全的(thread-safe),而ArrayList的方法不是,

j2EE基础概念(总结)

j2ee|概念 Java基础方面: 1,作用域public,protected,private,以及不写时的区别 2,ArrayList和Vector的区别,HashMap和Hashtable的区别 3,char型变量能不能定义为一个中文?为什么? 4,多线程有几种表示方法,都是什么?同步有几种实现方法,都是什么? 5,继承时候类的执行顺序问题,一般都是选择题,问你将会打印出什么? 6,内部类的实现方式? 7,垃圾回收机制,如何优化程序? 8,float型float f=3.4是否正确? Jsp

J2EE基础:对于Spring初学者的学习建议

j2ee|初学 一.首先Java的基础.面向对象的基础和设计模式的基础知识是必不可少的. 如果连这些基础知道都不够扎实的话,我建议还是先去补补课.关于设计模式我觉得不用学太多,但以下三个模式是学习Spring必不可少的:factory模式(包括简单工厂和抽象工厂),Strategy模式,Template method模式.如果不掌握这些你就根本没法领悟Spring的精髓,只能依样画葫芦地照搬,这是很可怕的事. 关于这方面的书的建议已经够多的,我就不说了.我这里强烈建议的书可能让人有点意外,那就是

J2EE基础 用Struts框架开发MVC系统步骤

j2ee 由于Struts已经为我们提供了一个非常好的MVC框架,我们利用Struts开发MVC系统时可以大大加快开发的速度.在开发时可以采用的一个开发流程如下: 1. 收集和定义应用需求. 2. 基于数据采集和显示的原则定义和开发"屏幕显示"需求 . 3. 为每一个"屏幕显示"定义访问路径. 4. 定义ActionMappings建立到应用业务逻辑之间的联系. 5. 开发满足"屏幕显示"需求的所有支持对象. 6. 基于每一个"屏幕显示

J2EE基础:用Hibernate企业框架的优点

j2ee 一.Hibernate是JDBC的轻量级的对象封装,它是一个独立的对象持久层框架,和App Server,和EJB没有什么必然的联系.Hibernate可以用在任何JDBC可以使用的场合,例如Java应用程序的数据库访问代码,DAO接口的实现类,甚至可以是BMP里面的访问数据库的代码.从这个意义上来说,Hibernate和EB不是一个范畴的东西,也不存在非此即彼的关系. 二.Hibernate是一个和JDBC密切关联的框架,所以Hibernate的兼容性和JDBC驱动,和数据库都有一定

J2EE基础:Struts框架初学者从这里入门

j2ee|初学 概述: 1.Struts是采用Java Servlet/JavaServer Pages技术,开发Web应用程序的开放源码的framework. 2.采用Struts能开发出基于MVC(Model-View-Controller)设计模式的应用构架. 3.下载地址:http://jakarta.apache.org/struts 背景: 1.Struts最早是作为Apache Jakarta项目的组成部分问世运作.项目的创立者希望通过对该项目的研究,改进和提高Java Serve