了解旅行预订服务
最新更新日期:2006 年 11 月 23 日
目录
概述
旅行预订服务是随 NetBeans Enterprise Pack 5.5 一起提供的样例业务流程。
旅行预订服务在逻辑上聚集了一些其他的服务,是基于旅行预订系统的典型业务逻辑(如下所述)。
-
流程假定顾客通过发送一个包含所偏爱旅行计划的文档消息来启动流程。
-
顾客的旅程可以:
-
不包含预先存在的预订,或者
-
包含预先存在的机票、车辆和/或酒店预订等一组信息。
-
旅行预订服务检查传入顾客旅程并完成对旅程的处理。
-
如果顾客的旅程不包含预先存在的机票预订,则旅行预订服务会将该旅程传递给其合作伙伴服务(机票预订服务)以添加机票预订。
-
机票预订服务将修改的旅程传回到旅行预订服务。
-
旅行预订服务为车辆和酒店预订执行类似的逻辑。在每种情况下,它将实际提供预订的任务委托给车辆预订服务和酒店预订服务。
-
最后,旅行预订服务将完成的旅程传回到原始客户端,从而完成该流程。
有关使用 NetBeans IDE 的详细信息,请参见 NetBeans Web 站点中的文档和支持页。
先决条件
要了解本教程,您需要具备 Java 语言及其平台以及 NetBeans IDE 的一些基本知识或编程经验。
系统要求
本教程假定您的系统满足 NetBeans Enterprise Pack 5.5 发行说明的“系统要求”部分中指定的要求。
本教程所需的软件
在开始之前,请在计算机中安装以下软件:
- 包含 NetBeans Enterprise Pack 5.5 的 NetBeans IDE 5.5(下载)
返回页首
配置教程环境
在部署应用程序之前,必须正确配置 JBI 运行环境和 Sun Java System Application Server,并且使它们处于运行状态。
首先,请执行以下步骤来确认已启动了 JBI 服务器:
-
打开“运行环境”窗口。
-
展开“服务器”节点。
-
如果该节点已包含 Sun Java Application Server,请向下跳至步骤 5。
-
如果该节点不包含 Sun Java Application Server,请执行以下步骤:
-
右键单击“服务器”节点,然后选择“添加服务器”。
-
在“添加服务器实例”对话框中,选择 "Sun Java System Application Server"。
-
单击“下一步”。
-
在“平台位置”中指定 C:\Sun\AppServer。这是由 Enterprise Pack 安装程序设置的缺省应用服务器安装路径。选择“注册本地缺省域”。
-
单击“下一步”。
-
为应用服务器提供以下用户名和口令:admin/adminadmin。这是由安装程序设置的缺省用户名和口令。
-
单击“完成”。
-
右键单击 "Sun Java System Application Server 9" 节点,然后选择“启动”。如果“启动”选项不可用,并且 "Sun Java System Application Server 9" 节点的旁边有一个绿色三角形,则说明服务器已在运行。
返回页首
使用旅行预订服务样例项目创建新项目
使用旅行预订服务样例创建新项目:
-
从 IDE 的主菜单中,选择“文件”>“新建项目”。
-
在“类别”下面,选择“样例”>“面向服务的体系结构”。
-
在“项目”下面,选择“旅行预订服务”。
-
单击“下一步”。
-
键入所选的项目名称和位置,或者接受缺省值。
-
单击“完成”。
-
现在,“项目”窗口会包含两个项目节点:一个是名为 TravelReservationService 的 BPEL 模块的节点,另一个是名为 TravelReservationServiceApplication 的复合应用程序项目的节点。

查看演示
合作伙伴服务
旅行预订服务通过其合作伙伴服务的公共接口来与这些服务进行通信。这些接口是在特定于合作伙伴的 WSDL 文件中定义的。
IDE 包含一个名为 ReservationPartnerServices 的捆绑 EJB 项目。ReservationPartnerServices 项目包含三个合作伙伴服务基于 EJB 和 JMS 的基本实现。这些合作伙伴服务是酒店预订服务、车辆预订服务和机票预订服务。
在测试运行旅行预订服务流程之前,必须将这些合作伙伴 Web 服务部署到捆绑的 Sun Java Application Server 上。
此实现仅用作旅行预订服务流程的测试环境。BPEL 开发者请不要将重点关注在合作伙伴服务的实现上,因为它们仅是旅行预订服务测试的先决条件。
请执行以下步骤来打开并部署 ReservationPartnerServices:
-
从主菜单中,选择“文件”>“打开项目”。
-
使用“打开项目”向导以导航至 TravelReservationService 目录。
包含 TravelReservationService 的目录中还存在捆绑的 ReservationPartnerServices。
-
选择 "ReservationPartnerServices",然后单击“打开项目文件夹”按钮。
-
右键单击 "ReservationPartnerServices",然后选择“部署项目”。这将部署 ReservationPartnerServices。
-
通过执行以下步骤来验证是否成功部署了 ReservationPartnerServices 应用程序:
-
切换至“运行环境”窗口,然后展开 "Sun Java System Application Server 9" 节点。
-
展开“应用程序”节点,然后展开“EJB 模块”节点。

