中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > .NET > 临时文章
集成J2EE和.NET Web服务(一)
作者:Evelyn Hobson 时间:2006-09-30 14:08 出处:BEA 责编:月夜寒箫
              摘要:集成J2EE和.NET Web服务(一)
许多文章声称,Java 2, Enterprise Edition (J2EE)和.NET Web服务是互操作的。从开发人员的角度来看这意味着什么呢?当您实际从事该工作时会引发什么问题呢?

出于我们的目的,我将Web服务定义为自包含的模块化业务应用程序,并且具有开放的、面向Internet的、基于标准的接口。我所提及的标准是简单对象访问协议(Simple Object Access Protocol,SOAP)和Web服务描述语言(Web Services Definition Language,WSDL)。SOAP是用于在Web服务之间通信的轻量级的基于XML的消息格式。WSDL是一个模式,它描述Web服务的使用方式。WSDL文档回答关于Web服务的下列问题:被交换的数据是什么?如何与该服务进行交互?以及该服务位于何处?当我提到Web服务之间的互操作性这一术语时,我是指您可以从.NET客户端应用程序调用J2EE Web服务,并且反过来也是成立的。

分析师们认为,J2EE和.NET各有大约40%的Web服务在其平台上实现。这意味着,对于客户来说,如果想要利用将来可用的所有Web服务,那么平台需要是可互操作的。两个阵营的公司正在共同努力以确保互操作性。目前已经成立多个标准团体,以促进各种Web服务平台提供者之间的互操作性。例如,SOAPBuilders和Web服务互操作性组织(Web Services Interoperability Organization,WS-I)都在致力于提高互操作性。

为了证明基本的J2EE和.NET Web服务可以互操作,必需说明两件事情。首先,.NET Web服务客户端应该能够调用和接收来自J2EE Web服务的应答。其次,J2EE Web服务客户端应该能够调用和接收来自.NET Web服务的应答。

案例分析

为了重用代码和知识,将使用相同的应用程序来证明这两点。我从一个使用servlet、JavaServerPages(JSP)以及企业JavaBean(EJB)的现有J2EE应用程序出发,将它转换成Web服务。这个应用程序允许现场代理为虚构的建筑公司查看、编辑和创建订单。该现场代理还能够通过客户名、员工id,或者订单状态来排序现有的订单。

从.NET客户端调用J2EE Web服务

构造J2EE Orders Web服务

为了尽可能多地重用代码,我使用已经编写并且部署到WebLogic Server上的EJB来实现后端的业务逻辑。首先,我需要创建一个Web服务来公开EJB的方法。为了在BEA WebLogic Workshop中创建一个Web服务,我使用所提供的向导并将它命名为Orders(见图1)。这将创建一个名为Orders.jws的Web服务文件。通过使用WebLogic Server 7.0 和 WebLogic Workshop 的Web服务运行时环境,我利用控件(Control)将EJB增加到Web服务。控件是WebLogic Workshop中的一种机制,用于从Web服务内部与资源进行交互。它们可以是到数据库、EJB、JMS队列或其他Web服务的接口。



从Web服务调用EJB

为了在WebLogic Workshop中从Web服务调用EJB,我需要一个到EJB的句柄,而这就是控件所要做的工作。正如下列代码实例中可以见到的,SearchEJB变量是我的控件;我调用一个特定的方法,getOrdersByID,并向它传递输入的参数ID。这是WebLogic Workshop 工具真正向开发人员提供价值的地方。我并不需要担心获取对于EJB的home和remote接口的引用。控件隐藏了该复杂性并且简化了与EJB接口所要求的编码。在代码实例中的jws:operation是一个提供给WebLogic Server的信号,表明该方法是Web服务的公共契约的一部分,并且可以供客户端进行调用。

/**
            * @jws:operation
            */
            public ordermasterfields[] getOrdersByID(String ID)
            {
            ordermasterfields[] orderArray = null;
            try{
            LinkedList orderList = SearchEJB.getOrdersbyID(ID);
            orderArray = getArray(orderList)
            }
            catch(Exception e){
            System.out.println("*** In getOrdersByID method *** \n
            Exception is: " + e.getMessage());
            }
            return (orderArray);
            }


一旦将EJB增加到Web服务,我仔细地检查从EJB方法返回的数据类型。我希望确保每个这些数据类型都是可序列化的,从而我可以通过网络将它们返回给Web服务客户端。注意,在上面的代码中,我的EJB方法返回一个LinkedList,它是不可序列化的。这个问题有两个可能的解决方法。我可以选择在EJB中修改代码从而返回一个可序列化的数据类型并且重新部署该EJB,或者我可以在将它返回给客户端之前在Web服务内部转换该数据类型。出于简单性,我选择第二个选项:我并没有重新部署EJB,并且如果需要的话,我还可以使用原先的前端Web应用程序。由于LinkedList是不可序列化的,因此我转换Web服务方法以返回一个“ordermasterfields”数组。ordermasterfields 类是用户定义的并且将要包括在WSDL文档中,这样客户端知道这些用户定义的类型是什么。getArray方法执行该转换。

下一步骤是生成提供给.NET客户端使用的WSDL文档。在WebLogic Workshop中,我简单地点击“生成WSDL文档”按钮,它为我自动地生成WSDL文档。现在我准备创建一个使用J2EE Orders Web服务的客户端。注意我们实际上已经完成的全部工作是增加一个新的Web服务接口到EJB。事实上,我所提到的Web应用程序前端仍然是可用的,因为EJB并没有发生改变。除了从原先的Web应用程序返回HTML外,我们现在通过SOAP从Web服务返回包含Orders数组的XML文档。
关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有