BPEL 设计器开发人员指南
由
Anastasia Koval
维护
最后更新:2008 年 4 月 本文适用于 NetBeans IDE 6.1 发行版
目录
本发行版本未提供 BPEL 2.0 元素
此 BPEL 设计器发行版支持的元素具有一些特定的限制。有关所支持的 BPEL 2.0 语言结构和相关限制的详细信息,请参阅 BPEL 服务引擎用户指南 。
使用不同于 BPEL 2.0 规范的 BPEL 模式
此 BPEL 设计器发行版支持 BPEL 2.0 最终规范,不支持先前的规范。这意味着当打开与先前版本规范兼容的 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"/>
服务端点和测试用例之间的关系
当调用 Test 操作时,复合应用程序中的每个测试用例都将尝试向目标流程发送输入消息。为了了解消息将要发送到的位置,每个测试用例都具有一个 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 ),登录。在左边窗格中单击 “应用服务器”,在右窗格中选择“常规”选项。需要的 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/SynchronousSampleNew"/>
更改为
<soap:address location="http://localhost:19191/SynchronousSampleNew"/> 。
类似地,修改 airlineReserved 、hotelReserved 和 vehicleReserved 的 URL。
调整合作伙伴 EJB 项目 ReservationPartnerServices
请执行以下步骤:
在 IDE 中,打开 ReservationPartnerServices 项目。 (IDE 在创建 TravelReservationService 项目的位置创建了 ReservationPartnerServices 项目)。
在“项目”窗口中,依次展开 "ReservationPartnerServices" 项目节点和“配置文件”节点,然后双击 ejb-jar.xml 节点,将在 ejb-jar.xml 可视编辑器中打开该文件。
在“设计”视图中的“企业 Bean”下,单击“ReservationCallBackProviderMDB"”,将展开该条目。依次展开“Bean 环境”和“环境条目”。
在“环境条目”下,选择每个条目,然后单击“编辑”,更改“条目值”字段中的 18181 端口号。例如,对于 AirlineCallbackURL ,将
http://localhost:18181/service
更改为
http://localhost:19191/service 。
更新“目标”属性
在 TravelReservationServiceApplication 复合项目展开 Test 节点。对于它下面的每一个测试用例节点,请执行以下操作:
右键单击测试用例节点,选择“属性”。
在“属性”窗口中,更新 Destination 属性的值。示例:
将 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 发行说明 。
返回顶部