查看演示
返回页首
将 BPEL 项目部署到应用服务器上
不能直接部署 BPEL 项目。必须先将 BPEL 项目作为 JBI 模块添加到复合应用程序项目中。然后,您可以部署复合应用程序项目。通过部署该项目,可将服务组装用于应用服务器中,从而可以运行其服务单元。
-
在“项目”窗口中,右键单击 "TravelReservationServiceApplication" 部署项目节点,然后选择“添加 JBI 模块”。
将出现“选择项目”向导。
-
从“选择项目”向导中选择 "TravelReservationService"。
-
单击“添加项目 JAR 文件”按钮。
-
在“项目”窗口中,展开 "TravelReservationServiceApplication" >“JBI 模块”。
-
请注意,已添加了 "TravelReservationService.jar" 节点。
-
右键单击 "TravelReservationServiceApplication" 项目节点,然后从弹出式菜单中选择“部署项目”。
-
在警告对话框中,请确保选择了 "Sun Java System Application Server 9",然后单击“确定”。
-
如果在“输出”窗口中看到以下消息,则说明已成功完成了部署:

查看演示
返回页首
执行旅行预订服务流程的测试运行
业务流程开发者可以使用测试运行功能来测试运行其流程。BPEL 流程将部署到用于管理流程生命周期的 BPEL 运行环境中。BPEL 流程从负责启动流程的接收或 Pick 活动开始。
BPEL 流程也是一个 Web 服务。与任何 Web 服务一样,BPEL 流程包含一个随附的 WSDL 文件,该文件用于描述其公共接口。此接口又描述了客户端为创建流程实例而指定的目标操作和消息。在收到发送至其中一个接收活动的消息后,BPEL 运行环境将创建一个 BPEL 流程实例,并将消息传送到该流程实例以进行处理。
例如,对于 TravelReservationService.wsdl,存在一个名为 buildItinerary 的操作。TravelReservationService 客户端将调用此操作来启动与 TravelReservationService 之间的对话。
<portType name="TravelReservationPortType">
<operation name="buildItinerary">
<input message="tns:ItineraryIn"/>
<output message="tns:ItineraryOut"/>
<fault name="itineraryProblem" message="tns:ItineraryFault"/>
</operation>
</portType>
因此,要测试 BPEL 流程,必须向 BPEL 运行环境发送一条指向其中一个流程接收活动的消息。
本 BPEL 设计器版本包含一些功能,通过这些功能只需“指向并单击”操作即可完成此测试过程。确切地说,对于 TravelReservationService 样例项目,您可以将 buildItinerary 请求发送到部署的 TravelReservationService。
测试运行过程
测试运行 TravelReservationService:
-
展开 "TravelReservationServiceApplication" 节点。它包含一个名为“测试”的子节点。
-
展开“测试”节点,其中存在 4 个子节点。
-
HasNoReservations - 不包含预订的测试旅程
-
HasAirline - 包含预先存在的机票预订的测试旅程
-
HasVehicle - 包含预先存在的机票和车辆预订的测试旅程
-
HasHotel - 包含预先存在的机票、车辆和酒店预订的测试旅程
实际上,这些测试节点是包含 SOAP 消息数据的 XML 文件。每个节点表示一种不同的情况,可以使用这些节点来测试 TravelReservationService 以便按略微不同的方式执行流程。
-
右键单击 "HasNoReservations" 节点,然后从弹出式菜单中选择“运行”。选择“运行”操作后,IDE 会将 HasNoReservations SOAP 消息发送到 BPEL 运行环境,并且指示测试是否成功完成。

