BPEL 设计器开发人员指南:故障排除
由
Bob May
创建,由
Irina Filippova
维护,2007 年 12月
目录
BPEL 设计器开发人员指南
本发行版本中未提供的 BPEL 2.0 元素
此发行版本 BPEL 设计器支持的元素具有一些特定的限制。有关所支持的 BPEL 2.0 语言结构和相关限制的详细信息,请参阅 BPEL 服务引擎用户指南 。
使用不同于 BPEL 2.0 规范的 BPEL 模式
此发行版 BPEL 设计器支持 BPEL 2.0 最终规范并且不支持之前的规范。这意味着当您打开与之前版本规范兼容的 BPEL 文件时,BPEL 设计器将显示“无法显示图消息”。
如果看到此消息,请执行以下操作:
检查 BPEL 文件与 BPEL 规范的版本兼容。兼容 BPEL 规范 2.0 的 BPEL 文件含有以下字符串: x mlns="http://docs.oasis-open.org/wsbpel/2.0/process/executable" 含有PartnerLinkType 定义的 WSDL 文件应该含有以下字符串: xmlns:plnk="http://docs.oasis-open.org/wsbpel/2.0/plnktype" 将文件中的名称空间替换为以上内容并尝试在 BPEL 设计器中打开 BPEL 文件。
确保流程中使用的 BPEL 结构与 BPEL 2.0 规范兼容。
服务端点冲突
部署两个以上复合应用程序项目时,可能会发生服务端点冲突并造成部署失败。发生服务器端点冲突时将显示以下消息:
Deploy service assembly failed. (partial success)
MESSAGE: (SOAPBC_DEPLOY_2) Failed to deploy: java.lang.Exception:
An activated endpoint already has the same SOAP Address location:
http://localhost:18181/SynchronousSample
C:\<...>\SynchronousSample1Application\nbproject\build-impl.xml:209:
Service assembly deployment failed.
BUILD FAILED (total time: 31 seconds)
通常,这可能是由于以下原因所造成的:您尝试部署的流程几乎相同,只是这些流程被打包在不同的复合应用程序项目中。解决此问题的方法是在部署不同复合应用程序项目时使用不同的端点。
说明: 尽管所部署的是完全不同的复合应用程序和完全不同的 BPEL 流程,但在默认情况下,会在其 SynchronousSample.wsdl 文件中定义相同的端点地址。它们都将包含以下端点地址:
<service name="service1">
<port name="port1" binding="tns:binding1">
<documentation/>
<soap:address location="http://localhost:18181/SynchronousSample"/>
</port>
</service>
如果尝试部署两个具有相同服务端点的复合应用程序(比如说 SynchronousSampleApplication 和 SynchronousSample1Application ),则第二个复合应用程序的部署过程会由于发生端点冲突而失败。
当您希望对其中的一个或两个流程进行修改并同时部署它们时,就需要部署复合应用程序的多个版本。您这样做的目的可能是希望并排比较它们的行为。您可以这样做,但必须为其设置不同的端点地址。这意味着,应编辑流程 wsdl 文件并调整 "soap:address location" 属性以使其不会发生冲突。您可以调整端口号或服务名称。例如,以下任何一项调整都会使其与原始属性完全不同:
<soap:address location="http://localhost:18182/SynchronousSample"/>
或者
<soap:address location="http://localhost:18181/SynchronousSampleNew"/>
服务端点与测试用例之间的关系
当您调用测试操作时,复合应用程序中的每个测试用例都将尝试向目标流程发送输入消息。每个测试用例都包含一个名为 "destination" 的属性,以了解将消息发送到的位置。可以在“文件”窗口中看到此文件。要打开“属性”窗口,右键单击测试用例节点并从弹出菜单中选择“属性” 。
destination=http://localhost:18181/SynchronousSample
"destination" 属性的值是在创建测试用例时设置的。因此,如果以后更改了服务端点,则需要手动为以前生成的所有测试用例调整 "destination" 属性。当然,新生成的测试用例将会正常工作。
端口
GlassFish V2 应用服务器 HTTP 端口
默认情况下,安装程序会尝试将应用服务器的 HTTP 端口配置为 8080。某些示例流程使用的就是值 8080。如果由于某种原因,应用服务器的 HTTP 端口不是 8080,则必须对示例进行调整。
尤其值得说明的是,需要对旅行预订服务示例进行一些调整。
例如,假定应用服务器正在 HTTP 端口 8090 上(而不是在默认 8080 上)进行侦听。在这种情况下,您必须执行以下操作:
调整预订合作伙伴服务 WSDL 文件
在 TravelReservationService BPEL 模块中,将 AirlineReservationService.wsdl 中的 soap 地址值由 <soap:address location="http://localhost:8080/webservice/AirlineReservationService"/> 更改为 <soap:address location="http://localhost:8090/webservice/AirlineReservationService"/>
类似地,更新 VehicleReservationService.wsdl 和 HotelReservationService.wsdl 中的 soap 地址值。
注意: 要了解应用服务器正在侦听的 HTTP 端口,请打开“服务”窗口,右键单击 "GlassFish V2 应用服务器" 节点,然后选择“查看管理控制台”。这将在浏览器中打开 GlassFish V2 应用服务器管理控制台。键入用户名和口令(默认值为 admin/adminadmin ),然后登录。在左窗格中单击 "Application Server",然后在右窗格中选择“常规”选项卡。所需的 HTTP 端口值是“HTTP 端口: ”行中的第一个值。 或者,请在应用服务器日志中找到以下行:
WEB0712: Starting Sun-Java-System/Application-Server HTTP/1.1 on 8080
WEB0712: Starting Sun-Java-System/Application-Server HTTP/1.1 on 8181
WEB0712: Starting Sun-Java-System/Application-Server HTTP/1.1 on 4848
所需的值位于第一行中。
旅行预订服务端点冲突
有关此问题的常规描述,请参见上面的 服务端点冲突 部分。但对于旅行预订服务示例,您还必须执行一些额外的步骤:
如果端口 18181 不可用,并且需要在另一个端口(如端口 19191)上运行 TRS,请按照下面的一组步骤进行操作:
更改 URL
打开 TravelReservationService.wsdl 。
在 service 标记中,将 soap:address location="http://localhost:18181/TravelReservation/buildItinerary"/ 更改为 soap:address location="http://localhost:19191/TravelReservation/buildItinerary"/
类似地,更新 airlineReserved、hotelReserved 和 vehicleReserved 的 URL。
调整合作伙伴 EJB 项目 ReservationPartnerServices
请执行以下步骤:
在 IDE 中,打开 ReservationPartnerServices 项目。 (IDE 在您创建 TravelReservationService 项目的位置创建了 ReservationPartnerServices 项目)。
在“项目”窗口中,依次展开 "ReservationPartnerServices" 项目节点和“配置文件”节点,然后双击 "ejb-jar.xml" 节点以在 ejb-jar.xml 可视编辑器中打开该文件。
在编辑器中的 "Enterprise Bean" 下面,单击 "ReservationCallBackProviderMDB" 以展开该条目。展开“Bean 环境”,然后展开“环境条目”。
在“环境条目”下面,选择每个条目,然后单击“编辑”以更改“条目值”字段中的 18181 端口号。 例如,对于 AirlineCallbackURL ,将 http://localhost:18181/TravelReservation/airlineReserved 更改为 http://localhost:19191/TravelReservation/airlineReserved
更新“目标”属性
在 TravelReservationServiceApplication 复合项目展开“测试”节点。对于它下面的每个测试用例节点:
右键单击测试用例节点,然后选择“属性”。
在“属性”窗口中,更新“目标”属性的值。示例: 将 http://localhost:18181/TravelReservation/buildItinerary 更改为 http://localhost:19191/TravelReservation/buildItinerary
测试运行
在执行测试用例时:
如果 Output.xml 文件是空的(创建新的测试用例后,该文件是空的),系统会询问您是否应使用第一次测试运行的响应来填充该 Output.xml 。第一次测试运行的输出将指示测试运行失败。
如果 Output.xml 文件不是空的,则会将获取的结果与该文件的内容进行比较;如果它们匹配,则将测试执行标记为通过。
测试运行失败
如果测试运行失败,您可以执行以下一项或两项操作:
在测试运行失败后检查响应消息。您可以在“项目”窗口中的测试用例节点下面找到响应消息。响应消息包含时间戳。 您可以验证该响应是否与预期响应(即 Output.xml )相匹配,这可能有助于您了解出现的问题。
在测试运行失败后检查服务器日志文件。 要执行此操作,请转到 IDE 的“运行环境”选项卡。右键单击 "GlassFish V2 应用服务器" 节点,然后选择“查看服务器日志”操作。 这将显示服务器日志的内容,其中可能包含有关为何测试运行失败的信息。
一种特定的测试运行失败情况与使用 Input.xml 中嵌入的基于内容的关联进行测试有关(例如,旅行预订服务测试用例中的 Input.xml 文件将 <UniqueID>...</UniqueID> 作为关联基础)。在这种情况下,如果正在运行由测试用例启动的一个流程实例,同时又要运行相同的测试用例,则不会启动第二个流程实例,因此测试将失败。GlassFish V2 应用服务器日志中将显示以下消息:
Exception occurred while executing a business process instance.
com.sun.jbi.engine.bpel.core.bpel.exception.CorrelationAlreadyExists: An instance is associated with the correlation
<...>
在使用服务器时禁用防火墙
要在应用服务器上成功部署、运行、调试或测试应用程序,或者在 BPEL 服务器上成功部署、运行、调试或测试业务流程,您必须禁用任何防火墙。
验证系统不检测所需的关联集使用实例
BPEL 服务引擎要求在使用关联集时严格遵循相应的规范。目前,验证系统不检测违反以下要求的情况:
活动消息: 如果在不包含 createInstance="yes" 属性的 Pick 活动中使用活动消息,则活动消息元素必须具有有效的 <correlations> 子元素。
接收: 如果接收元素不包含 createInstance="yes" 属性,则该元素必须具有有效的 <correlations> 子元素。
活动事件: 活动事件元素必须具有有效的 <correlations> 子元素。
有关 SOA 包中的其他已知问题,请参阅 NetBeans IDE 6.0 发行说明 。
回到顶部