J2EE学习笔记三:EJB基础概念和知识

EJB正是J2EE的旗舰技术,因此俺直接跳到这一章来了,前面的几章都是讲ServletJSP以及JDBC的,俺都懂一些。那么EJB和通常我们所说的Java Bean有啥区别呢?书中是这样说的:JavaBeansEnterprise JavaBeans是两个不同的东西,但是因为一些相似些,它们具有共同的名字。JavaBeans是用Java构建的组件,可以用于应用的任意一层上,它们通常都和Servlet或者GUI组件有关。Enterprise JavaBeans是一种特殊的、基于服务端的组件,它主要用于为应用构建商业逻辑以及数据访问功能。

要想运行EJB必须有相应的EJB容器,而应用服务器一般都是包含了EJB容器的,如IBMwebsphereBEAweblogic等等。那么一个应用服务器应该具备哪些最基本的特征呢?如下所示,一个应用服务器应该具备以下功能特征:

1.  客户端通信,Client Communication

2.  会话状态管理,session state management

3.  事务管理,transaction management

4.  数据库连接管理,database connection management

5.  用户认证与基于角色的授权,user authentication and role-based authorization

6.  异步消息,asynchronous messaging

7.  应用服务器管理,application server management

目前,各个供应商的J2EE解决方案都实现了EJB规范,这就意味着我们可以以一种标准的基于规范的方式来开发和部署企业级应用,我们所开发的企业级应用可以运行在任何一个供应商的平台上。

EJB按照使用目的的不同,可以分为如下三种:

Session Bean:主要用于实现应用的商业逻辑,一个Session Bean用于负责一组相似的功能,比如一个教育局系统中,可能有一个Session Bean专门用于处理学生的记录,而另外一个Session Bean则专门用于维护课程记录。根据在与客户端交互中所发挥的作用,Session Bean又可以分为两类:无状态(stateless)和有状态(stateful)。无状态bean没有声明任何实例变量或全局变量,它里面的所有方法操作的都是局部变量,因此它不可能通过方法调用来维护状态;有状态bean可以通过方法调用来持有客户端状态,因为它里面定义了实例变量,客户端可以设置这些实例变量的值,然后在其它的方法调用中使用这些值。无状态bean的伸缩性非常好,因为它们无需保存状态,EJB容器也不必去知道它们的状态,而保存EJB的状态是非常耗费资源的,因此有状态bean不如无状态bean伸缩性强。下图阐明了一个典型的用户界面(UI)session beanentity bean和数据库之间的交互:

Entity BeanEntity Bean是一种能够同时从面向对象技术和关系数据库技术中收益的方式,一方面,Entity Bean都是对象,它们都是按照面向对象的准则来设计的;另一方面,Entity Bean中的数据都持久化在关系数据库中,面向对象技术的所有好处如速度、可靠性等都能被综合利用。Entity Bean代表了EJB应用中的持久化数据,比方说,在一个教育局系统中,可能有一个叫做StudentEntity Bean,它的每一个实例都代表了一个学生。

       Message-driven Bean:当一个EJB应用需要接收来自其它系统的异步消息时,此时就需要用到Message-driven Bean了。系统之间的异步消息类似于UI组件端的事件以及同一个JVM中的事件处理器。

那么如何来区分一个enterprise bean究竟是那一类bean呢?下面是一些规则:

     Session Bean主要用于处理商业逻辑、过程以及工作流

     Entity Bean代表了一个EJB应用中的持久化数据

     Message-driven Bean主要用于从其它系统接收异步消息之类的特殊目的

从上面的图可以看出,客户端仅仅只直接调用session bean,然后再由session bean来调用entity bean,这样做有如下几个好处:

     直接调用entity bean并不能绕开session bean中的商业逻辑,这样会导致在UI逻辑中揉入了业务逻辑,这不是一个好的事情;

     UI层不必依赖于entity bean的变化,session beanentity bean屏蔽了这些变化;

     与直接调用session bean相比,entity bean更耗费资源,因为一个EJB Serverentity bean的实例要远远多于session bean,而客户端为了能够同EJB Server上的bean交互,就必须持有一个这个bean的远程参考(remote reference),而这是需要耗费资源的;

 

 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值