【永恒的瞬间】
☜Give me hapy ☞
EJB是sun的服务器端组件模型,最大的用处是部署分布式应用程序,类似微软的.com技术。凭借java跨平台的优势,用EJB技术部署的分布式系统可以不限于特定的平台。


EJB (Enterprise JavaBean)是J2EE的一部分,定义了一个用于开发基于组件的企业多重应用程序的标准。其特点包括网络服务支持和核心开发工具(SDK)。

在J2EE里,Enterprise Java Beans(EJB)称为Java 企业Bean,是Java的核心代码,分别是会话Bean(Session Bean),实体Bean(Entity Bean)和消息驱动Bean(MessageDriven Bean)。  

1.Session Bean用于实现业务逻辑,它可以是有状态的,也可以是无状态的。每当客户端请求时,容器就会选择一个Session Bean来为客户端服务。Session Bean可以直接访问数据库,但更多时候,它会通过Entity Bean实现数据访问。

2.Entity Bean是域模型对象,用于实现O/R映射,负责将数据库中的表记录映射为内存中的Entity对象,事实上,创建一个Entity Bean对象相当于新建一条记录,删除一个Entity Bean会同时从数据库中删除对应记录,修改一个Entity Bean时,容器会自动将Entity Bean的状态和数据库同步。

3.MessageDriven Bean是EJB2.0中引入的新的企业Bean,它基于JMS消息,只能接收客户端发送的JMS消息然后处理。MDB实际上是一个异步的无状态 Session Bean,客户端调用MDB后无需等待,立刻返回,MDB将异步处理客户请求。这适合于需要异步处理请求的场合,比如订单处理,这样就能避免客户端长时间 的等待一个方法调用直到返回结果。

EJB实际上是SUN的J2EE中的一套规范,并且规定了一系列的API用来实现把EJB概念转换成EJB产品.EJB是BEANS,BEANS是什么概 念,那就是得有一个容纳她,让她可劲造腾的地方,就是得有容器.EJB必须生存在EJB容器中.这个容器可是功能强大之极!她首先要包装你BEAN, EJB的客户程序实际上从来就不和你编写的EJB直接打交道,他们之间是通过HOME/REMOTE接口来发生关系的.它负责你的BEAN的所有的吃喝拉 萨睡,比如BEAN的持续化,安全性,事务管理。。。

一.什么是 EJB?

一个技术规范:EJB 从技术上而言不是一种"产品"
EJB 是一种标准描述了构建应用组件要解决的:
可扩展 (Scalable)
分布式 (Distributed)
事务处理 (Transactional)
数据存储 (Persistent)
安全性 (Secure)

二.Sun 对 EJB 的期望

提供一个标准的分布的、基于 OO 的组件架构
屏蔽复杂的系统级功能需求
Write once, run anywhere
与非 Java 应用之间的互操作能力
兼容 CORBA 标准

三.特征
  • 包含处理企业数据的业务逻辑;

  • EJB实例由容器在运行时创建及管理;

  • 可在部署时通过编辑环境项(environment entry)定制EJB的行为;

  • EJB的各种服务设置信息,如事务及安全属性,从EJB的类文件中分离出来。在部署和运行时,可通过工具对EJB的服务设置信息进行管理;

  • EJB部署到EJB容器后,客户端才可通过EJB容器对EJB进行间接访问;

  • EJB可使用任何EJB规范中指定可以使用的服务;

  • EJB可以不经改动代码或重新编译,即可直接装配到一个新的应用中;

  • 当EJB被部署到不同的容器或服务器时,EJB开发者定义的客户视图(Client View)不会发生改变。


四:为什么选择 EJB?

EJB 服务器完成"繁杂"的工作:
  应用开发人员关注于业务逻辑的实现而不是底层的实现机制(类似于 4GL 语言设计的目标)

事务处理:
  服务器提供对EJB组件的事务控制服务,多个业务操作同时成功,或全部失败,可以通过代码外的 部署描述来设置组件事务处理级别 ;


可扩展性:
   EJB 可以根据您应用的增长而扩展,EJB 服务器往往还提供了负载均衡和
安全性:
   由 EJB 服务器提供资源的访问权限控制

四.EJB 架构

EJB的客户端有以下几种类型:

  • 运行于相同容器或其他容器中的EJB;

  • 一般的Java类,如Java应用程序、applet、servlet;

  • 非Java的客户环境,如非Java语言编写的CORBA客户。

EJB组件模型的组成部分

一般,EJB组件由以下几个部分组成,即组件服务器 (Server),容器 (Container),类 (Class) ,实例 (Instance)
接口、Home接口,Remote 接口、Enterprise Bean类和部署描述文件(Message-driven Bean不具有组件接口和Home接口)。下面分别描述这些组成部分

EJB的组件接口
  客户端通过EJB的组件接口访问EJB对象,组件接口中定义了可被客户端访问的业务方法(Message-driven Bean不具有组件接口)。组件接口分为远程接口和本地接口。

EJB对象通过远程或本地接口,提供远程客户访问或本地客户访问的支持。

   提供远程接口的EJB拥有可被远程客户访问或本地客户访问的能力。对于提供了远程接口的对象,客户可通过标准的Java RMI(Remote Method Invocation)进行远程对象调用。

  提供本地接口的EJB只可被本地组件通过本地接口进行调用。所谓本地组件,即是运行于相同Java虚拟机中的本地EJB对象。本地调用通过一般的标准Java编程语言接口进行。

EJB可以同时提供本地接口和远程接口,但一般只提供二者之一。

