使用 Java UI 启动 BPEL 业务流程

本教程将讲述如何使用 JavaServer Page (JSP) 基于 Web 的用户界面 (UI) 启动一个 BPEL 业务流程。

大约 1 个小时

主题

本教程包括下列主题:

创建 JavaServer Page 用户界面

使用 Java API 启动 MyLoanFlow BPEL

测试启动 MyLoanFlow 的 Java UI

将光标置于此图标上可以加载和查看本教程的所有屏幕截图。(警告:因为此操作会同时加载所有屏幕截图,所以根据 Internet 连接的不同,响应时间可能会比较慢。)

注意:此外,还可以在下列步骤中将光标放在每个单独的图标上,从而仅加载和查看与该步骤相关的屏幕截图。

概述

在本教程中,您将创建一个名为 invokeMyLoanFlow.jsp 的文件,其中包含要构成用户界面的 HTML 和 JSP 标记。该用户界面则提交贷款申请数据并启动 MyLoanFlow BPEL 流程。 本教程提供了构建 JSP 逻辑所需的步骤。

您的 JSP 应用程序与某个 JSP 应用程序的其他文件一起部署到 Oracle BPEL Process Manager 安装的 D:\orabpel\samples\tutorials\102.InvokingProcesses 目录树中。 该应用程序树为该 Web 应用程序提供了定位 JSP 文件引用的 Java API 代码所需的相应配置文件。

该 JSP 应用程序启动 MyLoanFlow BPEL 实例之后,您可以使用 Oracle BPEL Console 的 Visual Flow 视图查看该 BPEL 流程。 您将使用 StarLoanUI 完成 StarLoan 服务的贷款意向的手动处理。

返回主题列表

用于启动 MyLoanFlow BPEL 流程的 JSP 应用程序提供了一个 HTML 表单用户界面来提交贷款申请:

您在 HTML 表单域中输入数据,然后单击 Send Application 提交数据并启动 MyLoanFlow BPEL 流程来管理贷款申请。 该同一 JSP 页面还用于接收 HTML 表单域和构建贷款申请 XML 文档。 贷款申请文档用作 MyLoanFlow BPEL 流程的输入。该流程则通过使用启动该 BPEL 流程所需的 Java API 调用启动。

该 JSP 应用程序逻辑以下列流图表示:

调用 MyLoanFlow BPEL 流程之后,您使用 Oracle BPEL Console 监视该流程,并使用 StarLoanUI 接受贷款申请。

返回主题列表

前提条件

开始本教程之前,您应该:

1.

按照名为“安装 Oracle BPEL Designer 和 Oracle BPEL Process Manager”的 OBE 教程讲述的步骤,安装 Oracle BPEL Designer 和 Oracle BPEL Process Manager 服务器。

2.

启动 Oracle BPEL PM 服务器。

.

3.

完成名为“使用 BPEL 调用异步业务服务”的 OBE 教程。

注意:如果您尚未完成“使用 BPEL 调用异步业务服务”教程,则执行下列任务:

下载教程 solution 项目。

将该解决方案文件解压缩到 :\eclipse\workspace 目录中。
注意:该操作可能会覆盖 :\eclipse\workspace\MyLoanFlow 目录中的文件。
在 Oracle BPEL Designer 中打开 MyLoanFlow 项目。
按照“使用 BPEL 调用同步业务服务”教程中的内容部署 CreditRatingService。 该服务可从 Oracle BPEL Process Manager 安装的 <驱动器>:\orabpel\samples\utils\CreditRatingService 目录中部署。
按照“使用 BPEL 调用异步业务服务”教程中的内容部署 UnitedLoan 和 StarLoan 贷款服务。 这两个服务可从 Oracle BPEL Process Manager 安装的 <驱动器>:\orabpel\samples\utils\AsyncLoanService 目录中部署。

返回主题列表

创建 JavaServer Page 用户界面

要构建一个包含可提交贷款申请的 HTML 表单的 JSP 文件,执行下列步骤:

