|
J2EE vs .NET - 对抗与整合的旋律广告 J2EE vs .NET - 对抗与整合的旋律
Chief System Architect 2002年4月5日 本文就Web服务领域的两个应用框架,J2EE和.NET进行针对性的比较。主要从对Web服务技术的支持、第三方厂商的支持、对Web服务规范的控制程度以及他们的市场等方面展开讨论。J2EE和.NET是正面竞争的两个强大的平台,然而在Web服务的技术支持下,同时他们也是能够互相融合和集成的应用部署环境,在文章的最后部分,通过了一个应用实例简析了整合的方式。 Microsoft .NET与SUN J2EE是目前的企业Web服务平台市场的两个最重要的应用框架(Application Framework)。它们都为针对分布式N-Tier应用的设计、集成、性能、安全性和可靠性等诸多方面为用户提供了总体的指南和规范,基于这些指南和规范,技术提供商提供了相应的平台、工具和编程环境。在具体的应用框架中,包括了针对应用的表现层服务、服务器端进程、会话管理、商业逻辑框架、应用数据缓存、应用逻辑、持久化性、事务、安全和日志服务等等。 技术提供商能够在应用框架的顶部构建应用程序开发工具和应用服务器。应用框架的目标是提供一个统一的软件框架,以减少对企业软件产品的支持、维护和集成的代价。 Microsoft .NET是一个由Server、Client和Service组成的平台。.NET框架包括基本的运行库、用户接口库、CLR、C#、C++、VB.NET、Jscript.NET、ASP.NET以及.NET框架API的各个方面。它由以下三个部分组成: .NET平台:包括构建.NET服务和.NET设备软件的工具和基础框架; Web服务规范 由于Web服务的各种技术都是先以规范的形式制订,然后再交付各大开放商进行实施的。如果从一开始就参与某一种Web服务规范的开发,那么它的平台就能够以最快的速度支持这一种Web服务规范。在这一点上,Microsoft给人以非常积极进取的映象,在Web服务领域,Microsoft与IBM共同主推了大量的Web服务规范,在一段时间内,它们两家公司的Web服务技术的市场推广活动都是联合举行的,不难看出这两家公司在这个领域背后的战略合作。从最初的Web服务核心技术SOAP、WSDL主要由这两家制订,到后来的UDDI,由这两家为首的多家核心企业共同制订,以及后来的一些不是很核心的Web服务规范:WS-Inspecation、WSFL、WS-Security、WS-Routing、WS-License、WS-Referral完全由这两家来制订,我们不难看出,Microsoft和IBM对于Web服务的贡献以及他们对Web服务规范的控制。 而Sun自从在XML规范的制订中发挥了重要的作用之后,在其后的Internet规范,尤其是Web服务的规范的制订中,声音变得非常地微弱。而且似乎并没有改善的趋势,最近在Web服务领域中的一件大事是WS-I.org的成立,WS-I.org是致力于为保证Web服务所承诺的互操作性而成立的一个组织,其主要的工作就是开发保障Web服务互操作性的相关规范,并进行规范实施的测试。WS-I.org的核心成员包括:Accenture、Bea、HP、Intel、IBM、Microsoft、Oracle、SAP等,Sun不在其中。是Sun的发展战略的问题,还是受盈利问题的困扰,还是被其他公司抛弃,我们不得而知,不过我们可以知道的是,Sun再一次在Web服务领域中落后了,由它控制的J2EE规范的状况也可以推见。 市场 从技术的发展来看,大型的用户、或是有着成功实施经验的用户,并不会因为新技术的推出,而盲目地否定旧技术,他们总是在保护投资的前提下,在不推翻现有架构的前提下,有选择地挑选适合他们的技术。 J2EE已经是一个成熟的、成功的企业级应用解决方案,拥有大量的客户,已经实施了J2EE的企业不太可能在Web服务的时代中全面否定J2EE而去接收.NET。而.NET是一个全新的架构,虽然它的开发语言中,依然包含了诸如VB、C++等传统开发语言,刚刚接触.NET的开发人员会以为能将以前使用VB开发的代码平滑地转移到.NET平台下来。其实不然,VB.NET的语法与VB 6.0已经有了根本性的差别,与其说VB.NET是VB 6.0的升级,不如说VB.NET是C#的Basic版。由于采用了CLI的结构,VB.NET将很难兼容以前的VB 6.0的代码,大量的VB的代码无法顺利升级的.NET下来,我们期待着Microsoft能够提供转换程序以实现代码的升级。虽然在原代码级别上的升级变得不是那么容易,然而开发人员仍然可以在.NET平台下,将原有的COM组件进行重新包装,形成.NET平台下的Web服务组件。 虽然在继承旧有技术上,.NET做得不是非常优秀。不过它的整个平台、开发工具的高集成性和友好的开发环境将给开发人员留下深刻的印象。在Java领域中,无论是Borland的JBuilder 6、还是SUN的Forte for Java,又或是IBM的WebShpere Application Developer以及Visualage for Java都无法达到VS.NET的生产效率。开发工具是.NET的一大优势,同时.NET平台对Web服务规范的支持力度也仅有IBM的Java平台能够与之比拟。 因此,我们认为在企业级应用场合,如果已经采用了J2EE架构的,应该会在Web服务的时代继续使用J2EE架构。而原先就是采用Microsoft架构的,由于技术的延续性考虑,大多数仍然会选用Microsoft的.NET。而那些采用其他技术的企业级应用则会视对开发效率,安全性、可靠性、维护代价都不同指标对两种架构进行考察,应该说机会是均等的,J2EE强在有大量的应用实例,而.NET强在整合集成的优秀开发部署环境。 在中小级别的应用领域,J2EE的占有率优势不再那么明显,一方面,一贯以来Microsoft特长于这个领域,另一方面,Java解决方案已经是如此地深入人心,即使是中小企业也会考虑J2EE架构,在这个领域,两者平分秋色。 而在桌面应用(Web Service客户端)领域,除了一些管理客户端会采用Java开发以外,绝大多数的应用应当毫无疑问的会使用Microsoft的技术在Microsoft的平台上开发和部署。 J2EE vs .NET, 强强对抗 从.NET和J2EE这两个平台的发展历程来看,.NET从一开始就深深打上了Web服务技术的烙印,它的市场推广活动中,无时无刻不凸现其作为Web服务的开发和部署平台的特征。可以说,.NET天生就是为Web服务准备的开发平台和部署平台,.NET就是Web服务平台。相对.NET而言,J2EE是一个比较"老"的东西,最初它是为了将Java平台拓展到企业级解决方案的应用领域而制定的一个平台框架规范,随着Web服务的兴起和发展,J2EE平台作为一个企业级应用的开发和部署平台,是无法回避业界的重大技术革命------Web服务的,随着Web服务技术的发展,J2EE不断地将Web服务的支持引入进来。 有多家公司已经构建了基于J2EE的集成开发环境(IDE)和应用服务器。他们中的多数已经开始在产品中支持Web服务的创建、部署和运行,对Web服务标准的支持和复杂的程度则随厂商的不同产品而异。多个独立的公司,包括IBM、BEA、Oracle、HP、SUN等,在他们的基于J2EE的开发工具和应用服务器的中正在提供对Web服务的支持。当在这个技术领域中有多个竞争产品,这时就意味着没有单个公司的垄断。在过去的四年中,J2EE已经被证明是一个稳定的、可扩展的、成熟的平台。新增的对Web服务的支持是这个平台的又一个特征。 Microsoft进行Web服务开发的基础开发工具(集成开发环境IDE)是Visual Studio.NET,使用Visual Studio能够确保了产品的强壮性和易用性。Microsoft同时提供了支持Web服务的服务器软件,包括BizTalk 2000以及SQL Server 2000等。然而,这所有的工具、服务器和技术都是由一家公司控制:Microsoft。尽管Microsoft 公司对Web服务技术的做出的承诺和稳定性没有任何问题,但是没有竞争,技术的提供和推动也许不是最好的。不过Microsoft刚刚在它的网站上提供了.NET的核心CLI for FreeBSD的原码下载。这也许是一个好的开端。尽管.NET从Windows DNA体系框架中继承了大量的特征,但是它仍然相对较新,需要被证明能够提供企业范围的应用框架。 Web服务支持 整体上看,J2EE是通过一组API包(JAXM,JAXP,JAXR,JAX-RPC)对Web服务提供支持。J2EE的Web服务实现一般是通过EJB来实现的。当然也可以把提供Web服务实现的Java应用独立出来,这完全依赖于设计和构建应用程序的业务处理和数据逻辑层。 而在.NET中,Web服务直接构建在平台中,.NET框架提供完整的服务标准如SOAP、WSDL和UDDI。.NET框架中Web服务的实现一般通过.NET Managed Component(包括Managed Class以及COM/COM+组件)来实现。 从使用者的角度来看,两者都是Web服务的开发和部署平台,在这里,我们将首先来比较一下两者对Web服务的支持力度,比较将从以下四个方面来进行: 服务实现 (Service Implenmentation) 目前来看,实现一个Web服务,实际上是意味着,首先要将服务调用所需要指定的操作以及操作所涉及的数据结构化,并且将其组织成符合SOAP规范的XML消息文档,然后该Web实现需要能解释和处理这个XML文档。当一个Web服务被实现之后,这个Web服务的客户端就能够向其发送一个SOAP消息,该SOAP消息中包含了具体需要调用的操作以及涉及的数据,这个Web服务接收该SOAP消息并完成处理后,向客户端相应一个SOAP消息,该消息包含了操作的执行结果(返回值)。 在J2EE中,通过使用WSDP中的Java API for XML-based RPC(JAX-RPC),已有的Java类或Java应用都能够被重新包装,并以Web服务的形式发布。JAX-RPC提供了将RPC参数(in/out)编码和解码的API,使开发人员可以方便地使用SOAP消息来完成RPC调用。同样,对于那些使用EJB的商业应用而言,同样可以使用JAX-RPC来包装成Web服务,而这个Web服务的WSDL界面是与原先的EJB的方法是对应一致的。 JAX-RPC为用户包装了Web服务的部署和实现,对Web服务的开发人员而言,SOAP/WSDL变得透明,这有利于加速Web服务的开发周期。当然如果开发人员认为这样的透明带来了不灵活性,那么也可以直接使用JAXP来手工地处理XML消息。 .NET是一个在J2EE之后出现的平台,所有的重量级技术产品无一例外地都会吸收先前的成功者的优点,.NET大量地吸收了Java平台,甚至是J2EE平台的优点,其中,最重要的一点就是.NET不再完全沿袭Microsoft先前的技术,从.NET开始,.NET应用不再以本地机器代码运行,而是编译成中间代码(Microsoft Intermediate Language),由称为CLR(Common Language Runtime)的虚拟机来运行,这样,.NET也具备了强大的跨平台的可能。.NET不但在底层跨平台,在开发语言上,则能以较小的代价支持更多的开发语言,它支持的所有开发语言,包括VB.NET、C#、C++、JScript等都被编译成相同的中间代码,使用相同的运行库执行。因此,从平台特性而言,.NET平台是迄今为止最"通用"的应用开发和部署平台。 在.NET平台上,开发人员可以自由地使用各种语言来开发Web服务,.NET平台同样提供了优秀的快速开发工具,将SOAP/WSDL等繁复的技术点对开发人员透明,当然,同样开发人员也可以使用MSXML来直接处理XML消息。 服务调用和执行 SOAP(Simple Object Access Protocol)为在一个松散的、分布的环境中使用XML对等地交换结构化的和类型化的信息提供了一个简单且轻量级的机制。 SOAP规范主要由四部分组成: SOAP信封用于包装数据 J2EE使用WSDP中的Java API for XML-based RPC (JAX-RPC)来完成使用SOAP方法来调用远端服务的功能。JAX-RPC使得Java开发人员能够利用符合SOAP/1.1规范的基于XML的RPC方法来完成Web服务之间的交互。 当一个JAX-RPC服务被设计并实现之后,它就需要被部署到服务器端的JAX-RPC运行系统中。部署的步骤会视具体实现时使用的组件的不同而有所不同,例如,一个基于EJB的服务就需要被部署到EJB Container中。 在JAX-RPC服务的部署过程中,可以使用部署配置工具来为这个JAX-RPC服务配置一个或多个协议绑定。绑定的实质就是将抽象的服务定义与指定的基于XML的传输协议相结合,一个绑定的例子就是在HTTP之上的SOAP 1.1。 而对于这个Web服务的客户端而言,它应当根据描述该Web服务的WSDL文档中所描述的绑定信息与这个Web服务进行远程调用。 对于.NET而言,实现Web服务的方法与J2EE中描述的方法是类似的,同时具有更好的集成性。.NET的开发人员目前实现Web服务有三种典型的方式: 使用内置的.NET SOAP消息类 服务描述 为了使Web服务的应用能够不断增长,非常重要的一点是,我们需要有一种结构化可理解的方法来描述Web服务,使得Web服务的描述信息能够被程序自动处理,这是Web服务即时装配的基本保证。而WSDL(Web Services Description Language)正是这样的一种工具,它是一种类似IDL技术的服务描述语言。WSDL 定义了一套基于 XML的 语法,将Web服务描述为能够进行消息交换的服务访问点的集合,从而满足了这种需求。WSDL 文档将Web服务定义为服务访问点或端口的集合。在 WSDL 中,由于服务访问点和消息的抽象定义已从具体的服务部署或数据格式绑定中分离出来,因此可以对抽象定义进行重用。 J2EE通过Java Web Services Developer Pack(在文章的后面部分,将简称为WSDP)中的Java API for XML-based RPC(JAX-RPC)提供了Web服务的RPC调用的支持,其中Web服务的RPC调用界面使用的规范正是WSDL。使用J2EE开发和部署的Web服务,能够使用WSDL来发布它的调用界面,Web服务之间的所有的XML交互消息及其交互模式都应当遵循对应的WSDL文档的描述,同时Web服务的消费者也可以在各种Web服务的注册中心中查询并获取Web服务的WSDL描述。 与J2EE Web服务相同,.NET Web服务同样支持WSDL 1.1规范,同时采用WSDL作为Web服务界面的描述工具。此时,我们常常将一个XML命名空间与这个WSDL文档相关联,以使用这个XML命名空间来唯一标识这个WSDL文档所描述的Web服务。 .NET提供了一个Client端的组件以使应用程序能够调用由WSDL文档描述的Web服务的RPC入口,而同时也在Server端提供了一个组件以实现从WSDL文档到COM组件的映射。 服务发布、发现与绑定 当Web服务被实现之后,它应该被以某种形式被发布到某个可提供查询的在线服务站点中,以使得潜在的Web服务的使用者能够发现这个Web服务。关于如何访问这个Web服务的技术信息应当同时被发布,以使得发现这个Web服务的客户端能够通过这些技术信息与Web服务进行交互,具体地来说,这些信息称为绑定(Binding)信息。 注册服务是目前用于发布、发现和绑定Web服务的主要方法。注册服务中包含了用于描述Web服务以及Web服务提供者的数据结构和分类信息。注册服务即可以由企业自己来提供,也可以使用第三方的中立服务。 在J2EE的WSDP中,Java API for XML Registries (JAXR)提供了与多种类型注册服务进行交互的API。JAXR运行客户端访问与JAXR规范向兼容的Web服务,这里的Web服务即为注册服务,一般来说,注册服务总是以Web服务的形式运行的。 JAXR支持三种注册服务类型: JAXR Pluggable Provider:
实现了JAXR规范的特性,而又独立于任一种指定的注册服务。 全年年底,IBM和Microsoft又一起发布了WS-Inspection规范(也称为WSIL规范,Web Services Inspection Language),WS-Inspecation将作为UDDI的补充,在兼容UDDI的基础上,为未注册入UDDI注册服务的Web服务提供发现机制。 第三方厂商的支持 在前面的内容中,我们已经看到,在对Web服务的支持上,J2EE和.NET基本上是不相上下的,唯一的区别可能是.NET的开发工具更为方便一些,集成度更高一些。在这里来考察一下第三方厂商对两种架构的支持。 J2EE作为一种开放的规范,从一开始就得到了众多厂商的支持,IBM、BEA、HP、Oracle等都洒下了大笔的投资在J2EE的实施上。目前市场上最好的J2EE Application Server并不是SUN与Netscape合资的iPlanet,而是Bea的WebLogic和IBM的Webshpere。一年一度的JavaONE都有成千的开发商参加。由于J2EE是开放的规范框架,任意厂商只要有实力都可以按照规范来开发实现,不同厂商的组件也可以在一起协同使用,当然最关键的是这些参与J2EE的厂商都具有很强的实力,基本上可以这么认为,除了Microsoft以外,基本上所有的计算机软件业巨擎都对J2EE情有独钟。 然而,J2EE虽然是开放的规范,但是它的使用却不是那么的开放,每家使用J2EE技术的公司都不得不为此向SUN支付一笔不小的费用。同时也正因为SUN对J2EE规范的独家控制,使得J2EE规范的开发进度有些缓慢,迄今为止,J2EE规范中并不包含对Web服务的支持,WSDP只是一种插件形式的扩展支持。有消息表明,在今年年底前,SUN和Java领域的其他支持商,包括IBM、Bea、Silverstream等会就J2EE如何支持Web服务达成一致,然而这一切均存在变数,其中的根结就在于Sun对Java技术的独家控制。 同时,由于J2EE对Web服务支持的步履维艰,各大厂商分别自行开发Java平台的Web服务支持,IBM在这个领域的步伐是飞快的,它的WSAD(Webshpere Studio Application Developer)集成了大量的自行开发(部分来自于Apache.org,不过这项项目的前身大多是IBM发起的,而后移交给Apache.org的)Web服务组件,业已称为Java领域的开发Web服务的最佳开发工具,同时IBM的Websphere也慢慢向Web Service开发部署应用平台的角色转化。 而对于Microsoft的.NET而言,虽然从一开始,Microsoft就给人以独占、垄断、不开放的形象出现在平台市场上。然而,它的.NET却表现出了前所未有的开放姿态。 .NET的主力开发语言C# 已经提交给 ECMA 进行标准化,ECMA是一个致力于推动行业范围内采用信息和通信技术的非特定供应商的国际标准组织。C# 的标准化使希望在任何平台上都可以实现 C# 编程工具的公司能够实现他们的愿望。Microsoft 还向 ECMA 提交了 Microsoft .NET 框架的一个子集,叫做公共语言架构(Common Language Infrastructure,CLI)。这将使其他供应商能够在各种平台上实现 CLI,以便用 .NET 框架提供的基本体系结构模型所写的软件可以在各种平台上用各种工具来创建。 大家应该能够发现,CLI是类似于Java VM的机制,是.NET跨平台的基本保障。同时具体的实施也已经开展:著名的Linux桌面环境"GNOME"的开发商,美国Ximian公司在2001年7月开始启动一个名叫Mono Project的开放源码版".NET"的开发项目,旨在使开发者能够编写同时在Windows和Linux上运行的.NET程序,Mono计划主要包括一个C#编译器、与Microsoft 公司的Common Language Infrastructure(CLI)兼容的类库、Linux版Common Language Runtime(CLR)编译器。最近,Microsoft又在它自己的网站上提供了CLI for FreeBSD/Windows的原码下载,为推广CLI踏除了探索性的一大步。虽然这些只是起步,然后谁也不能说,它就不会象当初的Java那样,从Sun的小玩具,变成了今天如此重要的开发平台。 整合J2EE和.NET 虽然,J2EE和.NET在吸引用户的方面是在对抗,然而Web服务技术的精髓就是集成整合,将不同平台框架上的应用整合在一起,形成一个更大的应用服务。因此J2EE和.NET完全可以利用他们彼此的优势,在一个统一的Web服务的层次上,进行广泛地应用协作和整合。 下面我们使用一个应用实例来演示J2EE平台与.NET平台的整合,下面是一个认证考试申请应用的例子。这个例子也是我将在Web Service Case Study系列的第二篇中针对的应用实例,这里仅作为实例引用,也算是案例预览吧。 Figure 1.牋 J2EE和.NET整合案例图示
下面,我们按照图中的序号标明的顺序,逐一讲解这个Web服务集成是如何实施和运作的: 用户可以通过NEIP的界面申请Web服务技术认证的注册、课程和考试。 最后一点,我们再来谈谈J2EE和.NET这两个Web服务平台的发展方向。我们知道,要使Web服务真正获得成功,还会遇到许多技术挑战,其中有许多与它们赖以生存的开放、不利的环境有关。以下是一些最显著的问题: 可靠性。某些Web服务主机可能将比其它主机更可靠。那如何测量和传递这个可靠性呢? 当Web服务主机暂时脱机时会发生什么情况?
您是寻求和使用其它供应商拥有的替代服务,还是等待原来的那个重新可用呢?
您怎么知道哪些供应商可以信赖? 小结 在前面,我们已经就技术、厂商支持、规范以及市场的几个方面对.NET和J2EE两个平台架构进行了介绍和论述,同时我们也给出了整合应用的实例。下面我们使用一张表格来概括两者的比较:
从表格中,我们不难看出,两者应该说是旗鼓相当的两个对手,应该说在将来的发展中,对抗是在两个平台的控制者之间,而在两个平台的使用者之间,合作整合将远胜过互相对抗。 参考资料 J2EE vs .NET J2EE vs. Microsoft.NET: A comparison of building XML-based web services Java 2 Enterprise Edition(J2EE) versus The .NET Platform: Two Visions for eBusiness Cat Fight in a Pet Store: J2EE vs. .NET Compare Microsoft .NET to J2EE Technology Web Service 技术/评论网站 UDDI-China.ORG, 以UDDI为主的Web服务技术网站。 WebServices.ORG, Web服务的综合类技术网站。 IBM developerWorks/Web Service Zone, IBM的Web服务技术资源中心 MSDN Online Web Services Developer Resources, Microsoft的Web服务的开发者资源网站 ITPapers/Web Service, ITPapers的Web服务评论文章 Web服务系列技术标准规范 UDDI执行白皮书, UDDI-China.org, UDDI.org UDDI技术白皮书, UDDI-China.org, UDDI.org UDDI程序员API规范, UDDI-China.org, UDDI.org UDDI数据结构参考, UDDI-China.org, UDDI.org Web Service Description Language (WSDL) 1.0, IBM, 25 Sep 2000 SOAP: Simple Object Access Protocol Specification 1.1, IBM, Microsoft, DevelopMentor, 2000 XML Schema Part 0: Primer , W3C, 2 May 2001 Extensible Markup Language (XML) 1.0 (Second Edition), W3C, 6 Oct 2000 作者简介
如果您希望与本文章的作者或其所在机构,进一步交流,请联系:畅享网 姜小姐 jill.jiang@amteam.org | 021-51096826-112 | 在线联系 |
节能与优化IT 企业CIO过冬良策当前金融危机的影响还在继续漫延,很多企业都在苦寻过冬的良策,在这种情况下,节能与优化技术与产品无疑成为CIO们关注的首要对象,本次选题就是针对节能与优化IT来为CIO们提供过冬的良…… |
|||||||||||||||||||||||||||||||||||||||||||||||
|
|