欢迎来到天天文库
浏览记录
ID:38485915
大小:95.00 KB
页数:25页
时间:2019-06-13
《中间件技术12》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、EJB的简化之路历史EnterpriseJavaBean(EJB)作为J2EE(JavaEE)技术的核心技术于1997发布EJB1.0规范,它当时是为解决CORBA的复杂性而提出的。6月2号发布的EnterpriseJavaBeans2.0不仅是一个阶段性发行版,而且是该规范的一个新版本。整个规范有500多页,比以前的EJB1.1规范长了200页(66%)。该规范中最重要的变动是对容器管理的持久性(CMP)所作的更改,以及引入了一种全新的bean类型,即MessageDrivenBean。EJB规范承诺(I
2、)EJB将简化应用程序的开发,开发人员不必理解系统底层事务和状态管理的细节,以及多线程、资源池和其它一些复杂的API(2)EJB将遵循Java语言的“Writeonce,runanywhere',原则。EJB只需开发一次,便可在不需要修改源码和不需要重新编译的情况下。部署到多个平台上面。实际情况EJB并没有兑现以上的承诺。EJB规范从1.0到2.1变得越来越复杂,开发EJB必须实现一些与业务逻辑无关的接口,还要维护冗长的XML配置文件。同时,各个服务器厂‘商都会加入一些自己特定的特性,当开发的系统中使用了这
3、些特性时,EJB无法实现各个服务器间的平滑移植。EJB2.x的复杂性冗长的XML部署描述符EJB的实现类不是POJO冗长的XML部署描述符EJB的所有信息都配置在XML文件中,如一个EJB的Local接口、Remote接口和Bean实现类的指定,都是通过在ejbjar.xml中配置来完成的。EJB的实现类不是POJO在EJB2.x规范下开发EJB,即使编写最简单的HelloWorld程序,我们也必须编写至少3个类文件bean类、home接口和component接口。然而,这些类和接口并不是POJO它们必须继
4、承或实现规范所定义的接口,并且要实现一些在业务逻辑中根本不会使用的回调函数,如ejbLoad(),ejbPassivate()等。publicabstractclassCabinBeanimplementsjavax.ejb.Entity-Bean{publicvoidejbActivate(){}//与业务逻辑无关但必须实现publicvoidejbPassivate{}//与业务逻辑无关但必须实现publicvoidejbLoad{}//与业务逻辑无关但必须实现}EJB的复杂调用过程在EJB2.x规范,
5、标准的EJB调用过程:调用者通过JNDI查找到想要调用的EJB的home接口,使用者通过返回的home接口创建一个component接口,通过返回的这个component接口才能够调用实现业务逻辑的方法。实体Bean及EJBQL的局限性在EJB2.x规范中,实体Bean分为两种:CMP和BMPBMP由于需要用户自己管理持久化过程和维护EJB的状态,开发者需要做很多繁琐工作。与传统的JDBC方式相比,并没有带来太多的便利,同时还要实现不必要的容器组件接口。在广大开发者中使用的是CMPCMP与BMP相比要更灵活
6、。由于CMP是由EJB容器来控制数据库访问的,开发者不需要在bean中加入特定数据库访问的JDBC代码。在CMP中,数据库的访问是通过EJBQL来进行的,EJBQL是独立于数据库实现的,因此,CMP具有很好的移植性。虽然CMP与BMP相比具有很多优点,但与其它优秀的ORM框架(如Hibernate.TopLink和JDO)相比,还是有很多的不足:CMP中实体bean是一个实现了EntityBean接口的抽象类,山于它不是POJO,我们无法实现容器外测试。同时我们不得小再创建一个Value对象来保存其数据,使
7、得系统中对象出现大量的重复。CMP的另一个不足是,EJBQL本身的不成熟。一些复杂的查询如连接查询和子杳询在EJBQL中是无法实现的,同时EJBQL不支持动态SQL。这使得一些动态查询必须使用容器特定的方法或直接使用JDBC,这样又使得系统的移植性受到影响。EJB3.0的简洁性XML部署描述符成为可选EJB成为POJO使用Annotations的注入机制实体Bean成为完全的O/R映射XML部署描述符成为可选EJB3.0通过大量采用Annotations,使得EJB的配置大大简化。Annotations是J
8、DK5.0加入的一个新特性,这一特性定义在JSR-175规范里。@Stateful@RemotepublicclassShoppingCartBeanimplementsShoppingCart,java.io.Serializable{@Remotepublicvoidcheckout(){manager.persist(order);}}EJB成为POJO在EJB3.0中,EJB的接口和实现类分别是POJOE
此文档下载收益归作者所有