2002-09-17 09:07
J2EE和.Net:能共处吗?
在企业IT领域,开发Web服务的重要性已经越来越明显了,正因为Web服务的出现,企业数据和企业运行的流程通过远程访问的方式浑然一体。就Web服务来说,有些人可能会把Sun公司开发的Java 2、Enterprise Edition (J2EE)和微软公司开发的.NET技术视作相互排斥的Web服务解决方案,但是Noel Clarke,这位SilverStream软件公司的高级电子商务战略专家却不这样想。他认为,以上的三种Web服务技术完全可以共存。在今年3月JavaOne开发者大会的一次技术座谈会上(TS-3154),Clarke从交付和消费Web服务的角度对各类技术进行了正反面的评述。
电子商务悖论
产生Web服务的用户需求是什么?Clarke指出,Web服务的出现主要是由所谓的“电子商务悖论”这一现实状况所产生的。他说:“因电子商务而引发的巨大变革反而阻碍了电子商务赢得成功。只有当我们有能力动态地、快速地在我们企业内部乃至企业之间实现互操作,网络商务给我们带来的美好希望才会最终得以实现。”
为了实现这种综合性的集成,我们就必须实现商业功能的方便共享,同时能以一种灵活的处理流程把这些功能联系在一起,能以适当数据格式(适应多样的客户设备)交付这些功能,而且要让商业功能可以在任何地方都能被人找到。
SOAP、WSDL和UDDI之三位一体
真正的Web服务能提供商务工作的可重用单元和对商务数据的访问手段。Web服务并不关心数据的表达,它们能被API或GUI调用。结果,获取服务的消费者可以采取任何需要的形式来显示Web服务的结果,不管是HTML、Swing、WML、HDML还是XML等等。到最后,服务用到的协议和数据表示方式不仅无所不在而且具有强烈的因特网亲和性。
用XML、SOAP、WSDL和UDDI提供Web服务
目前访问Web服务的基础结构由SOAP(简单对象访问协议)、WSDL(Web服务描述语言)和UDDI(通用描述、发现和集成)构成。Clarke说:“我们为这些服务构造XML前端,然后获取XML信息并且用WSDL来描述它,之后再用SOAP消息包装这些信息。一旦造就了SOAP消息就可以从任何平台调用它,所使用的技术也不少——Perl、Python、Java、.NET等等都可以做到。然后我们就可以在UDDI注册表中发布这些WSDL定义,这样我们的顾客和合作伙伴就可以使用这些商务过程了。”
.NET
提到Web服务的时候,许多人把J2EE和.NET这两大技术阵营之间的争斗视作了另一番可乐之战。Clarke说:“有些人认为这就象口味偏好一样,你必须在两者之间做出选择。但是,我们相信Web服务确实是可以共存的。而且我们相信这种共存关系正是实现Web服务互操作的关键所在。”
Clarke接下来对.NET架构的基本组成单元进行了详细说明:
“智能的”客户软件应用程序使PC和其他类型的设备能够作用于XML Web服务
XML
Web服务由那些能相互连结起来的小型可重用组件应用程序所组成
.NET服务器负责发布、管理和编制XML Web服务
开发工具——包括Visual Studio .NET和.NET Framework等,正是它们建立、部署和运行XML Web服务
.NET为其支持的所有语言提供了单一的开发环境,这些编程语言包括Visual Basic ( VB
)、C++以及最新推出的C#等。C#有语言从构造上说类似Java语言,而且同样包括了垃圾收集等功能。Clarke就此评价说:“在这个领域里的很多人肯定会惊诧地说,嗨,那玩意儿不就是Java吗?哪年头就有了!”
.NET环境可以让开发者轻松地把应用程序开发为Web服务。然后开发者们可以方便地把Web服务归并到更大型的应用程序中来,最后就可以从任何运行Web服务栈的平台调用Web服务了。同时,.NET My Services则把传统的微软客户应用程序,比如钱包、收件箱、日历和优选设置等等分解成为各种单一的Web服务。
用VB、C++以及C#编写的应用程序都采用.NET之下的同类系统库,而且它们会被首先编译为MSIL(微软中介语言)这种伪代码,之后才被公共语言运行时( CLR )在执行的时候解释。Clarke指出:“这一切同Java语言的字节码和虚拟机非常相似。”
J2EE
J2EE是基于Java技术的一整套企业应用开发标准和规范以及同硬件无关的运行时环境。J2EE能够为开发的产品带来显著的可移植性、可伸缩性、稳定性、安全和可管理性。Clarke说:“这种平台的一个重要方面就是它已经问世大约5年左右了,而且在多种硬件平台具有了各类实现,相比微软
( .NET ),后者目前只有一种CLR,而且还是刚刚实现的一种。”
J2EE平台是Java Community Process (JCP)开发的,这是一个由许多主流技术公司组织的标准体。作为产业开发的结果,供应商们针对J2EE开发了大量的Web服务工具,比如Sun的Forte for Java (FFJ)、Eclipse(由IBM推出的一种公开源代码的开发工具)、Borland的Jbuilder以及Silverstream的eXtend产品线等。同时,Systinet公司提供了可插入Forte、Jbuilder和Eclipse的一套工具,从而为这些产品带来了额外的Web服务功能。Clarke说:“并不只有微软乐意演这场戏,整个阵营内的公司们团结在一起造就了这些Java规范、标准和工具。”
Java Community Process还逐步开发出了很多同Web服务有关的前端应用,其中包括大量适合XML处理的JSR(Java规范请求)。这些性能突出的API将在JDK 1.4或1.5版本中发布:
JSR-031 -- Java API for XML Binding (JAXB)
JSR-067 -- Java
APIs for XML Messaging 1.0 (JAXM)
JSR-093 -- Java API for XML Registries 1.0
(JAXR)
JSR-101 -- Java API for XML-based RPC (JAX-RPC)
JSR-109 --
Implementing Enterprise Web Services
JSR-110 -- Java APIs for WSDL
JSR-111 -- Java Services Framework
JSR-155 -- Web Services Security
Assertions
JSR-156 -- XML Transactioning API for Java (JAXTX)
JSR-159 --
Java Process Component API (JPC)
前路漫漫
要有效地构造面向服务的应用程序就必须实现XML集成、旧应用连接、业务过程管理、UDDI注册表、内容管理、个性化、业务逻辑以及前端开发等应用目标。Clarke 指出:“这是个相当复杂的过程。”
由于任务的复杂性,技术设计师们又在设想一种称为ISE(综合服务环境)的新一类产品。ISE通过提供设计环境、运行时可执行文件和部署平台等措施把Web服务开发的复杂性降低到商务应用程序开发的水准,从而为平台供应商、框架供应商以及IDE/工具包开发商提供了综合集成的可能。
在Web服务开发不断发展的同时,大量技术公司创造的革新和产品在推广Web服务方面具有重要意义,甚至可与Java平台规范以及JCP的作用相媲美。
这种全行业的共同参与在安全和身份识别领域更显得弥足珍贵。在Web服务的世界里,所谓的身份就是指电话号码、通信地址、信用卡号等个人的信息。
.NET技术体系下的身份架构叫作Passport(护照),Passport在微软服务器上存储个人信息。Clarke说:“微软把Passport视为一个显著的优点,但是,由于这一技术存在各种各样的漏洞,以至于采用Hotmail和脚本就可以获得人们的信用卡号。”
Liberty Alliance Project是一个由超过30家商业公司组成的合作组织,其职责就是为Java平台实现开放和联合的网络身份解决方案。该组织管理层的成员代表了超过十亿的客户,其中包括:美国运通、AOL时代华纳、加拿大贝尔、Citigroup、法国电信、通用汽车、环球电讯、惠普公司、国际万事达卡、诺基亚、美联航以及Vodafone等大公司。该组织坚持的原则是,用户帐号信息必须掌握在当前拥有其信息的单位手中,由用户管理帐户信息而非一个中央机构来完成这一职能,而且用户有权选择由那些机构来安全地共享其身份信息。
共同点
目前已经出现了可以把Java语言编译为微软中介语言或者反其道而行之的多类编译项目。
同时,没有任何办法能阻止J2EE的开发人员利用那些由.NET所开发的Web服务。原因是Web服务是建立在标准基础之上的。事实上,Clarke就演示了这两种技术之间互操作性:从从Java客户程序调用.Net生成的Web服务。
建议
在提到向客户推荐采用J2EE或.NET构造Web服务时,Clarke的建议是充分利用两种技术的优点。
Microsoft/.NET从历史上看主要占据PC桌面GUI和操作系统领域,其目标定位是小型企业、家庭办公和企业桌面用户。但是在其平台上,高水平的开发人员从人数来说还是相对较少。另外,Clarke认为,.NET还不能算作真正意义的企业类架构,而且它完全锁定在微软产品的范围之内。也许最重要的是,为了跟上新技术的潮流,微软一直以技术取向的激进态度为人所知。Clarke认为:“这可能会产生问题,有时会令你陷入困境。”
另一方面,J2EE 平台建立在基于命令行的UNIX基础之上,其定位是开发人员,而且在大型企业系统市场有强大的用户基础。这种平台的高水平开发者数量是相当大的。同时,J2EE 早就由JCP开发出来,而且已经得到了主要技术公司的实现。此外,它还实现了真正的跨平台兼容性。但是,由于J2EE是基于标准的平台,而且是由各阶段产业参与者共同发展的结果,所以这也意味着这种技术的深化和精炼需要时间。作为一种补救措施,J2EE的工具供应商已经联合起来开发更具革新意义和竞争力的新产品,其规范趋于更完备而且更稳固。
总而言之,Clarke建议,在已经使用了微软技术的场合不妨采用.NET技术构造具有中小级信息量和过程资源的Web服务,把基本的Web服务汇集到功能性的应用程序中来,而且为利用Web服务创建特定的Windows客户应用程序。他还建议,采用J2EE的场合主要有:构造和发布大型企业的Web服务,在服务器端汇集Web服务,创建客户应用程序(JFC/Swing)消费Web服务,以及需要平台无关性的因特网和外联网Web服务客户程序等。