EJB(Enterprise JavaBeans)是使用java语言构造可移植的、可重用的和可伸缩的业务应用程序的平台。从技术上来说,EJB不是一种产品,而是Sun在Java EE中定义的一种规范,该规范制定了一系列的API。
下图是EJB提供的服务:
EJB组件有三种类型:Session Bean、Message Drive Bean和Entity Bean。
1.Session Bean 用于实现业务逻辑,分有状态的和无状态的。
当客户端请求时,容器会选择其为客户端服务,可以直接访问数据库,但更多通过Entity Bean进行访问。
(1)有状态会话Bean:会把请求同特定的客户联系起来,在客户和bean之间 建立一种一对 一的关系。例如淘宝网的购物车就是一个有状态的会话Bean。用户往购物车里加入商品,输入地址信息然后提交订单,购物车Bean维持状态,因而它知道这些变量都关联某一特定用户。
(2)无状态会话Bean:并不知道客户或者涉及请求的上下文,从而使其成为单一请求的工具。例如:一个用户在Google中搜索关键字“Java”,客户应用程序联系一个无状态会话bean,给其传递参数,这个bean访问数据库,匹配符合检索条件的条目,并把记录传递给客户端,Bean不保留交互信息。因此,多个客户程序可以同时访问无状态会话Bean。
2.Entity Bean :表示会话终止之后持久存在的业务对象或者数据。通常作为数据库中的单一记录存在。
注意:实体Bean是EJB1.X和EJB2.X中的组件,在EJB3.X中,已经被JPA所代替。
3.Meassage Drive Bean :会话Bean和实体Bean都是以同步方式为EJB客户提供服务。客户发出请求然后等待Bean发回结果。 消息驱动Bean,采用Java消息服务JMS(Java Messaging Service),异步通信的方式,使得客户和Bean都无须依赖对方的直接响应。
三、EJB的发展史
EJB1.0:
最初版本支持有状态和无状态服务器对象(会话Bean),以及可选支持实体Bean。
优点:提供可移植性和远程特性
缺点:远程基础结构和按值传递的语义的开销大。
EJB1.1:
要求支持实体Bean,引入XML部署描述文件
EJB2.0
引入本地接口弥补远程接口造成的开销和按值传递的缺陷。
引入消息驱动Bean,参与异步消息系统
引入EJB查询语言EJB QL
EJB2.1
添加web服务支持
允许会话bean暴露接口
添加计时器服务
扩展EJB QL功能
引入XML schema替换 ejb-jar.xml部署文件的DTD。
EJB3.0
最重要的改动是实体Bean被替换为POJO,可以运行在EJB容器的外部
会话Bean不再需要主接口或专有的组件接口。
EJB3.1
进一步简化开发模型,最大优势声明横切方面。
总结:一说到EJB给人感觉很高大尚,并且很神秘。虽然这次项目中用到了EJB,但是目前对它的理解还是停留在神秘的阶段。通过这一个多月的项目学习, EJB给我的感受就是它封装了系统的业务逻辑,放到一个组件中,并且将这个组件部署到一个服务器上运行。