使用 IBM Worklight 进行服务器端移动应用程序开发: 第 2 部分. IBM Worklight 适配器与 Web 服务业务逻辑的集成

本文是一个文章系列的第 2 部分,该文章系列介绍了如何结合使用 IBM® Rational® Application Developer for WebSphere® Software 和 IBM® Worklight 开发用于移动设备的应用程序,这些移动设备包括运行 Android、iOS、BlackBerry 和 Microsoft Windows Metro 操作系统的移动设备。在这一部分中,Bhargav Perepa 介绍了如何扩展并转换现有的服务器端业务逻辑资产,以便将它们用于移动领域,而不重新进行工程设计。Bhargav Perepa 首先展示了如何使用 Rational Application Developer 工作台开发和测试一个 JAX-WS 应用程序。然后介绍了如何使用 Worklight Studio 开发和测试一个使用 Web 服务应用程序中所开发的逻辑的移动应用程序。

Bhargav Perepa, IT 专家, IBM

Bhargav PerepaBhargav Perepa 是位于华盛顿特区的 IBM Federal Software Group 的 WebSphere 架构师和 IT 专家。他曾经是 IBM Austin WebSphere Development Lab 的 WebSphere 开发人员,并在 IBM 芝加哥积累了一些 Smalltalk 和 C++ 开发经验。Bhargav 拥有芝加哥伊利诺伊理工学院计算机科学硕士学位,以及奥斯汀市德克萨斯大学的 MBA 学位。



2013 年 10 月 08 日

简介

在这个文章系列的第 1 部分中,您使用 IBM® Rational® Application Developer for WebSphere® Version 8.5.1 开发人员工作台开发并测试了一个 Java 应用程序。然后使用了一种扩展和转换方法,还使用了您在一个移动应用程序中开发的自定义 Java 应用程序逻辑。为了开发一个包含调用 Java 应用程序逻辑的 HTTP 适配器的移动应用程序,您使用了 IBM® Worklight Studio 开发人员工作台。

在第 2 部分中,您将学习如何通过第 1 部分中开发的 Java 应用程序,使用 Rational Application Developer for WebSphere v8.5.1 开发人员工作台创建/测试一个基于 Java bean 的自底向上设计的 JAX-WS。然后还将学习如何将这个自定义的 Java API for XML Web Services (JAX-WS) 应用程序逻辑合并到某个包含 HTTP 适配器的服务器端移动应用程序中。最后将学习如何端到端地测试这个移动应用程序。

关于用例架构的注意事项

本文以上一篇文章为基础,使用了在第 1 部分中开发的相同用例。文中合并了相同的编程工件。一定要阅读 第 1 部分,熟悉该用例和编程工件(也可以单击 “本系列中的更多内容”)。


用例实现方法

用例实现包含 6 个不同的活动,它们大体分为以下步骤:

  1. 在 IBM Rational Application Developer 中开发 JAX-WS 应用程序。
  2. 使用 IBM Rational Application Developer 测试 JAX-WS 应用程序。
  3. 将 JAX-WS 应用程序逻辑打包为 Java 归档文件 (.jar) 以供移动应用程序使用。
  4. 在 IBM Worklight Studio 中开发移动应用程序。
  5. 将提供的 JAX-WS 应用程序逻辑作为一个 JAX-WS 归档库合并到移动应用程序中。
  6. 通过调用前几步中开发的 JAX-WS 应用程序逻辑并使用 Worklight 适配器,在 IBM Worklight Studio 中测试移动应用程序。这构成一次端到端测试。

使用 Rational Application Developer 开发一个 JAX-WS 应用程序