1.

要在 D:\orabpel\samples\tutorials\102.InvokingProcesses\jsp 目录中创建一个名为 invokeMyLoanFlow.jsp 的文本文件,使用您喜欢的文本编辑器,启动命令窗口,然后输入下列内容:

cd D:\orabpel\samples\tutorials\102.InvokingProcesses\jsp
notepad invokeMyLoanFlow.jsp

将光标放在该图标上可以查看该图像

注意:本教程使用 Notepad 作为文本编辑器,并假定 Oracle BPEL Process Manager 文件安装在 D: 驱动器中。

2.

要创建上面流程图表示的 JSP 应用程序的基本结构,请在文本编辑器中输入下列 JSP 声明、HTML 标记和 JSP scriptlet:

<%@page import="com.oracle.bpel.client.Locator" %>
<%@page import="com.oracle.bpel.client.NormalizedMessage" %>
<%@page import="com.oracle.bpel.client.dispatch.IDeliveryService" %>


   Invoke MyLoanFLow


                              

<%
  String ssn = request.getParameter("SSN");
if (ssn == null)
  {
%>
    
<%
  }
else
  {
    // 1. Get form fields
    // 2. Create loan application XML document
    // 3. Initiate the BPEL process here
  }
%>

将光标放在该图标上可以查看该图像

注意: JSP 应用程序代码骨架:

在前三行中包含 JSP page 指令,以成功编译和执行将在 else 语句块中添加以调用 MyLoanFlow BPEL 流程的 Java API 调用。

SSN 表单参数值赋予一个名为 ssn 的 Java String 变量。

使用 if 语句测试该 ssn 变量是否等于 null 引用,即未提交贷款申请数据。

为要添加到 if 语句代码块中的 HTML 表单标记提供一个 HTML 注释占位符。

提供一个 else 代码块来:

  1. 获取表单数据值
  2. 创建贷款申请 XML 文档
  3. 启动 MyLoanFlow BPEL 流程,将贷款申请 XML 文档用作输入。

3.

要显示 HTML 表单界面,将下列 HTML 标记(粗体)添加到 if 语句块中,紧挨在 HTML 注释“”的后面:

 
 

Invoke MyLoanFlow BPEL Application

Loan Application Form

SSN:
Email:
Customer Name:
Loan Amount:
Car Model:
Car Year:

将光标放在该图标上可以查看该图像

注意:

标记未指定任何 action 属性。 因此,当提交表单数据时,默认操作会使表单数据发送到生成该表单的同一个 JSP 应用程序页面中。 用于处理所提交数据的 Java 代码将在后续步骤中添加到 else 代码块中。

返回主题列表

使用 Java API 启动 MyLoanFlow BPEL

要创建贷款申请 XML 文档并使用 Oracle BPEL Java API 调用启动 MyLoanFlow 应用程序,执行下列步骤:

1.

else 块中,紧邻 invokeMyLoanFlow.jsp 的 Java 注释“// 1. Get form fields”下方,添加下面获取 HTML 表单参数值的 Java 代码(粗体):

<%
  }
else
{
// 1. Get form fields
String email = request.getParameter("email");
String name = request.getParameter("name");
String amount = request.getParameter("amount");
String model = request.getParameter("model");
String year = request.getParameter("year");
// 2. Create loan application XML document
// 3. Initiate the BPEL process here } %>

将光标放在该图标上可以查看该图像

注意:SSN 域值已在 if 语句前获得。

2.

要在名为 xmlString 变量中构建贷款申请 XML 文档,在 Java 注释“// 2. Create loan application XML document”后面添加下列 Hava 代码(粗体):

<%
}
else
{ // 1. Get form fields
String email = request.getParameter("email");
String name = request.getParameter("name");
String amount = request.getParameter("amount");
String model = request.getParameter("model");
String year = request.getParameter("year"); // 2. Create loan application XML document
String xml = ""
+ "" + ssn + ""
+ "" + email + ""
+ "" + name + ""
+ "" + amount + " "
+ "" + model + " "
+ "" + year + " "
+ " "
+ "
";
// 3. Initiate the BPEL process here } %>

将光标放在该图标上可以查看该图像

注意:XML 文档是使用从 HTML 表单参数中获取的值构建的。

3.

要启动 MyLoanFlow BPEL 流程,请在 Java 注释
// 3. Initiate the BPEL process here”后面添加下列 Hava 代码(粗体):

<%
}
else
{ // 1. Get form fields
String email = request.getParameter("email");
String name = request.getParameter("name");
String amount = request.getParameter("amount");
String model = request.getParameter("model");
String year = request.getParameter("year"); // 2. Create loan application XML document
String xml = ""
+ "" + ssn + ""
+ "" + email + ""
+ "" + name + ""
+ "" + amount + " "
+ "" + model + " "
+ "" + year + " "
+ " "
+ "
"; // 3. Initiate the BPEL process here // Connect to Oracle BPEL server Locator locator = new Locator("default","bpel");
IDeliveryService deliveryService = (IDeliveryService)
locator.lookupService(IDeliveryService.SERVICE_NAME );
// Construct a normalized message and send to Oracle BPEL Process Manager
NormalizedMessage nm = new NormalizedMessage();
nm.addPart("payload", xml);
// Initiate the BPEL process
deliveryService.post("MyLoanFlow", "initiate", nm);
} %>

将光标放在该图标上可以查看该图像

注意: Locator 类用于连接指定域为 default 和口令为 bpel 的 BPEL 服务器(与 BPEL Console Web 页面中使用的域和口令相同)。 使用 locator 对象的 lookupService() 方法创建 IDeliveryService 实例。 在最后一个语句中,IDeliveryServicepost() 方法启动 MyLoanFlow BPEL 流程。 post() 方法调用的最后一个参数是一个 NormalizedMessage 对象,其中在其有效载荷部分包裹了该 XML 文档,从而将该贷款文档用作已启动 BPEL 流程的输入。

4.

else 块的最后(结束花括号“}”之前),添加下列 HTML 和 JSP 代码(粗体)来提供反馈,以表明 MyLoanFlow BPEL 流程已经使用提交的 SSN 值启动:

<%
}
else
{ // 1. Get form fields
String email = request.getParameter("email");
String name = request.getParameter("name");
String amount = request.getParameter("amount");
String model = request.getParameter("model");
String year = request.getParameter("year"); // 2. Create loan application XML document
String xml = ""
+ "" + ssn + ""
+ "" + email + ""
+ "" + name + ""
+ "" + amount + " "
+ "" + model + " "
+ "" + year + " "
+ " "
+ "
"; // 3. Initiate the BPEL process here // Connect to Oracle BPEL server Locator locator = new Locator("default","bpel");
IDeliveryService deliveryService = (IDeliveryService)
locator.lookupService(IDeliveryService.SERVICE_NAME );
// Construct a normalized message and send to Oracle BPEL Process Manager
NormalizedMessage nm = new NormalizedMessage();
nm.addPart("payload", xml);
// Initiate the BPEL process
deliveryService.post("MyLoanFlow", "initiate", nm); %>

BPEL Process MyLoanFlow initiated
with a loan application containing SSN=<%= ssn %>


Please refer to the
<a href="/BPELConsole/displayInstance.jsp">BPEL Console</a>
to see the status of the initiated MyLoanFlow BPEL Process.


<%
} %>

将光标放在该图标上可以查看该图像

注意:添加到反馈代码中的 BPEL Console 超文本连接简化了对于 Web 界面的访问,以监视该 JSP 应用程序所启动 BPEL 流程。

5. 保存 invokeMyLoanFlow.jsp 文件的内容,关闭编辑器。

返回主题

测试启动 MyLoanFlow 的 Java UI

要测试接受贷款申请并启动 MyLoanFlow 来处理该申请的 JSP 界面,请执行下列步骤:

