`
bosschen
  • 浏览: 197109 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Java企业应用系统框架的比较与选择

阅读更多
Java企业应用系统框架的比较与选择
2009-08-26 23:29

引言

EJB的体系结构是J2EE的基础和核心,J2EE定义了整个标准的应用开发体系结构和一个部署环境,基于EJB的框架一度成为人们开发Java企业应用的首选。随着Java开源项目阵营的发展壮大, 一些基于POJOs(Plan Old Java Objects)的开源框架被越来越广泛地引入到Java企业应用的开发中来。根据复杂程度人们习惯把前者称为重量级框架,把后者称为轻量级框架。Java企业应用框架一般被划分为三个层次:表现层、业务逻辑组件层和持久层。本文主要对目前企业应用对应于这三个层次的两种类型的流行框架进行了细节比较,最后针对Java企业应用的系统框架选择提出作者的观点。

1 两种类型框架概述

1.1 基于EJB的重量级框架

由于 EJB容器能够很好的处理系统性能、事务机制、安全访问权限以及分布式运算等问题,基于EJB框架进行开发能保证企业应用平滑发展,而不是发展到一种规模就重新更换一套软件系统,且可以保证开发人员将大部份精力集中在业务逻辑的开发上。采用EJB框架开发的企业应用具有必须继承或依赖EJB容器的特点。EJB充分考虑到了顶级大型项目的需求,使用它几乎能解决企业级应用涉及到的所有问题,相应的基于EJB框架也是一个功能复杂的重量级框架。

J2EE1.4标准规定的EJB 2.1框架缺少设计且实现起来有些过于复杂。当前J2EE5.0的新规范提出的EJB 3.0的目标就是简化开发[1],借鉴了一些基于POJO的思想,它相对于EJB2.1中两个重要的变化分别是:一是使用了Java5中的程序注释工具,注释取代了过多的XML配置文件并且消除了严格组件模型需求;二是采用了基于Hibernate和TopLink思想的O/R Mapping模型。

J2EE5.0的新规范中定义企业应用三个层次的标准实现为:表现层采用JSF(Java Server Face),JSF的开发流程的核心是事件驱动,组件和标签的封装程度非常高,很多典型应用已经不需要开发者去处理http。整个过程是通过IoC(依赖注入)[2]来实现的;业务组件层采用EJB3.0的Session Bean。EJB3.0允许开发者使用藕合松散的组件来开发应用。这些组件通过自己发布的商业接口来耦合,不必像EJB 2.1规范定义的那样一个Bean必须遵守的严格的组件模型,每一个EJB类必须从某一种抽象类中继承,并为容器提供了回调的钩子;持久层采用EJB3.0实体Bean持久化模型,吸收了Hibernate的一些思想采用O/R Mapping模式, EJBQL也有许多重要的改变。

1.2 基于POJOs的轻量级框架

在基于POJOs轻量级框架上开发的应用程序无需依赖于EJB容器可独立运行,对应于Java企业应用三个层次的轻量级框架技术分别都得到了一定的发展,这三个层次流行的框架如下:

目前比较流行的开源表现层框架主要有Struts和Tapestry。Tapestry与Struts应用框架不同的是,它是基于组件,而不是面向脚本语言(比如JSP和Velocity)的,组件是由一个定义文件(以XML的格式)、一个HTML模板、一个JAVA类构成的;业务组件层轻量级解决方案也不少,包括Spring、Hivemind等。但是目前使用最为广泛的还是Spring框架,Spring框架是一个基于IoC和AOP(面向方面编程)[3]的构架。采用IoC使得它可以很容易的实现bean的装配,提供了简洁的AOP并据此实现事务管理等,但是它不具备处理应用分布式的能力。Spring 的核心要点是:支持不绑定到特定 J2EE 服务的可重用业务和数据访问对象。这样的对象可以在不同 J2EE 环境 (Web 或 EJB)、独立应用程序、测试环境之间重用;持久层框主要有Hibernate和各种JDO产品,以及iBATIS。Hibernate是一个开源的O/R Mapping框架,它对JDBC进行了非常轻量级的对象封装,可以应用在任何使用JDBC的场合,可以在应用EJB的J2EE框架中取代CMP,完成数据持久化的重任。iBATIS是一个简易的SQL Map工具,它是将手工编写的在xml配置文件中的SQL语句映射成Java对象。

2 对应于三个层次的框架比较

2.1 表现层框架比较

MVC设计模式不再是某一种表现层框架的特点而是这几种框架的共性。Struts框架由于出现时间早,所以使用相对广泛,它的社区非常活跃,很容易找到很多现成的开源功能标签以供使用以及样例程序可供参考。但是它的组件在页面中显示的粗粒度,以及框架类的限制在很多情况下会表现得过于死板,给表示层的开发会带来一些额外的代码开销。JSF在很大程度上类似Struts,只是JSF的组件概念没有象Struts那样必须继承ActionForm的限制,JSF在事件粒度上要比Struts细腻。JSF有的另外一个优势就是其身后有Sun公司和其他的一些大公司的支持。Tapestry是一个完全组件的框架,Tapestry的组件可以被套嵌并包裹其它组件,因此可以组合形成一个更大的组件或逻辑页面。组件的行为模式为Web页面编程提供了很大的方便,事件处理也方便很多。所以,如果做一个对页面要求灵活度相当高的系统就可以考虑选用Tapestry。

 

框架
 
Struts
Tapestry3.0
JSF
View组件实现模式
标签库+组件,组件必须继承ActionForm
完全组件,分显式调用和隐式调用,组件必须继承BaseComponent
标签库+组件,普通POJO无需继承
组件在View显示粒度
View页面只能显示与表单对应的ActionForm,配置中Action与 ActionForm与 页面一般只能1:1:1关系。
可将组件嵌入页面任何一行,对使用组件数量无限制。
同Tapestry
页面跳转
使用标签库html:link中写明目标URL,URL名称需要对照struts_config.xml配置文件中的path命名,与组件Action耦合。
URL名称是目标的组件名称,不涉及URL和路径等操作,方便稳固。
类似Struts,也需要在配置文件中查找,与组件分离。
事件触发
通过表单提交submit激活,不能细化到表单里字段。
能够给于表单每个字段赋一个事件,事件组件必须实现PageListener接口
同Tapestry,事件组件必须实现ActionListener

表1:三种框架的表现层功能技术细节比较

#p#

2.2 业务组件层框架比较

EJB 2.1框架有些过于复杂了,有如下缺点:① EJB模型需要建立许多组件接口和实现许多不必要的回滚方法;②EJB的部署描述复杂而容易出错;③开发人员不能脱离EJB容器测试。对于以上缺点JCP (Java Community Process)制订的EJB3.0标准框架做了相应的改进,该框架为所有主要的J2EE厂商支持。EJB3.0和Spring两个框架结构都有一个共同核心设计理念:将中间件服务传递给耦合松散的POJOs。

EJB3.0框架与应用服务器高度整合,服务整合代码也包装在一个标准接口后面。EJB框架一方面有成熟的EJB容器支持,基于EJB框架的企业应用性能优良;另一方面EJB容器设计因为考虑了多方面的功能,所以在其内核上总是会显得臃肿,这也是一种重量表现。不需要的东西存在肯定会影响效率,EJB不能根据项目需求对EJB整体包括EJB容器进行可配置式的切割。

Spring框架处于应用服务器和服务库的上方,服务整合的代码属于框架,并暴露于应用开发者。它与应用服务器整合的能力相对EJB3.0要弱。但是Spring框架模块的可分离配置体现了它优于EJB3.0的灵活性。

 

框架
 
EJB2/EJB3
Spring Framework 1.x
灵活性(松耦合)
 
EJB3比EJB2更具灵活性,EJB3支持应用系统POJO
支持应用系统POJO,框架本身可分离配置
功能完整性
全面,支持异步JMS 分布式事务
较为全面。有自己的表现层和持久层模板,可支持异步
领域范围
支持业务逻辑Session
不支持,需要开发者额外基于ThreadLocal编制代码
IoC/AOP支持
EJB3支持IoC, JBoss等EJB3服务器支持AOP;基于业务组件的较粗粒度
基于JavaBeans类的细粒度支持AOP
单台性能
一般,批量查询等大数据量业务处理须小心,存在本地不透明缺陷
一般,应用程序可配置cache/Pool以提高性能
可伸缩性
可支持多台服务器分布式计算
不支持,可依靠EJB实现
开发效率
学习曲线长,导致熟练掌握难。借助商业开发工具可加快熟练者的开发速度
可挑选只适合自己的功能实现。相对EJB稍简单
系统规模
EJB2适合大型系统;EJB3适合中大型系统
可挑选只适合自己的功能实现。相对EJB稍简

表2:EJB和Spring框架的具体细节比较

2.3 持久层框架比较

容器管理持久性(CMP)是对EJB中Entity Bean进行持久性管理的方式。EJB2.1 持久性模型过于复杂并且存在基础缺陷[3]。EJB3.0持久层针对EJB2.1的缺陷做了相应改进,采用与Hibernate类似的机制。

Hibernate相对而言其基本优势如下:①Hibernate 使用 Java 反射机制而不是字节码增强程序来实现透明性;②Hibernate的使用简单;③映射的灵活性很出色,它支持各种关系数据库,从一对一到多对多的各种复杂关系。Hibernate 也有一些缺点,它限制所使用的对象模型 (例如,一个持久性类不能映射到多个表)。

使用iBATIS提供的O/R Mapping机制,对业务逻辑实现人员而言,面对的是纯粹的Java对象,这一层与通过Hibernate 实现O/R Mapping 而言基本一致,而对于具体的数据操作,Hibernate 会自动生成SQL 语句,而iBATIS则要求开发者编写具体的SQL 语句。相对Hibernate等 “全自动”O/R Mapping机制而言,iBATIS以SQL开发的工作量和数据库移植性上的让步,为系统设计提供了更大的自由空间。作为“全自动”ORM 实现的一种有益补充,iBATIS的出现显得别具意义。

3 企业应用系统框架选择

设计和性能是实际框架选择的两个基本点,善于平衡才是框架选择的主要宗旨。轻量级框架和重量级框架解决问题的侧重点是不同的。

轻量级框架侧重于减小开发的复杂度,相应的它的处理能力便有所减弱(如事务功能弱、不具备分布式处理能力),比较适用于开发中小型企业应用。采用轻量框架一方面因为尽可能的采用基于POJOs的方法进行开发,使应用不依赖于任何容器,这可以提高开发调试效率;另一方面轻量级框架多数是开源项目,开源社区提供了良好的设计和许多快速构建工具以及大量现成可供参考的开源代码,这有利于项目的快速开发。例如目前Tomcat+Spring+Hibernate已经成为许多开发者开发J2EE中小型企业应用偏爱的一种架构选择。随着可供选择的框架层出不穷,开发者可以根据需要对应于企业应用三个层次的轻量级框架选择,本文第2节的内容可供选择参考。

而作为重量级框架EJB框架则强调高可伸缩性,适合与开发大型企业应用。在EJB体系结构中,一切与基础结构服务相关的问题和底层分配问题都由应用程序容器或服务器来处理,且EJB容器通过减少数据库访问次数以及分布式处理等方式提供了专门的系统性能解决方案,能够充分解决系统性能问题。

轻量级框架的产生并非是对重量级框架的否定,甚至在某种程度上可以说二者是互补的。轻量级框架在努力发展以开发具有更强大,功能更完备的企业应用;而新的EJB规范EJB3.0则在努力简化J2EE的使用以使得EJB不仅仅是擅长处理大型企业系统,也利用开发中小型系统,这也是EJB轻量化的一种努力。对于大型企业应用以及将来可能涉及到能力扩展的中小型应用采用结合使用轻量级框架和重量级框架也不失为一种较好的解决方案。

4 总结

目前适用Java企业应用的系统框架可谓百花齐放,各种框架都有长短,选择应用系统框架时不可盲目的追求流行,首先需要明确所要实现的应用系统的系统处理能力需求,然后在熟悉比较各种框架细节的基础上从设计以及开发效率方面进行考虑。本文旨在为系统框架选择提供一个参考,限于篇幅本文只对其中的几种框架做了比较,开发者可以根据需要对更多其他框架细节进行比较。

参考文献

[1] EJB3.0 Expert Group JSR 220,Enterprise JavaBeans,Version 3.0
[2] Martin Fowler 撰文,透明编译,《Ioc 容器和Dependency Injection 模式》,2002 年2 月
[3] Spring - java/ j2ee Application Framework reference,Spring中文论坛
[4] 孙卫琴,《精通Struts:MVC 的Java Web 设计与开发》,电子工业出版社
[5] Clinton Begin,《iBATIS SQL Maps Tutorail》,http: //www.ibatis.com
[6] 孙卫琴,《精通Hibernate Java对象持久化技术详解》,电子工业出版社

作者简介

许晓曼(1977.6),女,重庆,北京航空航天大学硕士在读,电子政务;
唐文忠(1968.12),男,河北,北京航空航天大学副教授,研究方向信息安全、电子政务

分享到:
评论

相关推荐

    Java企业应用系统框架的比较与选择_.docx

    在Java企业应用系统框架的选择中,开发者面临着多种选择,主要包括基于EJB的重量级框架和基于POJOs的轻量级框架。这两种框架各有优缺点,适用于不同的应用场景和项目需求。 **基于EJB的重量级框架**是J2EE的核心,...

    Java企业应用系统框架的比较及选择.doc

    Java企业应用系统框架的选择通常取决于项目需求、团队技术栈、性能要求、可扩展性以及维护成本等多个因素。基于EJB的重量级框架如EJB 3.0,其优势在于提供了一整套完整的解决方案,包括事务管理、安全性、分布式服务...

    基于Java企业微信的开源应用开发框架&引擎.zip

    【标题】: "基于Java企业微信的开源应用开发框架&引擎" 这个标题表明我们讨论的是一个专注于企业微信集成的开源框架,它完全用Java语言编写。这个框架的主要目的是简化和加速开发者在企业微信平台上的应用开发工作...

    JAVA SMART系统-系统框架设计与开发(源代码+论文)(1).zip

    《JAVA SMART系统-系统框架设计与开发》是一个深入探讨Java技术在构建智能系统中的应用的资源包,包含源代码和相关论文。这个压缩包旨在帮助开发者理解和实践如何使用Java技术来构建高效、灵活且可扩展的系统框架。...

    Java Web应用框架研究与应用.pdf

    Java Web应用框架是开发Web应用程序的关键工具,它们提供了一种结构化的方法,使得开发者能够更高效、高质量地构建Web应用。本论文主要探讨了Java Web应用框架中的SSH框架,包括Struts2、Hibernate和Spring这三大...

    Java Application Service Java 应用服务框架

    Java Application Service,通常简称为Java应用服务框架,是Java开发者用于构建可扩展、模块化且易于维护的企业级应用程序的一种常用工具。它提供了一种结构化的框架,帮助开发人员快速搭建和部署应用程序,同时确保...

    java 管理系统,采用框架构成

    Java 管理系统是一种基于Java技术开发的后台管理系统,通常用于企业的信息管理和业务操作。这个管理系统采用Struts和Hibernate这两个流行的开源框架构建,旨在提供高效、稳定且易于维护的解决方案。对于Java初学者而...

    JAVA各种系统框架图简介

    【JAVA各种系统框架图简介】 Java 作为一门广泛使用的编程语言,在企业级应用开发中扮演着重要角色。为了简化开发过程并提高效率,各种框架应运而生。本篇文章将介绍Spring、iBatis和Struts这三个知名的Java系统...

    Java框架简单应用

    SSH(Spring、Struts、Hibernate)作为经典的Java企业级开发框架组合,被广泛应用于各种项目中。本篇文章将深入探讨SSH框架的核心概念、功能及其在Java应用中的简单应用。 首先,Spring框架是SSH中的核心,它提供了...

    Java RCP企业应用快速开发框架

    在"Java RCP企业应用快速开发框架"中,开发者可以利用预定义的UI部件和强大的事件处理机制,减少从零开始编写用户界面代码的工作量。框架提供了一套完整的生命周期管理,包括启动、初始化、运行、暂停、恢复和关闭...

    J2EE外文翻译(J2EE和企业解决方案及其应用框架)

    **J2EE(Java 2 Platform, Enterprise Edition)**是Java平台上用于构建企业级应用程序的框架,它由Sun Microsystems(现已被Oracle收购)在2000年代初推出。J2EE提供了一个全面的开发环境,支持分布式计算、多层...

    面向企业应用的Java教学框架探索.zip

    4. **Spring框架**:Spring是Java企业级应用开发中最流行的框架,它提供了依赖注入(DI)和面向切面编程(AOP)等功能,简化了开发和测试。Spring Boot进一步简化了Spring的配置,使得快速开发成为可能。 5. **...

    开源的企业微信应用开发框架&引擎,是一套通用的企业微信多租户SaaS管理系统

    MoChat 是开源的企业微信应用开发框架&引擎,是一套通用的企业微信多租户SaaS管理系统,得益于 Swoole 和 Hyperf 框架的优秀,MoChat 可提供超高性能的同时,也保持着极其灵活的可扩展性。可用于电商、金融、零售、...

    基于Java web的SSM框架的 企业人事管理系统(源码+数据库).zip

    【标题】中的“基于Java web的SSM框架的 企业人事管理系统”指的是一个使用Java Web技术开发的企业级人事管理软件,其核心技术栈是Spring、SpringMVC和MyBatis(SSM框架)。这个系统通常包括了员工信息管理、部门...

    一个基于 Java 的 LLM(大语言模型)应用开发框架

    总的来说,基于Java的LLM应用开发框架是AI技术与传统软件工程相结合的产物,它降低了开发者的门槛,使得更多的人能够利用先进的NLP技术构建自己的应用。无论是企业级的信息检索系统,还是个人的文本生成项目,都可以...

    Java 三大框架项目

    Hibernate是一个强大的ORM(Object-Relational Mapping)框架,解决了Java应用程序与数据库之间的数据映射问题。通过Hibernate,开发者可以使用Java对象来操作数据库,而无需直接编写SQL语句,大大简化了数据库操作...

    java 企业管理系统

    【Java企业管理系统】是一个专为初学者设计的学习项目,它以Java编程语言为基础,构建了一个实际的企业级应用。这个系统通常涵盖了企业管理中的多个核心模块,如用户管理、订单管理、库存控制、财务管理等,旨在帮助...

    Java企业系统架构选择考量

    "Java企业系统架构选择考量" Java 企业系统架构选择考量是指在 Java 领域中选择合适的技术框架,以满足项目的需求。现在 Java 领域各种技术百花齐放,名目繁多,如何根据自己的需求选择这些框架呢?特别对于初学者...

Global site tag (gtag.js) - Google Analytics