查看演示
注意:在添加 JBI 模块或部署项目之前,如果对测试方案执行测试运行,则该测试运行将会失败。
注意: 要解决执行测试运行时出现的服务端点问题,请参见 BPEL 设计器开发者指南:疑难解答中的“端口”部分以获取相关说明。
返回页首
调试旅行预订服务流程
您可以使用 IDE 来调试样例 BPEL 应用程序。
常规调试步骤
请执行以下常规步骤来调试样例应用程序:
-
打开“运行环境”窗口。
-
展开 "Sun Java System Application Server 9" 节点。
-
在 "JBI" 节点下面,执行以下操作:
-
展开“服务引擎”。
-
在 "JavaEEServiceEngine" 节点下面,右键单击 "com.sun.bpelse-1.0-2" 以获取其属性。
-
在属性表单中,将 "DebugEnabled" 由 false 更改为 true,并记住端口设置 3343。请注意,在开始调试会话时,只需在属性表单中将该条目更改一次。
-
从主菜单中选择“运行”>“连接调试器”。IDE 将显示“连接”对话框。
-
请执行以下步骤:
-
确保选择了“BPEL 调试器”作为调试器。
-
确保主机名为 localhost,端口为 3343。
-
单击“确定”。

查看演示
-
在“项目”窗口的 "TravelReservationService" 节点下面,双击 "TravelReservationService.bpel" 文件。
-
在源代码编辑器中,单击要设置断点的元素的行号以在源代码中设置断点。我们将使用 HasNoReservations 测试,因此会在调用所有三个合作伙伴服务的活动上设置断点。
-
在位于第 46 行的 ReceiveItinerary 接收活动上设置断点。这是用于启动流程的活动。如果未显示行号,请从主菜单中选择“视图”>“显示行号”。
您也可以在图中设置断点。要执行此操作,请切换至“设计”视图,右键单击该元素,然后从弹出式菜单中选择“切换断点”。
包含断点的元素上面将显示一个红色框。
“导航”的“BPEL 逻辑视图”中的元素也可以使用“切换断点”弹出式菜单命令。如果未打开“导航”窗口,请从主菜单中选择“窗口”>“导航”。对于“导航”中包含断点的元素,将显示一个红色小框,如以下屏幕快照所示 (ReceiveItinerary):
-
在 ReserveAirline(第 74 行)、ReserveVehicle(第 115 行)和 ReserveHotel(第 156 行)调用活动上设置断点。

查看演示
-
现在,在项目中添加监视:
-
如果未显示“监视”窗口,请从主菜单中选择“窗口”>“调试”>“监视”。
-
在“源”视图中,转至第 71 行并复制以下 XPath 表达式:
not($ItineraryIn.itinerary/ItineraryInfo/ReservationItems/Item/Air)
或者,选择图中的 HasAirline If 元素,然后从属性窗口的“条件”行中复制该 XPath 表达式。如果未显示“属性”窗口,请从主菜单中选择“窗口”>“属性”。
-
在“监视”窗口内单击鼠标右键,然后选择“新建监视”。
-
在“新建监视”对话框中,将该 XPath 表达式粘贴到“监视表达式”字段中。
-
再为第 112 行和第 153 行中的表达式分别添加监视。现在,“监视”窗口中应包含三项:
-
在“项目”窗口中,展开 "TraveReservationServiceApplication" >“测试”节点,右键单击 "HasNoReservations",然后选择“运行”。
-
当流程到达第一个断点时,请观察“监视”窗口:它应该在所有三个表达式的“值”列中包含 <Cannot evaluate the expression> 字符串。这是因为,流程已在第一个接收活动的开始处停止,并且 ItineraryIn 消息尚未到达。
-
单击“调试”工具栏上的“继续”(Ctrl+F5)。流程将在第二个断点处停止。此时,ItineraryIn 消息已经到达,并且已计算了监视中的条件。所有三个表达式的值应被设置为 true。
注意:如果消息不包含相应的预订项,则表达式返回 true。如果运行 HasAirline 测试,则会将 not($ItineraryIn.itinerary/ItineraryInfo/ReservationItems/Item/Air) 表达式(它用于检查传入消息是否包含机票预订项)的值设置为 false。
-
单击“继续”。在“BPEL 流程实例”窗口中,观察 BPEL 流程的状态。此外,在“BPEL 变量”窗口中,观察变量值随流程执行而发生变化的情况。

查看演示
在断点处调试操作
在流程实例暂停后,您可以执行以下任意传统的“调试”工具栏操作(如果未显示“调试”工具栏,请选择“视图”>“工具栏”>“调试”):
-
完成调试器会话 (Shift+F5)。结束当前的调试会话。
-
继续 (Ctrl+F5)。运行当前的流程实例,直至遇到下一个断点或者流程实例完成时为止。
-
步入 (F7)。步入下一个 BPEL 活动。在 BPEL 语言术语中,仅支持活动粒度的步入操作,而对于更细的粒度,则不支持其步入操作。执行步入时,当前行指示符将前移,并且会相应地更改“BPEL 变量”和“监视”窗口的内容。
返回页首