J2EE基础之EJB全面了解

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()方法,将消息作为参数传入。

以上这篇J2EE基础之EJB全面了解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • EJB基础知识(入门必看)

    什么是EJB 可移植的,可重用的,可伸缩的业务应用程序的平台 为什么选择EJB 1. 易用性, 由EJB容器提供许多的服务, 开发人员只需要关注业务本身即可 2. 集成解决方案套装, 由应用服务器提供大量服务 3. 开放的JavaEE标准 4. 广泛的厂商支持 5. 稳定, 高质量的代码基础 6. 集群, 负载均衡, 故障转移 7. 易于开发允许可重用的组件 EJB容器提供的服务 1. 集成 2. 池化 3. 线程安全 4. 状态管理(针对有状态会话bean) 5. 消息服务器(针对消息驱动be

  • J2EE基础之EJB全面了解

    1.什么是EJB?  EJB(Enterprise Java Beans),是JavaEE中的商业应用组件技术,是JavaEE三大组件(Servlet,JSP,EJB)之一.EJB提供了让客户端使用远程分布式对象的框架,极大地简化了具有良好的可扩充性的企业级应用的开发.EJB组件结构是基于组件的分布式计算结构,是分布式应用系统中的组件. EJB是Java服务器端服务框架的规范,为服务器端构件系统定义了一个技术规范.该规范能提供一个标准的.分布式的.基于面向对象的体系结构.它为构件开发者和使用者屏

  • Java面试题及答案集锦(基础题122道,代码题19道)

    Java基础面试题及答案集锦(基础题122道,代码题19道),具体详情如下所示: 1.面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节.抽象包括两个方面,一是过程抽象,二是数据抽象. 2.继承: 继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法.对象的一个新类可以从现有的类中派生,这个过程称为类继承.新类继承了原始类的特性

  • Java老矣 尚能饭否?

    22 岁,对于一个技术人来说可谓正当壮年.但对于一门编程语言来说,情况可能又有不同.各类编程语言横空出世,纷战不休,然而 TIOBE 的语言排行榜上,Java 却露出了明显的颓势.这个老牌的语言,未来会是怎样? 写在前面 从 1995 年第一个版本发布到现在,Java 语言已经在跌宕起伏中走过了 22 年,最新的 Java 版本也已经迭代到 Java 9.当年 Java 语言的跨平台优势如今看来也只不过是家常小菜,Go.Rust 等语言横空出世,进一步拓宽了编程语言的边界.当年发明 Java 语

  • Java自学书籍推荐 程序员到架构师必看的书

    作为Java程序员来说,最痛苦的事情莫过于可以选择的范围太广,可以读的书太多,往往容易无所适从.我想就我自己读过的技术书籍中挑选出来一些,按照学习的先后顺序,推荐给大家,特别是那些想不断提高自己技术水平的Java程序员们. 一.Java编程入门类 对于没有Java编程经验的程序员要入门,随便读什么入门书籍都一样,这个阶段需要你快速的掌握Java基础语法和基本用法,宗旨就是"囫囵吞枣不求甚解",先对Java熟悉起来再说.用很短的时间快速过一遍Java语法,连懵带猜多写写代码,要"

  • [PHP]模板引擎Smarty深入浅出介绍

    Smarty介绍 什么是模版引擎 不知道从什么时候开始,有人开始对 HTML 内嵌入 Server Script 觉得不太满意.然而不论是微软的 ASP 或是开放源码的 PHP,都是属于内嵌 Server Script 的网页伺服端语言.因此也就有人想到,如果能把程序应用逻辑 (或称商业应用逻辑) 与网页呈现 (Layout) 逻辑分离的话,是不是会比较好呢? 其实这个问题早就存在已久,从交互式网页开始风行时,不论是 ASP 或是 PHP 的使用者都是身兼程序开发者与视觉设计师两种身份.可是通常

  • Java JNDI案例详解

    JNDI的理解 JNDI是 Java 命名与文件夹接口(Java Naming and Directory Interface),在J2EE规范中是重要的规范之中的一个,不少专家觉得,没有透彻理解JNDI的意义和作用,就没有真正掌握J2EE特别是EJB的知识.  那么,JNDI究竟起什么作用?//带着问题看文章是最有效的  要了解JNDI的作用,我们能够从"假设不用JNDI我们如何做?用了JNDI后我们又将如何做?"这个问题来探讨.  没有JNDI的做法:  程序猿开发时,知道要开发訪

  • 一篇文章带你详解Spring的概述

    目录 1.什么是 Spring ? 2.Spring 起源 3.Spring 特点 ①.方便解耦,简化开发 ②.AOP编程的支持 ③.声明式事务的支持 ④.方便程序的测试 ⑤.方便集成各种优秀框架 ⑥.降低Java EE API的使用难度 ⑦.Java 源码是经典学习范例 4.Spring 框架结构 5.Spring 框架特征 6.Spring 优点 总结: 1.什么是 Spring ? Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Jo

  • Java中关于XML的API

    简单介绍一下Java关于xml的API,这样大家看到了缩写就知道是干什么的了.水平有限,多多包涵. 1.JAXP(Java API for XML Parsing) 2.JAXB(Java API for XML Binding) 3.JAXM(Java API for XML Messaging) 4.JAX-RPC(Java API for XML-RPC) 1.JAXP定义了在Java中使用DOM, SAX, XSLT的通用的接口.这样在你的程序中你只要使用这些通用的接口,当你需要改变具体

  • ColdFusionMX 编程指南 安装教程

    第一期:进入Macromedia ColdFusionMX 世界 程序开发: 教程编写:  MJking 版权所有:   系统及环境需求: Window2000/XP 256M RAM Coldfusion MX(Developer Edition) Microsoft Access 任何一款文本编辑器(本教程默认为Coldfusion Studio 5 + DreamweaverMX) 序言 在大家进入ColdFusion MX的世界之前,应该先了解一下Macromedia公司最新的MX家族产

  • PHP模板引擎SMARTY

    用PHP实现MVC开发模式的逻辑层和表示层有多种模板引擎可供选择, 但是官方引擎SMARTY诞生后,选择就有了变化.它的理念和实现都是 相当"前卫"的.本文主要讨论SMARTY之于其他模板引擎的不同特点, 简要介绍了该引擎的安装及使用,并用一个小的测试案例对比了 SMARTY和PHPLIB template的速度和易用性. 一.MVC需要模板 MVC最早是在SmallTalk语言的开发过程中总结出的一种设计模式,MVC分别代 表了"模型"."视图"

随机推荐