a. 为了部署,运行在Windows .NET Framework之外编写的服务器端的应用程序需要一个Windows Server的许可,这比三个遵从J2EE的商业服务器中的任何一个许可都便宜很多。包括四个网络服务器的系统部署费用的差别可达到数十万美元。例如,Microsoft Windows Server 2003(企业版)的一个四机器系统(每个有四个pc)的许可费用不超过16,000美元(这考虑了零售因素)。而WebSphere Application Server 5.0在同样的系统中每台pc的许可费用达12,000美元,这共要192,000美元。这个比率是12比1。大多数基于J2EE的商业应用程序服务器的价格都和这类似。(这假定了性能相等。然而实际上Middleware公司2002年10月的报告显示,一个建立在Windows .NET Framework上的应用程序的效率是建立在同样流行的基于J2EE的服务器上的程序的2-4倍。所以实际上价格的优势远高于12比1)有很多免费的,基于J2EE的开放源应用服务器,但是它们并没有J2EE-compliant的商标。还有关于文件和产品的问题:需要产品之间的比较来讨论采许可费用。
b. 为Windows .NET Framework开发工具的费用也更加低廉。Visual Studio .NET是.NET的整合开发工具,它的许可费用大大低于商业化的J2EE销售商制定的开发工具的费用。并且在业界,Visual Studio .NET作为最佳开发工具赢得了一系列的大奖。评估过Visual Studio .NET和其竞争对手的客户都说,相对于最好的Java工具,Visual Studio .NET开发效率更高(See Giga,2002年6月)。
4) Windows .NET Framework和基于J2EE的产品都和第三方的产品一起工作。例如,在后端数据库领域,.NET和基于J2EE的应用程序能访问储存在Microsoft的SQL服务器、IBM的DB2、Oracle,Informix、Sybase等服务器里面的数据。再举一个例子,.NET和基于J2EE的系统能访问流行的信息中间设备,如Microsoft的MSMQ或是IBM的MQSeries。同样,也包括文件系统,第三方开发工具,代码版本系统,防火墙等。
a. .NET包括代码、产品、工具和构架,来利用网络上全部的计算资源,包括设备、个人电脑和服务器等。.NET使所有的这些设备能经过标准通讯协议全部连接在一起,即所谓的“XML WEB服务”。(.NET应用程序可以和任何一个系统连接,无论系统用什么语言和平台,甚至是J2EE。只要目标系统遵照XML WEB服务标准。).NET模型是广泛的分布式计算,它和许多代码互相通讯并交换信息。
b. J2EE是面向服务器的模型,它并不开发网络上的智能和计算功能。总的来说,基于J2EE的产品只支持服务器端的应用程序。J2EE一般把PC只看作是一个HTML的浏览器,而将这些设备认为是哑终端。至于XML WEB服务,现有的协议标准支持分布式的计算,现有版本的J2EE规范并没有提到XML WEB服务的问题,但是基于J2EE的产品在添加了附加装置后也可以支持XML Web服务。然而,添加附加装置也就意味着有严格的限制。例如,还不清楚现有的规范是否允许EJB调用Web服务,虽然Web服务的组件能调用一些EJB程序。
3) 编程模型的一致性
Windows .NET Framework提供了一个跨服务器、PC和其它设备的一致的、面向组件的模型。而J2EE提供EJB作为服务器端的组件模型;为客户端或是本地组件建立开放的完全用Java编写的API;为用户界面提供servlet;也为移动设备提供另一种不同的模型。甚至在EJB内部也有至少3种明显不同的子模型,每一种子模型都有不同的语言定义。
a. Windows .NET Framework提供一个能识别版本的类加载器,这就意味着应用程序的开发者能确保他们开发的应用程序在一部分代码已经更新的情况下仍能运行。而Java和J2EE(现有的)没有版本识别的类加载器,这就意味着开发者和管理员不能保证代码被执行时是正确的。或是说,开发者只能靠运气来保证这一点。
b. Windows .NET Framework显示了语言层面上的类属性—这就使得编程更加简单。例如,在源代码中只用一个简单的属性就能把.NET组件标志为处理模式。或者说,一个.NET组件和XML的串行化可以在一个属性中被定义。这个机制大大简化了许多编程任务。而Java不显示语言层上的类属性,虽然Sun公司考虑到要修改Java语言来改变现状。这种变化估计在两三年内才能第一次实现。
c. .NET还支持分离数据访问,这主要用于在移动设备或是偶尔联网的场合里运行的应用程序。数据能被脱机操作,接着再和起始数据重新同步。而不论是J2EE还是J2SE现阶段都不支持分离数据访问,需要这项功能的J2EE开发者必须自己写“plumbing code”。
d. 为建立基于网络的用户界面,Windows .NET Framework提供基于事件的模型,这些模型类似于流行的Visual Basic中的智能客户端模型。ASP .NET模型使得建立、发布和维护一个基于网络的用户界面变得更加容易。与之形成对比的是,J2EE在JSP中不支持这样的模型。有一些第三方的扩展程序部分弥补了这些功能,但是它们的实用性和简便性不能和ASP .NET相比。作为一个推荐的J2EE附加程序,Java Server Faces可能做到这一点。但这个附加程序并没有包括在J2EE的1.4版本以前。而要获得销售商的支持,则又需至少一年的时间。
e. J2EE支持一个对象相关的数据映像模型,它被称作EJB Entity Beans。这样是为了允许开发者更容易地从一个相关的数据库建立对象模型。然而,实际上把这个想法编程实现却要面对下列问题: