渊源:
Java的J2EE在1999年形成了其成熟的架构,并且到今天已经有相当成熟的经过检验的企业应用系统。而.Net究其渊源是源自微软以前开发企业应用程序的平台DNA(DistributedNetworkArchitecture),其中包括了许多已经被证实的技术,并且这些技术已经在产品中得到实现,包括微软的事务服务器、COM+、消息队列、SQL Server 数据库等。而对于扩展性,广为业界接受的事实是.NET平台的扩展思想是基于软件的横向扩展,而J2EE平台的扩展思想则是基于硬件的纵向扩展。这也符合微软和Sun各自的产品利益。但是我们还需要细看这个问题,.Net技术源于DNA技术。众所周知,DNA技术可能能够解决部门级应用的问题,但是在大型企业应用中就不是那么适合了。其实,从微软这家公司的历史背景就可以看出这个问题,微软从来不是一个老牌的企业级解决方案的提供者,它是从DOS、Windows等桌面操作系统起家的,在购买了一个企业级操作系统开发出Windows NT后才开始进入企业级解决方案市场。与IBM、HP、Sun等一直从事企业级应用的提供商相比,其技术和支持力量还显得稚嫩。尚没有大多的成功案例和解决方案。而J2EE 却是这些企业级解决方案的提供商所力推的,所以J2EE在企业中有大量的成功案例和解决方案。这些可以从世界各种大企业的IT应用系统的实际情况可以看出。世界上大多数企业的IT系统中,使用J2EE技术的远远大于.Net。可以这么说,.Net技术尚没有太多比较成功的实施案例。
未来的考验:
Java可以胜任未来的考验,或者说能够导向未来。这样你现有的代码将不会过时,为什么?因为我能运行Java在今天和将来的计算机上。你不能确保微软的.NET也能够做到这一点。一个鲜活的例子就是他们对VB6的支持,现在VB6已经过时了。
适用范围:
两者都能够达到企业级应用的需求。但是I/O处理和线程调度从本质上来讲应该由底层硬件和操作系统来解决。J2EE支持众多的硬件和操作系统,单从这点来讲,都比.Net技术有优势得多。别的不说,大型计算机的I/O处理能力和线程调度能力是其他任何机种所无法企及的。而大机上目前只能运行J2EE,不能运行.Net。光这一点,就说明了在这个方面J2EE优于.Net技术。
.net照顾中小型应用毫无问题,而且开发速度快,作为用户,付了钱很快能看到回报。大型应用,由于它只能应用一个平台,甚至低层硬件只能选择Intel的系列芯片。而不能在大机、Unix以及Linux等系统上使用,所以应用范围有所限制。
数据访问:
J2EE 和 .Net 已不同的形式支持数据的访问。JDBC和ADO一样和所连接的数据库无关,并且通过连接,命令语句和结果集来对数据进行操作.所以属于中间层次的 API.更高一级的数据封装和数据管理是通过实体EJB (entity EJB)来完成的.基于容器管理的实体EJB使开发更快捷,管理更方便.事实上,由于实体EJB的load()和store()方法的同步机制,将大大缓解因并发而使数据库产生的瓶颈.也可以采用不属于J2EE规范的第三方数据访问工具,象WebGain的 TopLink。
而微软的.NET的数据访问工具则由基于XML的ADO.NET代替了基于COM组件的ADO.任何以XML为输出的数据源都可以作为 ADO.Net 的数据源.相应的结果集升级为数据集 (DataSets),命令语句则升级为数据集命令(DataSetCommands).从形式来看,微软的ADO.NET更新潮和时髦一些,基于XML的特性使其可以处理极其丰富的数据源,并且,因其构架在HTTP协议之上,易于穿透防火墙,使沟通更为便利.但由于XML本身的基于标记的特性,很明显限制了在有超大数据量和有网络瓶颈的应用中的使用.而J2EE的数据访问规则则显得略有单薄,但同时却更简单,更有效.并且通过对应用程序有效的层次的设计,对于数据库和基于XML的数据源的访问,也是可以无缝的整合的。
安全性:
.NET通过WSA (Web Service Architecture)和WSE (Web Service Extension) 包来提供最新的WEB服务安全保证,JAVA目前还没有提供这方面的支持。所以在WEB服务安全性上,JAVA明显比.NET落后一些。
但因为Windows操作系统的安全性没有unix或者linux高。所以在服务器的安全上,Java是高于.Net的。
稳定性:
Windows操作系统的复杂性导致.Net做的系统稳定性下降。(不过2008年出来的Windowsserver 2008已经有Core版,但不支持Asp.Net,只有64位的Win2008R2支持,不过现在还是Beta版)。
Linux内核可以定制,所以在这种情况下用Java做的系统稳定性更好一些.
编程时的纠错能力:
VisualStudio中代码的即时查错能力非常弱,很多的要到编译时才能知道代码是否有错;而在Eclipse中在编写代码的时候对于有错误的代码和有警告的代码(比如一些Private成员没有被引用)可以立即清晰的提示出来,开发人员可以立即修改有错误的代码。
开发的效率和复杂度:
C#有容易上手的优势,而且项目管理,团队合作相对简单.开发环境也比较好.
代码提示,msdn,等等做得都不错.网上的doc也多,出了问题解决方案也很多.
java也可以,但其帮助文档没有msdn好,编程环境更是和vs2008没有办法相比.
成本:
就BS结构来说,由于.Net开发的周期短,.Net开发的成本大概是用Java的1/3 ~ 1/2.
总结:
就企业而言,内部众多系统的整合、系统的延展性、安全性是更需要注意的议题,而这些都是J2EE的优势,也是微软的不足处。 在效率方面,J2EE阵营主张通过硬件的效能增加来弥补软件的不足.开放标准,功能强大,易于移植这些都是J2EE的卖点。
技术路线分析
1. 基建工程项目的基本情况
规模,范围,数据量,性能要求,开发速度上的要求,成本上的要求,对跨平台的要求,质量上的要求,
2. 常用开发平台分析及比较
国内外目前最为成熟的两个B/S系统开发技术路线是J2EE路线和.Net技术路线,下面将就这两个路线进行一个比较全面的分析和比较。
2.1. J2EE平台技术路线分析
J2EE是一套全然不同于传统应用开发的技术架构,包含许多组件,这些组件可简化并且规范应用系统的开发与部署,进而提高可移植性、安全与再用价值。
J2EE核心是一组技术规范与指南,其中所包含的各类组件、服务架构及技术层次,均有共通的标准及规格,让各种依循J2EE架构的不同平台之间,存在良好的兼容性,解决过去企业后端使用的信息产品彼此之间无法兼容,导致企业内部或外部难以互通的窘境。
在J2EE架构下,开发人员可依循规范基础,进而开发企业级应用;而不同J2EE供货商,同会支持不同J2EE版本内所拟定的标准,以确保不同J2EE平 台与产品之间的兼容性。换言之,基于J2EE架构的应用系统,基本上可部署在不同的应用服务器之上,无需或者只须要进行少量的代码修改,即能大幅提高应用 系统的可移植性(Portability)。
2.1.1. 主要开发框架的分析与比较
目前在业内,主要的基于J2EE实现的集成开发框架有Struts+spring+hibernate和Struts+Ejb+Hibernate。
业务层框架的比较
业务逻辑的构建是整个系统的核心部分。目前业内最为成熟的两个基于J2EE标准的业务层框架是EJB框架和Spring框架。
这两个框架都是简化企业级软件开发的应用框架,其关键是提供一个隐藏了复杂性(例如事务、安全性和永续性)操作的机制。通过选择这两种技术中的任何一种,都能够达到实现完整企业级应有的需求,并简化开发中的复杂事务。
Ø Spring框架组件是一个流行的,但是非标准的开放源代码框架组件。它主要是由Interface21Inc.公司开发和控制的。Spring框架组件的架构是基于依赖注入(DI)设计模式的。Spring可以单独地或者与现有的应用程序服务器一起工作,它大量地使用XML配置文件。
Ø EJB 框架组件是一个标准的框架组件,由Java社区组织(JCP)定义,并受到所有主流的J2EE厂商支持。EJB大量使用Java注释(annotation)。
u 支持力度:
EJB是完全公开的规范标准,它本身是J2EE标准的一部分,因此得到了很多厂商的支持,这样基于EJB的程序就可以比较轻松地在WebSphere、WebLogic以及JBoss之间进行切换。
Spring框架是开源项目,但不是标准的。Spring的接口配置文件描述都是私有的。所以Spring在其他厂商的支持力度上就不如EJB,使得一旦使用了Spring的特殊服务,那么就绑定到了 Spring框架上了,要跟换到其他框架将比较困难。
u 灵活性
Spring通过采用松散耦合的设计理念,其大量采用XML文档来进行配置,这样的设计思想在很大程度上增加了它的灵活性,但是同时也增加了开发的复杂度,并造成大量的冗余。
而EJB框架与应用服务器结合较紧密,服务被集成封装,隐藏在EJB接口后面。因为EJB本身就是J2EE标准的一部份,因此,它与其他J2EE服务如JCA,JMX都结合的很好。而缺点也正是结合太紧密,不够灵活。
u 对WEB层的支持
从对当前主流的WEB开发框架的支持度上来说,由于Spring是一个开源框架,所以其对目前主流的流行框架支持度较好,Spring可以灵活地集成各种 Web框架和模板语言,另外自身也提供了相当强大的Spring-MVC框架。这无疑降低了开发人员在开发过程中的难度。
而EJB在这方面做得就不如Spring,其虽然提供了对JSF的支持,但是目前看来效果并不理想。
u 用户的使用情况
从目前市场的使用量来看,我们采用2007年11月InfoQ网站做出的一项职位列表(职位列表是技术真正被采纳的良好指示器)调查来看,
Java职位列表中对Spring技能的需求已经超越了EJB,也就是说,就业界的普遍使用情况来看,在开发中,已经有越来越多的人和公司支持Spring框架,从上图的趋势来看,在今后一段时间里,将有Spring将获得更多的支持。
综合以上几点,
框架 | EJB2/EJB3 | Spring Framework |
平台无关性 | 无关 | 无关 |
市场使用趋势 | 减少 | 增加 |
灵活性(松耦合) | EJB3比EJB2更具灵活性,EJB3支持应用系统POJO | 支持应用系统POJO,框架本身可分离配置 |
功能完整性 | 全面,支持异步JMS 分布式事务 | 较为全面。有自己的表现层和持久层模板,可支持异步 |
IoC/AOP支持 | EJB3支持IoC, JBoss等EJB3服务器支持AOP;基于业务组件的较粗粒度 | 基于JavaBeans类的细粒度支持AOP |
Web框架 | EJB3标准集成JSF,但是JSF并不成熟,和AJAX配合度也不好 | Spring可以灵活集成各种Web框架和模板语言 |
开发人员熟练程度 | 不熟 | 熟练 |
使用EJB 的时候,基于标准的方法、注释的大量使用、以及与应用程序服务器的紧密集成形成了强大的厂商无关性和开发者的高效率。使用Spring的时候,一致地使用依赖注入和集中的XML配置文件,允许开发者构造更加灵活的应用程序,并在同一时刻使用多个应用服务。
表示层和数据层情况
在表示层和数据持久层,目前不二的选择分别是Struts框架和Hibernate框架。
Struts是一个MVC框架(Framework),用于开发Java Web应用程序。Struts实现的重点在Controller,包括ActionServlet/RequestProcessor和定制的Action,也为View提供了一系列定制标签(Custom Tag)。通过Struts实现业务数据、页面显示、动作处理分离;管理用户的请求,做出相应的响应;提供一个流程控制器,委派调用业务逻辑和其他上层处理;处理异常;为显示提供一个数据模型 ;用户界面的验证。
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。通过Hibernate将数据表与对象进行关联,实现数据持久化的重任。
2.1.2. 对数据库的支持
由于J2EE平台采用JDBC进行对数据库的操作,并且常用的数据持久层框架都是基于JDBC进行封装。
基于这个特性,使得J2EE平台几乎支持所有的业界主流的数据库,包括Oracle、DB2、MySQL、Postgre、SqlServer等。
并且由于JDBC的存在,使得开发人员在进行数据库操作的时候,可以采用通用的方法进行操作,而不用考虑数据库的不同所带来的差异性。
2.1.3. 应有服务器的选择
目前支持J2EE的主流企业级应用服务器有WebSphere和WebLogic。
IBM的WebSphere ApplicationServer 是 一 种功能完善、开放的Web应用程序服务器,是IBM电子商务计划的核心部分,它是基于 Java 的应用环境,用于建立、部署和管理 Internet 和 Intranet Web 应用程序。 这一整套产品进行了扩展,以适应 Web 应用程序服务器的需要,范围从简单到高级直到企业级。
WebSphere针对以 Web 为中心的开发人员,他们都是在基本 HTTP服务器和 CGI 编程技术上成长起来的。IBM 将提供 WebSphere 产品系列,通过提供综合资源、可重复使用的组件、功能强大并易于使用的工具、以及支持 HTTP 和 IIOP 通信的可伸缩运行时环境,来帮助这些用户从简单的 Web 应用程序转移到电子商务世界。
BEA的WebLogic软件平台能够帮助客户在Web上创建自己的业务或将自己的业务扩展到Web上,为客户提供了一个可靠、可扩展、跨平台的解决方案。作为IBM电子商务应用框架的一个关键组成部分,WebLogic软件平台为客户提供了一个使其能够充分利用Internet的集成解决方案。
WebLogic软件平台提供了一整套全面的集成电子商务软件解决方案。作为一种基于行业标准的平台,它拥有足够的灵活性,能够适应市场的波动和商业目标的变化。它能够创建、部署、管理、扩展出强大、可移植、与众不同的电子商务应用,所有这些内容在必要时都可以与现有的传统应用实现集成。以这一稳固的平台为基础,客户可以将不同的IT环境集成在一起,从而能够最大程度地利用现有的投资。
2.1.4. 硬件平台及操作系统的选择
当前大型J2EE系统所部署的服务器多选择UNIX服务器,这也正好和当前业界所存在的大型服务器厂商所提供的服务器吻合。如IBM,惠普等,所提供的服务器都是使用基于UNIX的操作系统,基于UNIX的操作系统也是目前所公认的性能、安全性较高的服务器操作系统。
同时,当前绝大部分的大型数据库都支持UNIX、LINUX操作系统,如Oracle, Postgre、DB2。
2.1.5. J2EE方案
综合分析以上情况,结合项目实际情况,推荐在J2EE技术路线下选用如下方案:
开发框架
采用Struts+Spring+Hibernate的集成开发框架
2.2. .Net平台技术路线分析
2.1.1. 开发平台介绍
2.1.2. 对数据库的支持
2.1.3. 应用服务器的选择
2.1.4. 硬件平台及操作系统的选择
2.1.5. .NET方案
2.3. J2EE平台和.Net平台的综合比较
总体来说,J2EE平台是比较成熟的集成解决方案,由超过500家厂商实现了其标准,是各个厂商间协同工作的结果。J2EE平台是基于Java技术的,这使得它不依赖于运行的硬件平台和操作系统。J2EE是一种规范,最初由Sun开发,虽然它限制了开发者只能使用单一的编程语言,但今天它已由JavaCommunity Process(JSP)控制,J2EE现在已经是相当开放的平台。不同的厂商提供了符合规范说明的各种实现方法。
.NET平台是微软最新的企业计算环境解决方案。.NET在很多方面和J2EE平台相似,共享一个概念,与JVM同类,由Common Language Runtime调用。它提出了Intermediate Language(IL),类似于Java Byte –code的概念。但是,.NET可以把不同的语言(包括Java)转化成IL,而且还提供不只一种语言的支持。
J2EE和.NET平台的特征的比较如下:
特征 | J2EE | . NET |
供应商数量 | 30+ | 微软(Microsoft) |
解释器 | JRE | CLR |
动态 Web页面实现 | JSP | ASP.NET |
中间层组件 | EJB | .NET管理的组件 |
数据库的访问 | JDBC | ADO.NET |
支持SOAP,WSDL,UDDI | 是 | 是 |
支持分布式应用(如负载均衡等) | 是 | 是 |
是否跨平台 | 是 | 否 |
开发效率和复杂度 | 开发效率不如.NET,开发复杂度高。 | 较快。Microsoft Visual Studio .NET集成开发环境,可以帮助开发人员迅速的构建系统。 |
数据库支持 | 对数据库支持较好。如Oracle、DB2、MySQL、Postgre、SqlServer等一系列的大型数据库。 | 对数据库支持较好。如Oracle、DB2、MySQL、Postgre、SqlServer等一系列的大型数据库。 |
和其他系统的集成 | 由于当前电网公司大多数系统都采用J2EE的技术路线,所以可以使得系统能够较容易的与其他系统进行集成。 | 就电网公司层面来说,与其他系统的集成能力不如J2EE。 |
平台之间的转换 | 容易。J2EE通过JAVA虚拟机的支持,可以很容易的实现跨平台的迁移。 | 不如J2EE |
开发人员的支持力度 | J2EE技术人员较多,能够得到很好的技术支撑。 | 不如J2EE |
硬件平台及操作系统 | 采用基于UNIX的应用服务器,服务器性能较好。 | 必须采用Windows操作系统服务器,选择面窄,性能不如UNIX服务器。 |
安全性 | Windows操作系统的安全性没有unix或者linux高。所以在服务器的安全上,Java是高于.Net的 | .NET通过WSA (Web Service Architecture)和 WSE (Web Service Extension) 包来提供最新的WEB服务安全保证,JAVA目前还没有提供这方面的支持。所以在WEB服务安全性上,JAVA明显比.NET落后一些。 |
稳定性 | 由于J2EE系统多部署在UNIX服务器上,应为UNIX内核可以定制,所以在这种情况下用Java做的系统稳定性更好一些 | 不如J2EE |
开发成本 | 比.NET高 | 就BS结构来说,由于.Net开发的周期短,.Net开发的成本大概是用Java的1/3 ~ 1/2 |
综合成本 | 由于大量采用开源技术,综合成本较低。 | 对开源的支持力度不如J2EE,需大量采用商业组件进行支持,增加了项目的综合成本。 |
3. 系统开发技术路线的选择
根据以上分析,推荐采用J2EE技术路线,原因主要有一下几点:
1)与其他系统的集成
云南电网公司工程项目管理信息系统涉及到与现有多个系统的集成,包括现有的生产管理系统、物资管理系统、招投标系统、合同系统、办公OA系统、企业门户系统。而这些系统都是基于J2EE架构开发的系统。所以,在系统集成方面,J2EE占有相当的优势。
2)性能上的考虑
这里所说的性能包括系统的效率、安全性、稳定性。
云南电网公司工程项目管理信息系统所涉及的用户众多,数据量庞大,对数据的访问控制和数据的存储安全有较高的要求,这就要求有一个高效率、高稳定性、高安全性的部署环境作为支持。高性能的UNIX大型机无疑是最佳选择,而由于J2EE的JVM的支持,使得采用J2EE技术所构建系统可以很高效的运行于UNIX大型机上。
3)技术上的支持力度
J2EE核心是一组技术规范与指南,其中所包含的各类组件、服务架构及技术层次,均有共通的标准及规格。目前这套标准得到了众多厂商的支持,包括IBM、SUM等业界大型厂商。在这方面.NET的优势明显不如J2EE。
同时,就目前我们的研发力量来说,用于J2EE开发经验的研发人员也明显多余.NET开发人员。所以,如果采用J2EE技术路线,将得到更多的技术上的支持。
4)系统的生存力
J2EE技术所构建的系统,由于JVM(JAVA虚拟机)的支持,可以使其运行于当前或者今后的各种环境中。
云南电网公司工程项目管理信息系统有一个较长的开发周期和很长的生命周期。由于技术的日新月异,为了保证系统在构建过程中和今后的使用过程中不会因为开发技术的更新而落后,不会因为硬件环境的升级换代而无法使用,推荐采用J2EE开发路线。
5)综合成本
J2EE构建得到众多开源技术的支持,如开源的报表、开源的流程控件等,在很大程度上降低了系统构建的综合成本。
而.NET对开源的支持力度较低,系统的构建需要购买大量的商业组件,增加了系统的成本。