中国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
  当前位置:> IBM专区 > WebSphere > WebSphere综合
使用 PHP 访问 WebSphere Process Server V6.0 业务流程
作者:Martin Smolny 时间:2006-08-27 01:31 出处:IBM 责编:月夜寒箫
              摘要:使用 PHP 访问 WebSphere Process Server V6.0 业务流程
本文说明了如何从 PHP Hypertext Preprocessor (PHP) Server 访问运行于 IBM WebSphere Process Server Version 6.0 上的基于业务流程执行语言(Business Process Execution Language,BPEL)的应用程序。

引言

业务流程执行语言 (BPEL) 是基于 XML 的语言,用于定义业务流程。IBM® WebSphere® Process Server 包含了基于面向服务的体系结构(service-oriented architecture,SOA)的实现,允许执行在 BPEL 中指定的业务流程。

PHP 是一种流行的开放源脚本编写语言。经常将其用于各种动态 Web 内容,如 Web 门户和基于 Web 的客户机应用程序。其代码嵌入到 HTML 中,由与 Java™ Server Pages (JSP) 类似的服务器进行解释。

在很多公司中,外部网站由外部机构进行开发和维护。在这些机构内,经常将 PHP 用于实现网站的交互功能,例如联系人表单或搜索功能。如果此类公司需要启动某个业务流程或与来自外部网站接口的业务流程进行交互,则面临着如何使用 PHP 访问 WebSphere Process Server 6.0 业务流程的挑战。本文将演示一个简单的实现,并说明潜在缺陷的危害。

先决条件

需要安装以下软件:

  • XAMPP for Linux 1.4.12 或更高版本,用作 PHP 服务器。
  • IBM WebSphere Process Server 6.0.0 或更高版本,用以运行业务流程。
  • WebSphere Integration Developer 6.0.0 或更高版本,用以创建示例业务流程。

体系结构

WebSphere Process Server 中执行业务流程的组件是使用 Java 和 J2EE 实现的。由于 PHP 大部分是使用 C 编写的,因此集成这些不同的平台就变成了一大挑战。首先,我们需要找到一种方法来为从 PHP 使用业务流程提供接口。最好有一个独立于平台的通信协议来将这些不同的平台连接起来。使用简单对象访问协议(Simple Object Access Protocol,SOAP)的Web 访问就可提供此功能。

通过使用 WebSphere Process Server,可以将业务流程作为 SOAP Web 服务安装。这些 Web 服务具有使用 Web 服务描述语言(Web Service Definition Language,WSDL)定义的接口。从 V5 开始,PHP 就包含用于 SOAP 的函数;因此,PHP 可以调用 Web 服务。

从 PHP 访问 WebSphere Process Server 中运行的业务流程的基本体系结构要使用 SOAP,如图 1 中所示。


图 1. WebSphere Process Server 中运行的业务流程从 PHP 使用 SOAP 启动
WebSphere Process Server 中运行的业务流程从 PHP 使用 SOAP 启动

实现场景

在此部分,将学习如何进行以下工作:

  • 创建业务流程。
  • 将 Web Service Export 添加到 TravelBooking 流程。
  • 调整生成的文件,以获得 PHP 互操作性。
  • 将 TravelBooking 应用程序作为企业归档导出。
  • 安装 TravelBooking 应用程序。
  • 创建 PHP SOAP 客户机。

创建业务流程

WebSphere Integration Developer 中的 BPEL 编辑器不在本文讨论范围之列。因此,我们将使用 TravelBooking 示例应用程序(属于在 Business Process Choreographer 示例网站上为本文提供的示例库)。如果有兴趣了解如何开发基于业务流程的应用程序,Business Process Choreographer 示例网站是一个不错的起点。对于本文,如下面所述导入示例工作区 TravelBooking.zip 即可:

  1. 将文件 TravelBooking.zip 下载到一个临时目录。
  2. 在 WebSphere Integration Developer 中单击右键,以在上下文菜单中找到 Business Integration 视图,然后选择 Import


    图 2. Business Integration 视图的上下文菜单
    Business Integration 视图的上下文菜单

  3. 在 Import Wizard 的 Select 页上选择 Project Interchange 作为导入源,然后单击 Next


    图 3. Import wizard 对话框
    Import Wizard 对话框

  4. Import Projects 页的 From zip file 字段中输入第 1 步中下载的 zip 文件的路径。


    图 4. Import Project Interchange 对话框
    Import Project Interchange 对话框

  5. 单击 Select All,以选择所有项目。
  6. 单击 Finish

将 Web Service Export 添加到 TravelBooking 流程

