提高J2EE技术和.NET之间的互操作性,第1部分

引言

Web 服务希望并且承诺将分散的应用程序以一种无缝的方式进行集成。但企业应用程序是在不同的平台上采用不同的技术构建的,因此,跨业务的集成并不是一件轻而易举的事。最近出现的基于 Web 服务的业务流程执行语言(BPEL)为定义 Web 服务的行为提供了一个高层描述语言。它提供一个标准和可移植的语言来将多个 Web 服务融合到一个商业流程中。由于 BPEL 受到一些主要厂商的欢迎,一些用来自动设计商业流程的集成开发工具,如 IBM WebSphere Studio Application Developer Integration Edition (Application Developer) 已经进入市场。这些工具减少了 Web 服务集成时需要的大量编码工作,并允许您通过拖拽 WSDL 文件到工具中的方式构建商业流程。我们期望这些工具能够自动产生调用 Web 服务的客户端的存根。因此,集成的成功目前很大程度上一来于底层复杂的工具支撑。这就更加要求开发成员采用最佳实践来确保共享 Web 服务的内在互操作性。

正如我在本文以及随后的文章中所讲的,以下几个问题需要特别关注:

利用厂商工具根据实现代码得到 WSDL 中的 Web 服务语言非常方便。但是这种方式忽略了消息脚本的设计,但这一点正是异构的环境(如 J2EE 技术对.NET)中 Web 服务互操作的关键。

流行的 RPC/encoded 方式以其简单、灵活且熟悉的特点对开发人员是个有吸引力地选择。然而,在厂商之间对抽象 SOAP 编码数据模型的同步实现带来的困难成为 Web 服务互操作的一个困难性的挑战。

弱类型的集合对象、包含空元素的数组和特定的本地数据类型都给互操作性带来一定的问题,特别是:

对于厂商提供的工具来讲,准确地解释代表弱类型集合对象的 XML 脚本并将它们映射到本地数据类型是不可能的。

带有空元素的数组的 XML 表示在 .NET 和 Websphere 之间是不同的。

由于本地数据类型和 XSD 数据类型并不具有一一对应关系,在转换过程中,信息或精度将会丢失。

由于使用相对 URI 引用,Java 技术和 .NET之间不同命名转换将会导致命名空间冲突。

从 WSDL 开始

所有 Web 服务的互操作问题都可以归结到 WSDL 文件上。WSDL 是 Web 服务的接口定义语言(IDL)和服务器与客户间的协议。服务语法,即 WSDL 文件中的消息类型、数据类型和交互方式,是构建松耦合的系统的关键。尽管 WSDL 并不要求使用特定的类型系统, XML 脚本数据类型(XSD)在 Web 服务领域内广受欢迎。

XSD 提供了大量的内置的基本类型并允许服务提供者进一步定义定制的复杂类型。XSD 的类型系统比任何编程语言的类型系统都更加复杂和强大,并且更重要的是,它是独立于编程语言的,因此,它成为 WSDL 定义 Web 服务语法的逻辑起点。

理论上讲,就像 COM 和 CORBA 的 IDL,您应该首先创建并编辑 WSDL --在您基于 WSDL中的服务语法来构建 Web 服务和特定实现语言的客户程序之前,定义接口、消息和数据类型。

然而,事实上,即使经验丰富的都不会那么做。他们最初开始实现特定于语言的接口,如 Java 接口,然后依赖厂商的工具从它们的实现代码中获取 WSDL 服务语法;再把这些 WSDL 服务语法交给 Web 服务客户程序以便根据 WSDL 找出如何来调用 Web 服务。最后,在他们经常不需要知道 WSDL 之前, 他们就能够创建并运行复杂的 Web 服务。他们可能在异构的环境中运行他们的客户和服务器程序,即或者 J2EE 平台,或者 .NET 平台,或者二者都有。

目前厂商的集成开发工具下面的方向发展,即所有的东西,包括 WSDL都可以自动生成,不需要写任何代码(或者,至少许多厂商都声称并希望如此)。这一趋势很有吸引力,因为它开发效率很高,且相对于人工编码它很少出错(当然在工具功能合适且可靠的条件下)。在单一的平台上,互操作性一般不成问题,只要 Web 服务和客户都使用同样的开发工具。

当对跨越异构的环境产生互操作性要求时,问题变得比较明显。现在,您从实现语言来创建 Web 服务交互的关键构件,然后利用平台独立的工具将它们映射到 WSDL 中语言独立的元素。当客户平台上的工具根据 工具生成的 WSDL 来产生服务代理时,将进行另外一个映射。这一流程基于下面的事实,WSDL 是 Web 服务的接口定义语言。语言独立的 WSDL 应该成为客户和服务器的共同基础。以这种方式使用开发工具将双倍增加映射过程中信息丢失的可能。

这并不意味着您应该放弃这些工具,所有的厂商应该停止生产并在市场上销售这些工具。在当前的企业应用程序开发领域自动化已经成为一个重要的因素。工具本身很强大,关键在您怎么利用它们的力量?您可以利用这些工具产生一个框架 WSDL 来作为起点或者模板。脚本、消息部件和数据绑定必须仔细设计来遵循 WS-I 一致性要求。就像您出于数据库效率的考虑而不希望由工具产生数据库脚本一样,您不应该忽视手工设计高效 Web 服务消息和数据类型。有时,即使元素的名字也要仔细设计来遵循潜在的异构平台间的命名转换。对于 Web 服务互操作性来讲, WSDL 是唯一比较重要的构件。程序员必须学会基于原始 XML 消息进行编程,至少学会读取 XSD、 WSDL 和 SOAP 消息。

时间: 2024-10-21 02:14:47

提高J2EE技术和.NET之间的互操作性,第1部分的相关文章

