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的更多相关文章

  1. J2EE基础之Web服务简介

    J2EE基础之Web服务简介 1.什么是Web服务? 在人们的日常生活中,经常会查询网页上某城市的天气信息,这些信息都是动态的.实时的,它是专业的气象站提供的一种服务.例如,在网上购物时,通常采用网上 ...

  2. J2EE相关概念,EJB/JNDI/JMS/RMI等

    J2EE 四层模型 J2EE的核心API.组件.相关概念 JDBC(Java Database Connectivity) JNDI(Java Name and Directory Interface ...

  3. J2EE基础之JavaBean

    J2EE基础之JavaBean 1.什么是JavaBean? JavaBean本质上来说就是一个Java类,它通过封装属性和方法成为具有独立功能.可重复使用的,并可以与其他控件通信的组件对象.通过在J ...

  4. J2EE基础之JSP

    J2EE基础之JSP 1.JSP简介 JSP是JavaServer的缩写,是由Sun Microsystems公司倡导.许多公司参与一起建立的一种动态网页技术标准.在HTML文件中加入Java程序代码 ...

  5. J2EE基础之Servlet

    J2EE基础之Servlet 1.  什么是Servlet? Servlet即Java服务小程序,是使用应用程序设计接口以及相关类和方法的Java程序.它可以作为一种插件,像Applet程序一样嵌入到 ...

  6. J2EE基础总结(1)——J2EE入门

    J2EE诞生的背景 在传统的开发模式(单层应用结构)下.应用普遍存在下面致命缺点: - 数据.页面和业务逻辑在一个逻辑层次中.功能紧密耦合. - 代码重用性极低,可维护性差. - 应用耦合度高,全然没 ...

  7. 2016-09-06 J2EE基础知识之不知

    1.中间件.容器.Web服务器 1.1中间件 中间件是提供系统软件和应用软件之间连接的软件,以便于软件各部件之间的沟通.中间件处于操作系统和更高一级应用程序之间. J2EE提出的背景: 1)企业级应用 ...

  8. 剑指Offer——知识点储备-J2EE基础

    剑指Offer--知识点储备-J2EE基础 9.2 jdk 1.8的新特性(核心是Lambda 表达式) 参考链接:http://www.bubuko.com/infodetail-690646.ht ...

  9. J2EE基础总结(5)——EJB

    什么是EJB     JB事实上就是企业Java Beans. EJB是J2EE平台的重要组成部分. J2EE平台基于组件的企业级应用架构,提供多 层次.分布式和高事务的功能特点.     EJB提供 ...

随机推荐

  1. [WCF编程]10.操作:流操作

    一.流操作概述 在默认情况下,当客户端调用服务时,服务只有在接收到完整的消息后才会被调用,同样,客户端只有在包含了调用结果的返回消息被完整接受时,才会解除对它的阻塞. 对于数据量小的消息,这种交换模式 ...

  2. jenkins中使用tfs插件做增量的版本发布部署

    一 配置介绍 使用jenkins的tfs插件进行,源码的下载,编译,打包的操作,然后使用windows的批处理命令,在局域网内(或者本机)把打包的release包,删除掉web.config,然后靠配 ...

  3. c# asp.net4.0尚未在web服务器上注册

    辗转无数论坛,感谢http://bbs.csdn.net/topics/390992746 microsoft官方文档: https://blogs.msdn.microsoft.com/webdev ...

  4. 开源UML工具推荐

    1.StarUML StarUML是一个开源UML项目,可以开发快速,灵活,可扩展,多功能并且免费的UML/MDA平台.此项目运行在Win32平台之上.StarUML项目的目标是成为RationalR ...

  5. html 输入框 只能输入数字 只能输入字母数字组合

    JS判断只能是数字和小数点 1.文本框只能输入数字代码(小数点也不能输入) <input onkeyup="this.value=this.value.replace(/\D/g,'' ...

  6. Lind.DDD.Repositories.Redis层介绍

    回到目录 之前已经发生了 大叔之前介绍过关于redis的文章,有缓存,队列,分布式pub/sub,数据集缓存以及仓储redis的实现等等,而今天在Lind.DDD的持久化组件里,redis当然也有一席 ...

  7. 取消IE默认下载工具为迅雷

    需求:企业访问内部WEB系统下载文件时,IE默认下载工具设置为迅雷,则弹出迅雷下载框.现需要直接弹出IE下载保存框. 方案:打开迅雷,进行撤销默认下载工具. 1.迅雷5: 1.1. 打开迅雷下载工具 ...

  8. TouchPoint.js – 可视化展示 HTML 原型点击效果

    TouchPoint.js 是一个用于 HTML 原型展示的 JavaScript 库(作为UX过程的一部分),通过视觉表现用户在屏幕上的点击.TouchPoint 是高度可定制,非常适合屏幕录制,用 ...

  9. window对象的属性及事件。

    不同的运行环境有不同的“顶层对象”,而在浏览器的环境中,顶层对象就是window对象.window就是指当前的浏览器窗口. 例:var a = 1: window.a; //1 1.window对象的 ...

  10. First,FirstOrDefault,Single,SingleOrDefault的区别

    操作符 如果源序列是空的 源序列只包含一个元素 源序列包含多个元素 First 抛异常 返回该元素 返回第一个元素 FirstOrDefault 返回default(TSource) 返回该元素 返回 ...