到目前为止,我们已经导入了功能完整的流程应用程序。可以将其从 WebSphere Integration Developer 导出为 EAR 文件,然后不加修改直接将其导入到 WebSphere Process Server。尽管可以将其作为 Web 服务使用,但有必要向应用程序添加其他构件,即 Web Service ExportExport 是业务流程组件的客户机接口呈现。

  1. 在 Business Intergration 视图中双击 TravelBooking 模块,以打开 Assembly Diagram


    图 5. TravelBooking 模块的装配关系图
    TravelBooking 模块的装配关系图

  2. 在装配关系图中右键单击 TravelBooking 组件。选择 Export => Web Service Binding


    图 6. TravelBooking 组件的上下文菜单
    TravelBooking 组件的上下文菜单

  3. 看到询问是否应自动创建 WSDL 文件的对话框时,请单击 Yes
  4. 选择 soap/http 作为传输协议,并单击 OK


    图 7. Select Transport 对话框
    Select Transport 对话框

您的装配关系图现在应显示一个 Web Service Export 已连接到 TravelBooking 组件,如图 8 中所示。



图 8. TravelBooking 模块的装配关系图,已添加 Web Service Export
TravelBooking 模块的装配关系图,已添加 Web Service Export

调整生成的文件,以获得 PHP 互操作性

SOAP 消息体中的缺省子元素未限定,即该元素没有命名空间前缀。


清单 1. SOAP 体中未限定的元素
            <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
            <SOAP-ENV:Body>
            <book>
            <request>
            <destination>New York</destination>
            </request>
            </book>
            </SOAP-ENV:Body>
            </SOAP-ENV:Envelope>
            

可选的 XML 模式属性 elementFormDefault 允许指定是否应在 SOAP 消息中使用完全限定的元素。通常,使用完全限定元素并不太好,因为这可能会带来额外开销和阻塞 SOAP 消息。遗憾的是,XAMPP for Linux 中的 1.4.12 PHP SOAP 客户机实现似乎并不承认此属性,始终要求在 SOAP 消息中提供完全限定元素。

为上面创建的流程组件生成的 WSDL 文件并不指定 elementFormDefault 属性,因此这会导致采用无命名空间前缀的缺省行为。所以,您需要编辑 WSDL 文件,手动添加该属性。必须将其值设置为 qualified,以确保交换的 SOAP 消息将具有完全限定元素,如下面所示。


清单 2. SOAP 体中的完全限定元素
            <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
            xmlns:ns1="http://bpc/samples"
            xmlns:ns2="http://bpc/samples/TravelBooking">
            <SOAP-ENV:Body>
            <ns2:book>
            <ns2:request>
            <ns1:destination>New York</ns1:destination>
            </ns2:request>
            </ns2:book>
            </SOAP-ENV:Body>
            </SOAP-ENV:Envelope>
            

按照以下步骤操作,以调整生成的 WSDL 文件:

  1. 导航到 Business Integration 视图中的 Interfaces 部分。
  2. 右键单击 TravelBooking 接口。从上下文菜单中选择 Open With => Text Editor


    图 9. TravelBooking 接口的上下文菜单
    TravelBooking 接口的上下文菜单

  3. elementFormDefault="qualified" 属性添加到内联模式定义。


    图 10. 在文本编辑器中显示的 TravelBooking 接口
    在文本编辑器中显示的 TravelBooking 接口

  4. Ctrl+S,以保存更改。
  5. 导航到 Business Integration 视图中的 Data Types 部分。
  6. 右键单击 TravelBookingRequest 数据类型。从上下文菜单中选择 Open With => Text Editor


    图 11. TravelBookingRequest 数据类型的上下文菜单
    TravelBookingRequest 数据类型的上下文菜单

  7. elementFormDefault="qualified" 属性添加到模式定义。


    图 12. 在文本编辑器中显示的 TravelBookingRequest 数据类型
    在文本编辑器中显示的 TravelBookingRequest 数据类型

  8. Ctrl+S,以保存更改。

将 TravelBooking 应用程序导出为企业归档

TravelBooking 应用程序的创建工作现在已经完成。下一步是将其作为 EAR 文件导出,以安装到 WebSphere Process Server 中。

  1. Business Integration 视图中右键单击 TravelBooking 项目。从上下文菜单中选择 Export


    图 13. Business Integration 视图的上下文菜单
    Business Integration 视图的上下文菜单

  2. 在 Export wizard 的 Select 页上,选择 EAR file 并单击 Next


    图 14. Export 对话框
    Export 对话框

  3. EAR Export 页上,为要创建的 EAR 文件指定目的地,然后单击 Finish


    图 15. EAR 导出细节对话框
    EAR 导出细节对话框

安装 TravelBooking 应用程序