提高J2EE技术与.NET之间的互操作性,第3部分

引言 正如 Java 包通常用来保证 Java 类,使其只能存在于不同层次的命名空间中,这样就可避免类.方法等等之间的命名冲突,XML 命名空间也是为相同的目的而服务于 Web 服务.它限定 XML 元素或属性的名字并帮助它们避免命名冲突.XML 命名空间是基于 URL 应当是全局唯一的基础之上的.然而,解释 URL 的方法及在本机代码的映射对于不同的平台来说是不同的.通常这些不同之处是微妙的,但如果开始时不解决这些的差别,到后来有可能会很难解决. 我将在下面的部分当中讨论几个与命名空间有关的互

技巧应用:怎样提高J2EE项目的开发速度

j2ee|技巧|速度|项目 在J2EE技术体系中,往往被灌输了太多容器的概念,什么EJB容器.Servlet容器等等,而开发过程也在开发.配置.部署之间迭代与反复:如此一来常会出现令人尴尬的状况:往往花几分钟时间去改一个Bug.却要再花双倍或者更多时间去部署和测试,开发工程师们不得不中断思路,看着服务器如蜗牛般启动,并在开发工具和部署工具之间来回切换. 事实上,配置也好.部署也罢,都是开发过程中一个必不可少的阶段.如何通过集成式的开发环境将这些开发阶段有机集成在一起,是摆在我们面前的迫切需要.在

使用J2EE技术实现Web方式的软交换配置管理

1 软交换技术简介 软交换技术采用分层的网络架构,把传统电路交换机的呼叫控制功能从媒体网关中分离出来,通过软件实现连接控制.呼叫进程选择.呼叫选路等呼叫控制功能.软交换一方面,造就了网络的融合,另一方面,软交换采用了开放式应用程序接口(API),允许用户在独立于设备制造商的情况下,根据自己的需要在网络中开发和引入新业务,这使得软交换技术在综合接入能力.业务提供.网络管理.用户认证.鉴权和计费等方面有明显的优势.在构建新一代网络的同时,软交换技术充分考虑到现有各种网络的平滑过渡,集语音.数据.多媒

iBeshmet v1.5免费版正式发布 J2EE技术的MVC开发框架

ibeshmet是基于J2EE技术的MVC开发框架,用于实现Web应用的快速开发.该框架提供了完整的Web应用解决方案,UI使用当前流行的 ExtJS2.0,表现层框架为Struts2 , 事务管理由Spring2.0处理,持久层使用Ibatis2.3.该框架已经基于上述技术,提供了如页面框架.身份验证.用户管理和权限管理等基本功能. iBeshmet就是提供了可复用功能模块的开发框架.它基于J2EE规范,采用MVC构架模式,前端使用ExtJS2.0,表现层框架使用Struts2,事务由Spri

VC中利用多线程技术实现线程之间的通信

文章来源:[url]http://www.programfan.com/article/showarticle.asp?id=2951[/url] 当前流行的Windows操作系统能同时运行几个程序(独立运行的程序又称之为进程),对于同一个程序,它又可以分成若干个独立的执行流,我们称之为线程,线程提供了多任务处理的能力.用进程和线程的观点来研究软件是当今普遍采用的方法,进程和线程的概念的出现,对提高软件的并行性有着重要的意义.现在的大型应用软件无一不是多线程多任务处理,单线程的软件是不可想象的.

提高J2EE层与数据库层交互操作能力优势

大多数应用程序性能管理(APM)解决方案都只考虑和分析J2EE应用程序的某个层次的性能问题.这种方法不足以解决架构复杂的应用程序的性能问题.良好的APM工具应该能够让你从J2EE层深入到数据库层以确保性能问题被快速地解决. 情况并非越来越好,公司的网站性能下降到了极低点,失落的客户开始寻找其它厂商了.IT调查机构开始调查并且认为J2EE应用程序是响应时间较差的罪魁祸首.这立即给J2EE开发小组带来了很大的压力,他们必须确定并解决这个问题. J2EE开发小组在进行了一些最初的调查之后,他们认为问题

J2EE探险者: 用于无状态网络的J2EE技术

在最近几年里,Java 行业的发展呈指数级增长.作为一名企业应用程序开发人员.架构设计师或者技术经理,您可以从许多供应商.最佳实践.规范和组件类型中为您的 Java 技术实现进行选择.J2EE 探险者系列的目的是帮助您从这些选择中找到一条途径,对于任何一种给定的情形,协助您挑选合适的技术. 在本文,也就是第 1 部分中,我们将探讨无状态 J2EE 组件,并评估出最合适的组件来用于您的企业体系结构.说到无状态.请求处理组件,可供选择的 J2EE 技术主要有两种:servlet 或 Enterpri

请问大家,最近在用j2ee技术写网站,请问可以用java实现文字云么?

问题描述 请问大家,最近在用j2ee技术写网站,请问可以用java实现文字云么? 请问大家,最近在用j2ee技术写网站,请问可以用java实现文字云么?之前我只知道可以用D3做...求教 解决方案 j2ee是后端编程环境,d3是js的库,两者不矛盾.你还是可以把d3放在j2ee中.

《IP组播(第1卷)》一2.8 混合组:IGMPv1、v2和v3之间的互操作性

2.8 混合组:IGMPv1.v2和v3之间的互操作性 要找到共同点.如果一个子网上有多种支持不同IGMP类型的主机,能够让它们之间实现通信的唯一做法就是使用所有主机都支持的最低IGMP版本.这是因为高级版本能够兼容低级版本. 还有一种情况是在一个子网中混合了一些客户端和服务器.如果路由器上配置了较低版本的IGMP,它就不可能检测到运行了更高IGMP的路由器.这时工程师需要介入,必须在路由器上配置相同的IGMP版本.