1.

要将该 JSP 用户界面部署到 Oracle BPEL Process Manager 中,请在命令窗口中输入下列命令:

cd <驱动器>:\orabpel\samples\tutorials\102.InvokingProcesses
obant

将光标放在该图标上可以查看该图像

2.

要访问该 JSP 应用程序,打开一个新的浏览器窗口,然后输入下列 URL:

http://localhost:9700/InvokingProcessesUI/invokeMyLoanFlow.jsp

将光标放在该图标上可以查看该图像

3.

要启动 MyLoanFlow BPEL 流程,在 Customer Name 域中输入姓名 Jane Doe(或者您自己的姓名),然后单击 Send Application

注意:此时显示一个确认页面,指出该 BPEL 流程已经使用 HTML 表单中提供的 SSN 启动。

4.

要查看已经启动的 MyLoanFlow BPEL 流程实例,单击确认页面中的 BPEL Console 链接:

5.

使用口令 bpel 登录 BPEL Console,然后单击 Login

6.

要查看 MyLoanFlow 实例的可视化流程图,单击 In-Flight BPEL Process Instances 1 - 3 标题下面,instance 列中的 nnn: Instance #nnn of MyLoanFlow 链接:

7.

要验证您看到的 BPEL 流程实例是否正确,请单击名为 client (initiate) 的第一个 receive 活动:

注意:此时打开 Activity Audit Trail 窗口,显示该 BPEL 流程收到的输入:

注意:<input> 元素包含一个 元素,其中包含从 invokeMyLoanFlow.jsp 应用程序提交的详细信息。

关闭 Activity Audit Trail 窗口。

8.

滚动至活动的可视流程的最后:

注意:starLoan (onResult) 活动正在等待完成。

单击 starLoan (onResult) 活动,确认它正在等待完成:

关闭该活动的 Activity Audit Trail

9.

要完成该 StarLoan 任务,打开一个新的浏览器窗口,然后输入下列 URL:

http://localhost:9700/StarLoanUI

单击 Assign APR Task 链接。

10.

Assign APR Task Web 页面中,确认贷款申请详细信息与 invokeMyLoanFlow.jsp 应用程序发送的信息相对应。 单击 Approve 批准该贷款申请:

注意:会显示下面的确认页面以表明已完成了 Assign APR Task:

关闭浏览器窗口。

11.

在 BPEL Console 显示 BPEL 流程可视流的浏览器窗口中,单击 Refresh View 链接:

12.

要确认 StarLoan 异步过程已经完成,滚动至 starLoan (initiate) 活动即可注意到它已经完成。 要查看在该流程结尾处选择的贷款意向,滚动至该可视流的最后:

注意:选择了 UnitedLoan 贷款意向。

13.

要查看 UnitedLoan 服务返回的贷款意向,单击 client (onResult) 活动:

注意:Activity Audit Trail 窗口显示 United Loan 生成的贷款意向的 XML 数据:

关闭 Activity Audit Trail 窗口,注销 BPEL Console 并关闭浏览器窗口。

14.

要关闭 Oracle BPEL Process Manager,在命令窗口中输入下列命令:

cd <驱动器>:\orabpel\bin
shutdownOraBPEL.bat

返回主题列表

在本课程中,您学习了如何执行下列任务:

创建一个包含一个 HTML 表单界面的 JSP 应用程序,该界面将提供的数据提交到 BPEL 流程。

编写连接 BPEL Process Manager 的 Java 代码,并使用从 HTML 表单接受的数据启动 BPEL 流程。

在 Oracle BPEL Console 中使用可视流程图查看 BPEL 流程的活动审计跟踪。

返回主题列表

有关本 OBE 教程的问题,请在 OBE 论坛上提问。
要了解 Oracle BPEL 技术的详细信息,请参阅 OTN 网站上的其他 OBE。

返回主题列表

将鼠标置于该图标上可以隐藏所有的屏幕截图。