为了能安装 TravelBooking 应用程序,请确保 WebSphere Process Server 已启动并正在运行:

  1. 打开 Web 浏览器,并输入 URL:http://locahost:9060/ibm/console,以登录到 WebSphere Administrative Console。
  2. 登录到 WebSphere Administrative Console 并单击 Applications => Install New Application。指定前面创建的 TravelBooking 应用程序 EAR 文件的路径。单击 Next


    图 16. Administrative Console——安装新应用程序
    XML error: The image is not displayed because the width is greater than the maximum of 572 pixels. Please decrease the image width.


  3. 在接下来的面板中,有很多用于安装 EAR 文件的选项。这些选项不在本文的讨论范围之列。缺省设置就能满足所使用的示例应用程序的需要。通过单击 Next 逐步通过这些面板。在最后的页面上单击 Finish
  4. 安装完成后,应该显示消息“Application TravelBookingApp installed successfully.”,如下所示。单击 Save to Master Configuration


    图 17. Administrative Console——应用程序成功安装
    Administrative Console——应用程序成功安装

  5. 新安装的企业应用程序需要进行手动启动。导航到 Applications => Enterprise Applications。选中应用程序 TravelBookingApp 前的复选框。单击 Start


    图 18. Administrative Console——启动应用程序
    Administrative Console——启动应用程序

  6. 打开另一个 Web 浏览器窗口,并通过使用以下 URL 导航到 WSDL,以验证安装:
    http://localhost:9080/TravelBookingWeb/sca/TravelBookingExport/wsdl/TravelBookingExport_TravelBookingHttp_Service.wsdl
    应该在浏览器中看到显示了 TravelBooking 业务流程的 WSDL。

创建 PHP SOAP 客户机

本部分讨论如何利用 PHP 中提供的 SOAP 客户机 API 来访问 TravelBooking 应用程序。可以在下面的下载部分下载 PHP 客户机应用程序的完整源代码。XAMPP for Linux 1.4.12 用作 PHP 运行时平台。

由于 Web 服务由其 WSDL 进行全面的描述,因此很容易对其进行自检和创建 SOAP 客户机。PHP 类 SoapClient 会利用 WSDL 所提供的信息,并接受 WSDL 的 URL 作为参数。


清单 3. 创建 SoapClient 对象
            <?php
            $client = new SoapClient("http://localhost:9080/TravelBookingWeb/sca/TravelBookingExport/wsdl/TravelBookingExport_TravelBookingHttp_Service.wsdl");
            |-------- XML error:  The previous line is longer than the max of 90 characters ---------|
            ?>
            

为了获得可用操作和所需输入和输出参数的概况,PHP 类 SoapClient 提供了两个方法:__getFunctions()__getTypes()


清单 4:转储可用操作和参数
            <p>Available operations:</p>
            <pre>
            <?php
            var_dump($client->__getFunctions());
            ?>
            </pre>
            <p>Available/needed types:</p>
            <pre>
            <?php
            var_dump($client->__getTypes());
            ?>
            </pre>
            

通过手动查看 WSDL 文件或使用上面描述的函数,都可以方便地准备输入参数和调用此 Web 服务的操作。务必要注意,实际调用的方法的命名与 WSDL 接口中所描述的操作完全相同。PHP SOAP 客户机可以动态地提供各种 Web 服务操作,如 $client 对象上的 PHP 方法。


清单 5:创建参数数组和调用 Web 服务
            <?php
            $params = array("request" =>
            array("residence"         => $_GET['residence'],
            "destination"       => $_GET['destination'],
            "dateOfDeparture"   => $_GET['dateOfDeparture'],
            "dateOfReturn"      => $_GET['dateOfReturn'],
            "creditCardNumber"  => $_GET['creditCardNumber'],
            "creditCardCompany" => $_GET['creditCardCompany'],
            "departureAirport"  => $_GET['departureAirport'],
            "departureTime"     => $_GET['departureTime'],
            "airline"           => $_GET['airline'],
            "hotelCompany"      => $_GET['hotelCompany'],
            "carRentalCompany"  => $_GET['carRentalCompany'],
            "carCategory"       => $_GET['carCategory']));
            $result = $client->book($params);
            ?>
            

$result 对象现在包含 Web 服务调用的输出。Web 服务响应的 WSDL 中的内联模式仅定义一个名为 information 的简单类型元素。与在 $client 对象上动态创建的 book() 方法类似,我们可以使用此元素来获取结果值。


清单 6:显示结果
            <p>The process answered: <i><?= $result->information ?></i></p>
            

在 PHP 中创建 SOAP 客户机来访问在 WebSphere Process Server V6.0 上运行的业务流程只需要这些代码行。当然,实际实现需要使用错误检查代码来确保访问更为稳定。

测试场景

以下屏幕截图显示了从 PHP 网站成功调用 WebSphere Process Server 中运行的业务流程的情况。

以下是可以用于启动该流程的数据:


图 19. PHP 示例的输入表单
PHP 示例的输入表单

成功调用后,将显示以下结果页。为了进行演示,在开始的位置输出一些技术信息,如 SoapClient->__getFunctions()SoapClient->__getTypes() 的输出:


图 20. PHP 示例的结果页
PHP 示例的结果页

结束语

通过使用 SOAP 之类的 SOA 技术,可以将 PHP 等不同的技术与业务流程方便地连接在一起。一个较小的缺点是,PHP 并不能正确地支持 elementFormDefault 属性,但可以方便地对此进行规避。

SOA 允许对各方面的投资(如当前的 PHP 网站)进行保护,但同时也能通过访问 WebSphere Process Server V6.0 中的业务流程从最新的技术获益。






回页首


下载

描述名字大小下载方法
Sample PHP application for this article php-source.zip 3KB  FTP|HTTP
关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有