以下步骤列列出了使用 Rational Application Developer for WebSphere, Version 8.5.1 开发 JAX-WS 应用程序的过程。

  1. 启动 Rational Application Developer,指定文件系统上的工作区位置:c:\temp\RADWS\WSUsecasesJAX-WSProject
  2. 如果尚未打开 Java Enterprise Edition 透视图,请打开它(通过选择 Window > Open Perspective > Other > Java EE(默认设置),然后单击 OK)。
  3. 创建一个新的 JAX-WS 项目:
    1. 在 Enterprise Explorer 中,选择 UsecasesJavaProject > src > com.worklight.customcode > Usecases.java
    2. 要启动 Web 服务创建向导,可以右键单击并选择 Web Services > Create Web Service(参见图 1)。
图 1. 启动创建 Web 服务的向导
启动向导的菜单选项
  1. 接受默认的服务定义值(参见图 2):
    • Web service type:Bottom up JavaBean Web Service
    • Service implementation:com.worklight.customcode.Usecases
    • Server runtime:WebSphere Application Server v8.5
    • Web service runtime:IBM WebSphere JAX_WS
    • Service project:WebServiceProject
    • Service EAR project:WebServiceProjectEAR
    • Client type:Java Proxy
    • Configuration:No client generation
    • Box checked:Overwrite files without warning
  2. 单击 Next
图 2. Web 服务创建向导,服务定义
Web 服务定义的详细信息
  1. 接受 Web Service Configuration 屏幕中的默认值(参见图 3):
    • Delegate class name:com.worklight.customcode.UsecasesDelegate
    • Java to WSDL mapping style:Document Wrapped
    • Box checked:Generate WSDL file into the project
    • WSDL file:UsecasesService.wsdl
    • Box checked:Generate Web Service Deployment Descriptor
  2. 单击 Next
图 3. Web 服务创建向导,服务配置
Web 服务配置的具体细节
  1. 接受 WSDL 接口选项屏幕的默认值(参见图 4):
    1. Check box:WSDL Target Namespace
    2. WSDL Target Namespace:http://customcode.worklight.com/
    3. Check box:Configure WSDL Service Name
    4. WSDL Service Name:UsecasesService
    5. Check box:Configure WSDL Port Name
    6. WSDL Port Name:UsecasesPort
  2. 单击 Next
图 4. Web 服务创建向导,接口配置
接口配置的具体细节
图 5. Web 服务创建向导,发布选项
是否和在何处发布 Web 服务
  1. 单击 Finish(参见图 5)。

您现在已创建了一个基于之前开发的 Java 应用程序的 JAX-WS 应用程序,并将它部署到了 WebSphere Application Server, Version 8.5.0.2,如图 6 所示。

图 6. Enterprise Applications 列表确认服务已成功部署
成功运行 UsecaseEJBProjEAR 应用程序

在 Rational Application Developer 中测试 JAX-WS 应用程序

以下步骤列出了在 Rational Application Developer for WebSphere 8.5.1 中测试您开发的 JAX-WS Web 服务应用程序的过程。

  1. 选择 Project > Clean > Clean all projects,然后单击 OK,以便在干净的环境中构建该项目。
  2. 以 Java EE JAX-WS 服务应用程序的形式运行该应用程序:
    1. 从 Java EE 透视图中选择 Services 选项卡。
    2. 展开 JAX-WS,选择 WebServiceProject:UsecasesService
    3. 选择 Test with Web Services Explorer(参见图 7)。
图 7. 启动 Web Services Explorer
所描述的 Services 选项卡下的选择

调用 getNumOfUsecasesInstances() 方法执行测试

  1. Navigator 窗格中选择以下选项:
    WSDL Main > platform:/resource/WebServiceProject/WebContent/WEB-INF/wsdl/UsecasesService.wsdl > UsecasesService > UsecasesPortBinding > getNumOfUsecasesInstances
  2. 单击 Actions 窗格中的 Go 按钮(参见图 8,向下滚动顶部窗格,以便找到 Go 按钮)。
图 8. 调用 getNumOfUsecasesInstances() 操作
getNumOfUsecasesInstances() 的执行结果
  1. 在底部窗格中,双击 Status 栏,将视图展开为完整尺寸。
  2. 单击 Source 超链接。
  3. 选择清单 1 中的 SOAP 请求信封代码,并将它复制到一个临时文件(另请参见图 9)。
清单 1. SOAP 请求信封代码
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:q0=
"http://customcode.worklight.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:
xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<q0:getNumOfUsecasesInstances />
</soapenv:Body>
</soapenv:Envelope>
图 9. getNumOfUsecasesInstances() 的 SOAP 请求信封
getNumOfUsecasesInstances() 的 SOAP 请求细节

调用 getUsecase () 方法执行测试

  1. 在 Web Services Explorer 中,选择 Actions > Operations > getUsecase
  2. arg0 int 字段中,键入 4
  3. 单击 Go 按钮(参见图 10)。
图 10. 调用 getUsecase(4) 操作
getNumOfUsecasesInstances() 的执行结果
  1. 在底部窗格中,双击 Status 栏,将它展开到完整尺寸。
  2. 单击 Source 超链接。
  3. 选择清单 2 中的 SOAP 请求信封代码,并将它复制到一个临时文件(另请参见图 11)。
清单 2. SOAP 请求信封代码
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:q0=
"http://customcode.worklight.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:
xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<q0:getUsecase>
<arg0>4</arg0>
</q0:getUsecase>
</soapenv:Body>
</soapenv:Envelope>
图 11. getUsecase(4) 的 SOAP 请求信封
getUsecase(4) 的 SOAP 请求细节

调用 getAllUsecases () 方法执行测试

  1. Web Services Explorer > Actions > Operations > getAllUsecases
  2. 单击 Go 按钮(参见图 12)。
图 12. 调用 getAllUsecases() 操作
getAllUsecases() 的执行结果
  1. 在底部窗格中,双击该栏以展开该视图。
  2. 单击 Source 链接。
  3. 选择清单 3 中的 SOAP 请求信封代码,并将它复制到一个临时文件(另请参见图 13)。
清单 3. SOAP 请求信封
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:q0=
"http://customcode.worklight.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:
xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<q0:getAllUsecases />
</soapenv:Body>
</soapenv:Envelope>
图 13. getAllUsecases() 的 SOAP 请求信封
getAllUsecases() 的 SOAP 请求细节

包装 JAX-WS 应用程序逻辑供移动应用程序使用

执行以下步骤来包装一个 JAX-WS 应用程序,以便它的逻辑可用在移动应用程序中:

  1. 导航到以下文件夹:
    c:\temp\RADWS\WSUsecasesJAX-WSProject\WebServiceProject\WebContent\WEB-INF
  2. 将文件树类和 WSDL 文件夹压缩到一个 Java 归档文件 (.jar) 中,并将该文件命名为
    UsecasesJAX-WSProjectUtils.jar(参见图 14)
  3. UsecasesJAX-WSProjectUtils.jar 文件中的文件按以下结构组织:
UsecasesJAX-WSProjectUtils.jar
  com
    worklight
	  customcode
	    jaxws
		  GetAllUsecases.class
		  GetAllUsecasesResponse.class
		  GetNumOfUsecasesInstances.class
		  GetNumOfUsecasesInstancesResponse.class
		  GetUsecase.class
		  GetUsecaseResponse.class
		  Main.class
		  MainResponse.class
		  ToString.class
		  ToStringResponse.class
		  UsecasesExceptionBean.class				
		UsecasesDelegate.class
  wsdl
    UsecasesService.wsdl
	UsecasesService_schema1.xsd
图 14. 将 JAX-WS 应用程序打包为一个实用的库
Java 归档文件库内容(文件夹)

使用 IBM Worklight Studio 进行移动应用程序开发

以下步骤列出了使用 IBM Worklight Studio Version 5.0.6 进行移动应用程序开发的过程:

  1. 启动 Worklight Studio,在文件系统中指定以下位置作为工作区:
    C:\temp\WRKLT\WSAdapterCall2JAX-WSService
  2. 创建一个新的 Worklight 项目:
    1. 要启动新 Worklight 项目创建向导,请单击 File > New > Worklight Project
    2. 指定 Worklight 项目名称:WLHTTPAdapterCall2JAXWSProject
    3. 指定 Worklight 项目模板:HybridApplication
    4. 单击 Next
    5. 指定应用程序名称:WLHTTPAdapterCall2JAXWS
    6. 为此屏幕上的剩余设置选择默认值,然后单击 Finish
  3. 创建一个新 Worklight 适配器:
    1. 要启动新的 Worklight 适配器创建向导,请选择 WLHTTPAdapterCall2JAXWSProject > adapters > Worklight Adapter
    2. 可单击 New > Worklight Adapter 来启动新的 Worklight 适配器创建向导。
    3. 指定项目名称:WLHTTPAdapterCall2JAXWSProject
    4. 指定适配器类型:HTTP Adapter
    5. 指定适配器名称:Call2JAXWSAdapter
    6. 单击 Finish

图 15 在编辑器中显示了已配置的适配器元数据文件。

图 15. 编辑器中的 Worklight 适配器元数据
适配器配置文件的内容

图 16 在编辑器中显示了已完成的适配器逻辑实现。该适配器在 JavaScript 函数中实现 3 个方法,每个函数都会调用前几步中开发的 JAX-WS 应用程序逻辑。该应用程序逻辑可供一个 Java 归档文件 (JAR) 库中的移动应用程序使用。该实现演示了如何调用 JAX-WS 应用程序静态方法,以及 JAX-WS 应用程序实例方法。

图 16. 编辑器中的 Worklight 适配器实现
JavaScript 中的适配器函数实现
  1. 启动 Worklight 服务器:
    1. 选择 WLHTTPAdapterCall2JAXWSProject
    2. 单击 Start Worklight Server 选项。
  2. 将 Worklight 适配器部署到 Worklight 服务器:
    1. 选择 WLHTTPAdapterCall2JAXWSProject > adapters > Call2JAXWSAdapter
    2. 选择 Run As > Deploy Worklight Adapter

图 17 在 Worklight Studio 控制台视图中显示了 Worklight 适配器的成功部署。

图 17. 验证适配器部署,Worklight Studio Console 选项卡视图
控制台选项卡表明适配器已成功部署

图 18 在 Worklight 管理控制台中显示 Worklight 适配器已成功部署。

  1. 在 Google Chrome 浏览器中输入以下地址来验证部署:
    http://localhost:8080/console
图 18. 验证适配器部署,Worklight 管理控制台视图
浏览器显示了成功的适配器部署

将 Java 应用程序逻辑合并到一个移动应用程序中

以下步骤描述了如何导入 JAX-WS 应用程序库,以便将它用于 Worklight Studio 中开发的移动应用程序:

  1. 启动导入向导,将 Java 应用程序库导入 Worklight Studio 工作区,以便将它部署到 Worklight Server 上。
  2. 导航到 WLHTTPAdapterCall2JAXWS > server > lib 文件夹。
  3. 右键单击并选择 Import > File System > Next,以调出文件系统导入向导。
  4. 通过选择要从文件系统中导入的S .jar 文件,指定要在移动应用程序中使用的 Java 应用程序库:c:\temp\ UsecasesJAX-WSProjectUtils.jar
  5. 单击 Finish

图 19 显示了已完成的 Worklight 应用程序项目,可以将它用于测试。

图 19. 已完成的 Worklight 项目
Project Explorer 显示了已完成的项目

使用 IBM Worklight Studio 执行移动应用程序测试

以下步骤介绍了对一个移动应用程序的端到端测试。在此执行过程中,JAX-WS 应用程序逻辑是从移动应用程序的适配器组件调用的。

调用 getNumOfUsecasesInstances() 静态方法

  1. 选择 WLHTTPAdapterCall2JAXWSProject > adapters > Call2JAXWSAdapter
  2. 选择 Run As > Invoke Worklight Procedure
  3. 接受项目名称:WLHTTPAdapterCall2JAXWSProject
  4. 接受适配器名称:Call2JAXWSAdapter
  5. 指定过程名称:getNumOfUsecaseInstances()
  6. 单击 Apply ,然后单击 Run(参见图 20)。
图 20. 过程测试,getNumOfUsecaseInstances()
getNumOfUsecasesInstances() 的调用步骤

图 21 显示了 getNumOfUsecasesInstances() 静态适配器方法的成功调用。

图 21. 成功调用 – getNumOfUsecasesInstances()
调用结果:成功

调用 getUsecase(4) 实例方法

  1. 对于适配器名称,请选择 WLHTTPAdapterCall2JAXWSProject > adapters > Call2JAXWSAdapter
  2. 选择 Run As > Invoke Worklight Procedure.
  3. 接受项目名称:WLHTTPAdapterCall2JAXWSProject
  4. 接受适配器名称:Call2JAXWSAdapter
  5. 指定过程名称:getUsecase(4)
  6. 单击 Apply,然后单击 Run(参见图 22)。
图 22. 过程测试,getUsecase(4)
调用 getUsecase(4) 步骤

图 23 显示了 getUsecase(4) 实例适配器方法的成功调用。

图 23. 成功调用,getUsecase(4)
调用结果

调用 getAllUsecases() 实例方法

  1. 选择 WLHTTPAdapterCall2JAXWS > adapters > Call2JAXWSAdapter
  2. 选择 Run As > Invoke Worklight Procedure
  3. 接受项目名称:WLHTTPAdapterCall2JAXWSProject
  4. 接受适配器名称:Call2JAXWSAdapter
  5. 指定过程名称:getAllUsecases()
  6. 单击 Apply,然后单击 Run(参见图 24)。
图 24. 过程测试,getAllUsecases()
getAllUsecases() 的调用步骤

图 25 显示了 getAllUsecases() 实例适配器方法的成功调用。

图 25. 成功调用,getAllUsecases()
结果屏幕

结束语

本文章系列的第 2 部分展示了如何使用 Rational Application Developer for WebSphere 工作台开发和测试一个 Java API for XML Web Services (JAX-WS) 应用程序,以及如何使用 IBM Worklight Studio 开发和测试一个移动应用程序,该应用程序使用了之前在 JAX-WS 应用程序中开发的用户逻辑。文中演示了如何使用 IBM Rational Application Developer for WebSphere 和 IBM Worklight Studio 开发人员工作台工具,在无需彻底重新设计的情况下扩展并转换现有的服务器端业务逻辑资产,以便将它们用于移动领域。要进一步学习相关知识,下载 部分包含可供您使用的样例工件。在本系列的后续部分中,您将学习如何如何使用本文中介绍的相同方法扩展并转换 JAX-RS 服务和 Enterprise JavaBeans (EJB) 3.1 Java Persistence API (JPA) 应用程序资产,以便将它们用于移动领域。


致谢

衷心感谢来自 IBM 的 Sujatha Perepa (perepa@us.ibm.com) 和 Roger Snook (rcsnook@us.ibm.com) 提供的审阅反馈、建设性建议、支持和创造性的团队工作。


下载

描述名字大小
文中引用的文件RAD_UsecasesJAX-WSProject_March242013.zip38KB
文中引用的文件UsecasesJAX-WSProjectUtils.zip9KB
文中引用的文件WL_UsecasesJAX-WSProject_March242013.zip574KB

参考资料

学习

获得产品和技术

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Rational, 移动开发
ArticleID=947601
ArticleTitle=使用 IBM Worklight 进行服务器端移动应用程序开发: 第 2 部分. IBM Worklight 适配器与 Web 服务业务逻辑的集成
publish-date=10082013