HOME接口
   EJB2.0规定了通过Home接口来提供客户端创建、清除和在同种类型的EJB中查找特定EJB对象的方法(Message-driven Bean不包含Home接口)。对于提供远程接口的EJB,需要提供远程Home接口;提供本地接口的EJB,需要提供本地Home接口。

   Home接口由EJB开发人员编写,远程Home接口必须扩展(extend)javax.ejb.EJBHome接口;本地Home接口必须扩展(extend)javax.ejb.EJBLocalHome接口。

EJB客户端通过标准的JNDI(Java Naming and Directory Interface™)API定位Home接口。

 EJB3.0中,Home接口的功能由依赖注入以及可选的生命周期回调方法实现。EJB组件不再需要提供Home接口

Enterprise Bean类
Enterprise Bean类包含了组件的实现细节。

  Enterprise Bean类由EJB开发人员编写,EJB2.0规范中的Enterprise Bean组件,必须分别声明实现如下接口,javax.ejb.SessionBean、javax.ejb.EntityBean和javax.ejb.MessageDrivenBean。符合EJB3.0规范的Enterprise Bean组件则不须实现以上接口,而使用@Stateful、@Stateless、@MessageDriven注解标记EJB类。

部署描述文件
   部署描述文件是用于包含Enterprise Bean的运行时属性(安全性,事务性等等)信息的文件,与以上部分一起形成完整的EJB组件,通常部署描述文件使用图形化的部署工具进行处理。在EJB3.0规范中,EJB部署描述文件并不是必须的,可以在代码中使用注解来为EJB类附加部署信息。但部署描述文件可以令管理人员在部署时更为灵活。EJB3.0规范规定,当部署描述文件的信息与程序代码中的注解信息出现冲突时,以部署描述文件为准。这样管理人员就可以通过修改部署描述文件来改变部署信息,而不须重新编译应用程序。


五. 简化的编程模型

关注于业务逻辑实现:EJB 负责生命周期 (lifecycle), 数据存储 (persistence), 事务处理语义 (transactional semantic), 安全(security), ...
通用的编程模型:各种服务的高层 API
Java 是其编程语言


EJB( 业务逻辑代码 ) 表示了与特定商业领域(例如银行、零售等行业)相适应的逻辑。它由
运行在业务逻辑层的 enterprise bean 处理。一个 enterprise bean 可以从客户端接受数据,对
它进行处理,并将其发送到企业信息系统层以作存储;同时它也可以从存储器获取数据,
处理后将其发送到客户端应用程序

有三种类型的 enterprise beans:session beans、entity beans 和 message-driven beans。
Session bean 描述了与客户端的一个短暂的会话。当客户端的执行完成后,session bean 和
它的数据都将消失;与之相对应的是一个 entity bean 描述了存储在数据库表中的一行持久
稳固的数据,如果客户端终止或者服务结束,底层的服务会负责 entity bean 数据的存储。
Message-driven bean 结合了 session bean 和 Java 信息服务(JMS)信息监听者的功能,它允
许一个商业组件异步地接受 JMS 消息。

六:EJB组件模型的灵活性

EJB组件模型的灵活性表现在:
EJB可作为表示无状态服务的对象;
EJB可作为表示无状态服务的对象,可通过向指定的消息队列或主题发送JMS消息,以实现对此对象的异步调用;
EJB可作为表示与特定客户的会话对象。此类对象在客户进行跨越方法的调用时,自动维持会话状态;
EJB可作为表示业务对象的实体对象,在多个客户间共享;
EJB可作为一个细粒度的持久对象,包含在一个粗粒度业务对象的持久状态中。
通常,被远程访问的组件往往是粗粒度的业务对象,如订单、雇员纪录;细粒度的业务对象往往不会采用可远程访问的EJB组件模型,如订单中的采购项、雇员纪录中的地址,而是采用可本地访问的EJB组件模型或是作为EJB的附属类出现。

七:何时使用EJB组件:

下面是在使用EJB组件模型构建企业应用时,一些判断EJB组件模型是否适用的标准。
EJB组件是构建分布式企业应用的组件模型技术;
EJB组件规范是针对分布式企业应用制定的,是基于分布式对象技术的Java组件;EJB组件不涉及表示层的内容,因此,必须与其他表示层技术一起使用;应用服务器提供了可以解决安全性、资源共享、持续运行、并行处理、事务完整性等复杂问题的服务,从而简化了商业应用系统。
应用客户端类型的考虑;
一般,企业应用开发都会有多种类型的客户端的需求,访问相同的数据或业务逻辑。如使用Web客户提供对应用的基于Internet的访问,使用应用客户端提应用基于Intranet的访问。EJB组件模型将业务逻辑与数据封装到EJB组件中,提供对多种客户端的支持。

应用数据与业务逻辑的并发访问控制的考虑;
企业应用通常需要提供数据或业务逻辑的并发访问能力,以此保证数据的完整性,由于EJB 组件控制对后台数据的访问,并管理当前事务和数据库的内部锁定。节省了编写数据库控制逻辑的工作量,同时也保证了数据的一致性与正确性,从而降低了总编程量。
全局事务控制的考虑;
企业应用通常需要对不同的资源进行事务性的操作,如某个操作需要对数据库进行访问,同时可能需要通过JMS消息服务发送消息,或者,需要访问两个位于不同物理位置的异种数据库,这些操作必须在相同的事务环境中完成。
基于访问控制的考虑;
企业应用中往往需要对某些资源进行访问控制,如需要针对不同用户对组件方法调用设置访问控制策略,对访问特定Web资源的用户设置访问控制策略等.

posted on 2007-10-22 09:25 ☜♥☞MengChuChen 阅读(1064) 评论(1)  编辑  收藏 所属分类: EJB3.0

FeedBack:
# re: EJB 简介
2012-06-08 09:12 | fff
垃圾  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: