创建贷款处理复合应用程序
最新更新日期:2006 年 11 月 14 日
撰稿人:Sherry Barkodar,修订人:Alyona Stashkova
本教程对简单贷款申请复合应用程序进行了概述,并说明了如何使用 NetBeans Enterprise Pack 5.5 软件包以及所有必需的运行环境来部署、执行和测试复合应用程序。
贷款申请复合应用程序满足以下业务用例:
用户通过填写贷款申请表来申请贷款,其中包括个人标识信息、申请的贷款金额以及信用历史记录等信息。
收到贷款申请时,将通过现有数据库来验证用户提供的个人信息,并基于该信息和申请的金额批准或拒绝申请。
在履行了特定的手续后,将生成一个报告(采用审批函的形式)并将其发送给用户以确认贷款审批。
如果由于某种原因拒绝了贷款申请,则会生成并显示一个报告,其中说明了拒绝原因。
单击以放大
先决条件
要了解本教程,您需要具备 Java 语言及其平台以及 NetBeans IDE 的一些基本知识或编程经验。
系统要求
本教程假定您的系统满足 NetBeans Enterprise Pack 5.5 发行说明 的“系统要求”主题中指定的要求。
本教程所需的软件
在开始之前,您必须在计算机中安装以下软件:
包含 NetBeans Enterprise Pack 5.5 的 NetBeans IDE 5.5(下载 )
要完成本教程中的部署步骤,必须安装 Sun Java System Application Server Platform Edition 9 Update 1。该应用服务器与 NetBeans Enterprise Pack 5.5 下载包捆绑在一起。
目录
返回页首
配置教程环境
在部署应用程序之前,必须正确配置 Sun Java System Application Server 和 JBI 运行环境,并且使它们处于运行状态。
配置教程环境:
单击“运行环境”标签以打开“运行环境”窗口。
在“运行环境”窗口中,展开“服务器”节点。
如果“服务器”节点已包含 "Sun Java System Application Server 9" 节点,请转至步骤 5。
如果“服务器”节点不包含 "Sun Java System Application Server 9" 节点,请执行以下操作来添加应用服务器:
右键单击“服务器”节点,然后从弹出式菜单中选择“添加服务器”。 将打开“添加服务器实例”对话框。
在“选择服务器”页中,从“服务器”下拉列表中选择 "Sun Java System Application Server"。
(可选)在“名称”字段中,接受缺省值,或键入要用来在 IDE 中标识服务器的名称。
单击“下一步”。 将打开“平台文件夹位置”页。
在“平台位置”字段中,使用“浏览”按钮导航并选择应用服务器的安装位置。 如果在安装过程中接受了缺省值,则该位置应为 C:\Sun\Appserver 。
选择“注册本地缺省域”选项。
单击“下一步”。
提供域管理员的用户名和口令。 如果在安装过程中接受了缺省值,则用户名应为 admin,口令应为 adminadmin。
单击“完成”。
在“运行环境”窗口中,右键单击 "Sun Java System Application Server 9" 节点,然后选择“启动”。 如果“启动”选项不可用,则说明服务器已在运行,您可以跳过下一步。
一直等到“输出”窗口中显示以下消息: “应用服务器启动完成。” 当服务器处于运行状态时,IDE 将在 "Sun Java System Application Server 9" 节点的旁边显示一个绿色箭头标记。
单击以放大
返回页首
创建 BPEL 项目
在本部分中,您将创建一个名为 LoanRequestor 的 BPEL 模块项目。
创建 LoanRequestor 项目:
从 IDE 的主菜单中,选择“文件”>“新建项目”。 将打开“新建项目”向导。
在“类别”列表中,选择“面向服务的体系结构”节点。
在“项目”列表中,选择“BPEL 模块”节点。
单击“下一步”。
在“项目名称”字段中,键入 LoanRequestor 。
(可选)在“项目位置”字段中,使用“浏览”按钮导航并选择 IDE 用于存储项目文件的其他文件夹。
单击“完成”。 现在,“项目”窗口会包含一个名为 LoanRequestor 的 BPEL 模块项目的项目节点。
返回页首
创建 XML 架构
在本部分中,您将在 BPEL 模块项目中添加一个新的 XML 架构文件,然后在架构中添加 XML 架构组件。
创建 LoanRequestor.xsd :
在“项目”窗口中,展开 "LoanRequestor" 项目节点,右键单击“流程文件”节点,然后选择“新建”>“文件/文件夹”。 将打开“新建文件”向导。
在“新建文件”向导中,执行以下操作:
在“选择文件类型”页的“类别”列表中选择 "XML" 节点,在“文件类型”列表中选择“XML 架构”节点,然后单击“下一步”。
在“文件名”字段中,键入 LoanRequestor 。
单击“完成”。
在“项目”窗口中,“流程文件”节点现在会包含一个标记为 LoanRequestor.xsd 的子节点。同时,源代码编辑器中包含了 XML 架构文件 LoanRequestor.xsd 的标签,并且“架构”视图处于打开状态。
在“架构”视图中,单击“设计”按钮以打开 XML 架构编辑器的“设计”视图。
在 XML 架构中添加复杂类型:
在“设计”视图的组件面板中,展开“XML 架构组件”类别并选择“复杂类型”图标。 如果未显示“组件面板”窗口,请从主菜单中选择“窗口”>“组件面板”。
将所选的组件拖到架构设计区域中,紧靠在“复杂类型”节点的下面。 IDE 将添加一个复杂类型节点并选定该复杂类型的名称 (newComplexType ),准备让您进行更改。
在新节点中键入 processApplication ,然后按 Enter 键。 现在,设计区域中将显示名为 processApplication 的新复杂类型。
重复执行步骤 1 至 3,并将另一个新复杂类型命名为 processApplicationResponse 。
在 processApplication 和 processApplicationResponse 中添加本地元素:
在组件面板的“XML 组件”类别中,选择“元素”图标,然后将所选的组件拖到架构设计区域的 "processApplication" 节点上。 IDE 将添加一个标记为 newElement 的元素节点。
如果未显示“属性”窗口,请选择“窗口”>“属性”。
在架构设计区域中,选择 "newElement" 节点。
在属性窗口中,选择“名称”属性的值字段以使其可以编辑,然后键入 socialSecurityNumber 。
在属性窗口中,将“空值”属性的值字段设置为 True 。
在属性窗口的“定义”属性中,单击省略号按钮。 将打开定义对话框。
在列表中展开“内置类型”节点,然后选择 "string" 节点。
单击“确定”。
重复执行步骤 1 至 8 以添加以下元素:
名称
空值
定义
applicantName
True
string
applicantAddress
True
string
applicantEmailAddress
True
string
applicantAge
True
int
applicantGender
True
string
annualSalary
True
double
amountRequested
True
double
在组件面板的“XML 组件”类别中,选择“元素”图标,然后将所选的组件拖到架构设计区域的 "processApplicationResponse" 节点上。 IDE 将添加一个标记为 newElement 的元素节点。
在架构设计区域中,选择 "newElement" 节点。
在属性窗口中,选择“名称”属性的值字段以使其可以编辑,然后键入 return 。
在属性窗口的“定义”属性中,单击省略号按钮。 将打开定义对话框。
在列表中展开“内置类型”节点,然后选择 "string" 节点。
单击“确定”。
添加全局元素:
在组件面板的“XML 组件”类别中,选择“元素”图标,然后将所选的组件拖到设计区域中,紧靠在“元素”节点的下面。 IDE 将在架构设计区域的“元素”节点下面添加一个 newElement 组件。
在“设计”视图的架构设计区域中,选择 "newElement" 节点。
在属性窗口中,选择“名称”属性的值字段以使其可以编辑,然后键入 processApplication 。
在属性窗口的“定义”属性中,单击省略号按钮。 将打开“元素定义 - 定义”对话框。
在类型列表中,展开“复杂类型”节点,然后选择 "processApplication" 复杂类型节点。
单击“确定”。
重复执行步骤 1 至 6 以添加以下元素:
名称
复杂类型
processApplicationResponse
processApplicationResponse
要保存您所做的更改,请在“项目”窗口中选择 "LoanRequestor" 项目节点,然后从 IDE 的主菜单中选择“文件”>“全部保存”。
返回页首
创建 WSDL 文档
在本部分中,您将在 BPEL 模块项目中添加 WSDL 文件,然后配置 WSDL 文档的组件。
创建 LoanRequestor.wsdl :
在“项目”窗口中,展开 "LoanRequestor" 项目节点,右键单击“流程文件”节点,然后选择“新建”>“WSDL 文档”。 将打开“新建 WSDL 文档”向导。
在“名称和位置”页中,执行以下操作:
在“文件名”字段中,键入 LoanRequestor 。
选中“导入 XML 架构文件”复选框。
在“XML 架构”字段中,单击“浏览”按钮。 将打开“选择架构”对话框。此对话框会显示项目中的 XML 架构。
选择 "src/LoanRequestor.xsd",然后单击“确定”。
单击“下一步”。
将打开“抽象配置”页。
在“抽象配置”页的“输入”区域中,执行以下操作:
在“消息部件名称”列中,双击缺省值以使该字段可以编辑。
键入 requestLoanMessage ,然后按 Enter 键。
在“元素或类型”列中,单击省略号按钮。 将打开“选择元素或类型”对话框。
依次展开 "LoanRequestor" 节点、"src/LoanRequestor.xsd" 节点以及“元素”节点。
在“元素”节点下面,选择 "processApplication" 节点,然后单击“确定”。
在“抽象配置”页的“输出”区域中,执行以下操作:
在“消息部件名称”列中,双击缺省值以使该字段可以编辑。
键入 responsePart ,然后按 Enter 键。
在“元素或类型”列中,单击省略号按钮。 将打开“选择元素或类型”对话框。
依次展开 "LoanRequestor" 节点、"src/LoanRequestor.xsd" 节点以及“元素”节点。
在“元素”节点下面,选择 "processApplicationResponse",然后单击“确定”。
单击“下一步”。 将打开“具体配置”页。 注意: 在执行下一步时,位于页面底部的错误消息将会消失。
在“绑定子类型”下面,选择“文档类型”选项。
单击“完成”。 在“项目”窗口中,“流程文件”节点现在会包含一个标记为 LoanRequestor.wsdl 的子节点。同时,源代码编辑器中包含了 WSDL 文件 LoanRequestor.wsdl 的标签,并且新的 "WSDL" 视图处于打开状态。
单击以放大
返回页首
合作伙伴服务
贷款申请通过其合作伙伴服务的公共接口来与这些服务进行通信。这些接口是在特定于合作伙伴的 WSDL 文件中定义的。 本教程的附录 中包含一个名为 LoanProcessor 的压缩 J2EE 项目,并且还提供了从头开始创建 EJB 的说明。LoanRequestor 项目包含合作伙伴服务的基本 EJB 实现。 在测试运行 LoanRequestorCompositeApp 之前,必须将合作伙伴 Web 服务部署到捆绑的 Sun Java Application Server 上。
此实现仅用作贷款服务流程的测试环境。
打开 LoanProcessor 项目:
在文件系统中,创建一个名为 LoanTut 的目录。
下载 loanejb.zip 文件,并将其解压缩到 LoanTut 目录中。
从 IDE 的主菜单中,选择“文件”>“打开项目”。 将打开“打开项目”向导。
导航至刚创建的 LoanTut 目录,选择 LoanProcessor 项目,然后单击“打开项目文件夹”。 将显示一个进度对话框,然后“项目”窗口中会出现该项目。
部署 LoanProcessor 项目:
右键单击 "LoanProcessor",然后选择“部署项目”。
一直等到“输出”窗口中显示“生成成功”消息。
要验证是否成功部署了 LoanProcessor 企业应用程序,请切换至“运行环境”窗口。
依次展开 "Sun Java System Application Server 9" 节点、“应用程序”节点以及“EJB 模块”节点。 应该添加了 "LoanProcessor" 节点。
返回页首
创建 BPEL 流程
创建 LoanRequestor.bpel :
在“项目”窗口中,展开 "LoanRequestor" 项目节点,右键单击“流程文件”节点,然后选择“新建”>“BPEL 流程”。 将打开“新建 BPEL 流程”向导。
在“文件名”字段中,键入 LoanRequestor 。
单击“完成”。 在“项目”窗口中,“流程文件”节点现在会包含一个标记为 LoanRequestor.bpel 的子节点。 同时,源代码编辑器中包含了 BPEL 流程 LoanRequestor.bpel 的标签,并且 BPEL 设计器的“设计”视图处于打开状态。
添加合作伙伴链接:
在“项目”窗口中,依次展开 "LoanRequestor" 项目节点、“流程文件”节点,然后选择 "LoanRequestor.wsdl" 节点。
将所选的文件 (LoanRequestor.wsdl ) 从“项目”窗口拖到“设计”视图中。 将打开“PartnerLink1[Partner Link] - 属性编辑器”。
在“名称”字段中,键入 BpelImplementation 。
接受缺省值,然后单击“确定”。
在“项目”窗口中,依次展开 "LoanProcessor" 项目节点、“Web 服务”节点,然后选择 "LoanProcessor" Web 服务节点。
将所选的节点("LoanProcessor" Web 服务节点)从“项目”窗口拖到“设计”视图中。 将打开“PartnerLink1[Partner Link] - 属性编辑器”。
在“名称”字段中,键入 EjbImplementation 。
接受缺省值,然后单击“确定”。
在“项目”窗口的“流程文件”下面,将创建 Partners 文件夹。
展开 "Partners" 节点,此文件夹会包含 "LoanProcessor" 节点,其中存在 "LoanProcessor.wsdl" 和 "LoanProcessorService_schema1.xsd" 文件。
添加接收活动:
在组件面板的“Web 服务”类别中,选择“接收”图标,然后将所选的活动拖到设计区域中的 Process Start 活动和空活动之间。 IDE 将向您提供可视线索提示,以显示可放置所选活动的位置。 此操作将在“设计”视图中放置一个名为 Receive1 的接收活动。
双击 "Receive1" 活动。 将打开“Receive1 [Receive] - 属性编辑器”。
将“名称”字段中的值更改为 ReceiveFromCustomer 。
从“合作伙伴链接”下拉列表中选择 "BpelImplementation"。 IDE 将填充“操作”字段。
通过执行以下操作,创建一个新的输入变量:
单击“输入变量”字段旁边的“创建”按钮。 将打开“新建输入变量”对话框。
将“名称”字段中的值更改为 requestLoanInput 。
单击“确定”。
单击“确定”以关闭“Receive1 [Receive] - 属性编辑器”。 现在会在“设计”视图中将该接收活动标记为 ReceiveFromCustomer 。
添加调用活动:
在组件面板的“Web 服务”类别中,选择“调用”图标,然后将所选的活动拖到设计区域中接收活动的后面。 IDE 将向您提供可视线索提示,以显示可放置所选活动的位置。 此操作将在“设计”视图中放置一个名为 Invoke1 的调用活动。
双击 "Invoke1" 活动。 将打开“Invoke1 [Invoke] - 属性编辑器”。
将“名称”字段中的值更改为 InvokeLoanProcessorEJB 。
从“合作伙伴链接”下拉列表中选择 "EjbImplementation"。 IDE 将填充“操作”字段。
通过执行以下操作,创建一个新的输入变量:
单击“输入变量”字段旁边的“创建”按钮。 将打开“新建输入变量”对话框。
将“名称”字段中的值更改为 processApplicationInput 。
单击“确定”。
通过执行以下操作,创建一个新的输出变量:
单击“输出变量”字段旁边的“创建”按钮。 将打开“新建输出变量”对话框。
将“名称”字段中的值更改为 processApplicationOutput 。
单击“确定”。
单击“确定”以关闭“Invoke1 [Invoke] - 属性编辑器”。 现在会在“设计”视图中将该调用活动标记为 InvokeLoanProcessorEJB 。
添加回复活动:
在组件面板的“Web 服务”类别中,选择“回复”图标,然后将所选的活动拖到设计区域中调用活动的后面。 IDE 将向您提供可视线索提示,以显示可放置所选活动的位置。 此操作将在“设计”视图中放置一个名为 Reply1 的回复活动。
双击 "Reply1" 活动。 将打开“Reply1 [Reply] - 属性编辑器”。
将“名称”字段中的值更改为 ReplyToCustomer 。
将“合作伙伴链接”设置为 "BpelImplementation"。
通过执行以下操作,创建一个新的输出变量:
确保选择了“正常响应”选项。
单击“输出变量”字段旁边的“创建”按钮。 将打开“新建输出变量”对话框。
将“名称”字段中的值更改为 requestLoanOutput 。
单击“确定”。
单击“确定”以关闭“Reply1 [Reply] - 属性编辑器”。 现在会在“设计”视图中将该回复活动标记为 ReplyToCustomer 。
添加第一个分配活动:
在设计区域中,选择空活动,单击鼠标右键,然后从弹出式菜单中选择“删除”。
在组件面板的“基本活动”类别中,选择“分配”图标,然后将所选的活动拖到设计区域中的接收活动和调用活动之间。 IDE 将向您提供可视线索提示,以显示可放置所选活动的位置。 此操作将在“设计”视图中放置一个名为 Assign1 的分配活动。
选择 "Assign1" 活动。
在“Assign1 [Assign] - 属性”窗口中,选择“名称”属性的值字段以使其可以编辑,键入 AssignReceiveToEJBInput ,然后单击“确定”。
如果未显示“BPEL 映射器”窗口,请从主菜单中选择“窗口”>“BPEL 映射器”。
在 BPEL 映射器的左窗格中,展开“变量”下面的 "requestLoanInput" 和 "requestLoanMessage" 节点。 在 "requestLoanMessage" 下面将显示 "socialSecurityNumber"、"applicantName"、"applicantAddress"、"applicantEmailAddress"、"applicantAge"、"applicantGender"、"annualSalary" 和 "amountRequested"。
在 BPEL 映射器的右窗格中,展开“变量”下面的 "processApplicationInput" 和 "Parameters" 节点。 在 "parameters" 下面将显示 "socialSecurityNumber"、"applicantName"、"applicantAddress"、"applicantEmailAddress"、"applicantAge"、"applicantGender"、"annualSalary" 和 "amountRequested"。
将 BPEL 映射器左窗格中的 "socialSecurityNumber" 拖到 BPEL 映射器右窗格中的 "socialSecurityNumber" 节点上。
对于以下变量,重复执行步骤 7: applicantName 、applicantAddress 、applicantEmailAddress 、applicantAge 、applicantGender 、annualSalary 和 amountRequested 。
要保存您所做的更改,请在“项目”窗口中选择 "LoanRequestor" 项目节点,然后从 IDE 的主菜单中选择“文件”>“全部保存”。
添加第二个分配活动:
在组件面板的“基本活动”类别中,选择“分配”图标,然后将所选的活动拖到设计区域中的调用活动和回复活动之间。 此操作将在“设计”视图中放置一个名为 Assign1 的分配活动。
选择 "Assign1" 活动。
在“Assign1 [Assign] - 属性”窗口中,选择“名称”属性的值字段以对其进行编辑,键入 AssignEJBOutputToReply ,然后单击“确定”。
如果未显示“BPEL 映射器”窗口,请从主菜单中选择“窗口”>“BPEL 映射器”。
在 BPEL 映射器的左窗格中,展开“变量”下面的 "processApplicationOutput" 和 "parameters" 节点。 在 "parameters" 下面将显示 "return"。
在 BPEL 映射器的右窗格中,展开“变量”下面的 "requestLoanOutput" 和 "responsePart" 节点。 在 "responsePart" 下面将显示 "return"。
将 BPEL 映射器左窗格中的 "return" 拖到 BPEL 映射器右窗格中的 "return" 节点上。
要保存您所做的更改,请在“项目”窗口中选择 "LoanRequestor" 项目节点,然后从 IDE 的主菜单中选择“文件”>“全部保存”。
单击以放大
生成 LoanRequestor BPEL 项目:
在“项目”窗口中,右键单击 "LoanRequestor" 项目节点,然后选择“清理并生成项目”。
如果“输出”窗口中显示“生成成功”消息,则说明已成功生成了项目。
单击以放大
返回页首
创建和部署复合应用程序
在部署 BPEL 模块项目之前,您必须在部署项目中添加 JBI 模块。通过部署该项目,可使服务组装用于应用服务器中,从而可以运行其服务单元。
创建复合应用程序项目并添加 JBI 模块:
从 IDE 的主菜单中,选择“文件”>“新建项目”。 将打开“新建项目”向导。
在“类别”列表中,选择“面向服务的体系结构”节点。
在“项目”列表中,选择“复合应用程序”节点。
单击“下一步”。
在“项目名称”字段中,键入 LoanRequestorCompositeApp 。
单击“完成”。 现在,“项目”窗口会包含一个名为 LoanRequestorCompositeApp 的复合应用程序项目的项目节点。
在“项目”窗口中,右键单击 "LoanRequestorCompositeApp" 项目节点,然后从弹出式菜单中选择“添加 JBI 模块”。 将打开“选择项目”对话框。
选择本教程前面部分所创建的 LoanRequestor 项目,然后单击“添加项目 JAR 文件”。 将关闭“选择项目”对话框。
在“项目”窗口中,展开 "LoanRequestorCompositeApp" 项目节点,然后展开“JBI 模块”节点。 请注意,已添加了一个 "LoanRequestor.jar" 节点。
部署复合应用程序:
右键单击 "LoanRequestorCompositeApp" 项目节点,然后选择“部署项目”。 如果“输出”窗口中显示“生成成功”消息,则说明已成功部署了项目。
单击以放大
返回页首
测试复合应用程序
可通过以下方法来改进复合应用程序项目:添加测试用例,绑定到操作,提供输入,然后使用测试程序。
测试 LoanRequestorCompositeApp:
在“项目”窗口中,展开 "LoanRequestorCompositApp" 项目节点,右键单击“测试”节点,然后从弹出式菜单中选择“新建测试用例”。 将打开“新建测试用例”向导。
键入 successTest 作为测试用例名称,然后单击“下一步”。
在“选择 WSDL 文档”页中,展开“LoanRequestor - 流程文件”节点,选择 "LoanRequestor.wsdl",然后单击“下一步”。
在“选择要测试的操作”页中,选择 "LoanRequestorOperation",然后单击“完成”。 在“项目”窗口的“测试”下面,已添加了一个新的 "successTest" 节点。 此节点包含了以下两个子节点:“输入”和“输出”。 同时,源代码编辑器中包含了输入文件 Input.xml 的标签。
如果源代码编辑器不包含 Input.xml 的标签,请在“项目”窗口中双击“输入”节点以打开该文件。
在源代码编辑器的 Input.xml 文件标签中,执行以下操作:
找到以下行: <loan:socialSecurityNumber>?string?</loan:socialSecurityNumber> 。
将 ?string? 替换为 123-45-6789 。 该行应如下所示: <loan:socialSecurityNumber>123-45-6789</loan:socialSecurityNumber> 。
重复执行步骤 a 和 b 以替换以下行中的元素:
包含以下内容的行
要替换的内容
替换为
结果行
applicantName
?string?
Gopalan
<loan:applicantName>Gopalan</loan:applicantName>
applicantAddress
?string?
507 Alberta
<loan:applicantAddress>507 Alberta</loan:applicantAddress>
applicantEmailAddress
?string?
gopalan
@
sun.com
<loan:applicantEmailAddress>
gopalan
@
sun.com
</loan:applicantEmailAddress>
applicantAge
?3?
36
<loan:applicantAge>36</loan:applicantAge>
applicantGender
?string?
male
<loan:applicantGender>male</loan:applicantGender>
annualSalary
?1.051732E7?
100000
<loan:annualSalary>100000</loan:annualSalary>
amountRequested
?1.051732E7?
1000000
<loan:amountRequested>1000000</loan:amountRequested>
从 IDE 的主菜单中,选择“文件”>“全部保存”。
双击“输出”以查看其内容。Output.xml 最初是空的。因此,第一次测试运行将使用实际输出来填充 Output.xml 。后续测试运行会将实际输出与 Output.xml 内容进行比较。
在“项目”窗口中,右键单击 "successTest" 节点,然后从弹出式菜单中选择“运行”。注意: 第一次运行是一个特例,因为 Output.xml 为空,并且输出将写入到输出文件中。 请注意“JUnit 测试结果”窗口中出现的失败消息。 将打开“是否覆盖空的输出文件?”对话框。
单击“确定”。
在“项目”窗口中,右键单击 "successTest" 节点,然后从弹出式菜单中选择“运行”。 在第一次运行后,输出文件不再为空。将会保存该文件的内容,并且其内容不会被新结果所覆盖。
单击以放大
返回页首
创建 BPEL Web 服务客户端
客户通过 Web 服务客户端来提交所需的信息。
创建 LoanApplicationWebclient Web 服务客户端应用程序:
从 IDE 的主菜单中,选择“文件”>“新建项目”。 将打开“新建项目”向导。
在“类别”列表中,选择 "Web" 节点。
在“项目”列表中,选择“Web 应用程序”节点。
单击“下一步”。
在“名称和位置”页的“项目名称”字段中,键入 LoanApplicationWebclient 。
单击“完成”。 现在,“项目”窗口会包含一个名为 LoanApplicationWebclient 的 Web 服务客户端的项目节点。
在“项目”窗口中,右键单击 "LoanApplicationWebclient" 项目节点,然后选择“新建”>“文件/文件夹”。 将打开“新建文件”向导。
在“新建文件”向导中,执行以下操作:
在“选择文件类型”页的“类别”列表中,选择“Web 服务”节点。
在“文件类型”列表中,选择“Web 服务客户端”节点。
单击“下一步”。
在“WSDL 和客户端位置”页中,选择“本地文件”选项。
单击“浏览”按钮。
在“打开”对话框中,导航并选择 LoanRequestor.wsdl 文件。
单击“选择”。
在“包”字段中,键入 loanprocesswsclient 。
单击“完成”。
创建 loanclient.jsp 页:
在“项目”窗口中,右键单击 "LoanApplicationWebclient" 项目节点,然后选择“新建”>“文件/文件夹”。
在“新建文件”向导中,执行以下操作:
在“选择文件类型”页的“类别”列表中,选择 "Web" 节点。
在“选择文件类型”页的“文件类型”列表中,选择 "JSP" 节点。
单击“下一步”。
在“JSP 文件名”字段中,键入 loanclient 并接受缺省值。
单击“完成”。
在“项目”窗口中,展开 "LoanApplicationWebclient" 节点,然后展开“Web 页”节点。 请注意,已添加了一个 loanclient.jsp 节点,并且在源代码编辑器中打开了 loanclient.jsp 文件。
在源代码编辑器的 loanclient.jsp 文件标签中,单击鼠标右键以显示弹出式菜单,然后选择“Web 服务客户端资源”>“调用 Web 服务操作”。
在“选择要调用的操作”对话框中,展开 "LoanApplicationWebClient" 节点,然后展开 "LoanRequestor" 节点。
展开 "LoanRequestorService" 节点,然后展开 "LoanRequestorPort" 节点。
选择 "LoanRequestorOperation",然后单击“确定”。
单击以放大
修改 loanclient.jsp 文件:
在源代码编辑器的 loanclient.jsp 文件标签中,在 // TODO process result here 下面添加以下代码行:
requestLoanMessage.setSocialSecurityNumber(request.getParameter("ssn"));
requestLoanMessage.setApplicantName(request.getParameter("name"));
requestLoanMessage.setApplicantAddress(request.getParameter("address"));
requestLoanMessage.setApplicantEmailAddress(request.getParameter("email"));
requestLoanMessage.setApplicantAge(Integer.parseInt(request.getParameter("age")));
requestLoanMessage.setApplicantGender(request.getParameter("gender"));
requestLoanMessage.setAnnualSalary(Double.parseDouble(request.getParameter("salary")));
requestLoanMessage.setAmountRequested(Double.parseDouble(request.getParameter("loanamount")));
在源代码编辑器的 loanclient.jsp 文件标签中,执行以下操作:
找到以下行: out.println("Result = "+result);
将 "+result 替换为 "+result.getReturn() 该行应如下所示: out.println("Result = "+result.getReturn());
在 // TODO handle custom exceptions here 下面添加以下代码行: out.println("===>>>Exception : " + ex.toString());
在 // <%-- end web service invocation --%><hr/> 下面添加以下代码行: <form action="index.jsp"> <input type="submit" value="Back To Loan Application"/> </form>
要保存您所做的更改,请在“项目”窗口中选择 "loanclient.jsp" 节点,然后从 IDE 的主菜单中选择“文件”>“保存”。
单击以放大
修改 index.jsp 文件:
在“项目”窗口中,展开 "LoanApplicationWebclient" 项目节点,然后展开“Web 页”节点。
双击 index.jsp 节点。 将在源代码编辑器中打开 index.jsp 文件。
在 </body> 前面添加以下代码行:
<form action="loanclient.jsp">
<table>
<tr>
<td>SSN</td>
<td><input type="text" name="ssn" value="123456789"/></td>
<td></td>
</tr>
<tr>
<td>Name</td>
<td><input type="text" name="name" value="ORCHBank User"/></td>
<td></td>
</tr>
<tr>
<td>Address</td>
<td><input type="text" name="address" value="16 Network Circle, Menlo Park,CA" /></td>
<td></td>
</tr>
<tr>
<td>Email</td>
<td><input type="text" name="email" value="orchbankuser@bankmail.com" /></td>
<td></td>
</tr>
<tr>
<td>Age</td>
<td><input type="text" name="age" value="27" /></td>
<td>Age Limit : Min = 18, Max = 65, (If age exceeds 60 BPEL engine's rule rejects the application)</td>
</tr>
<tr>
<td>Gender</td>
<td><input type="text" name="gender" value="male" /></td>
<td></td>
</tr>
<tr>
<td>Salary</td>
<td><input type="text" name="salary" value="56789.10" /></td>
<td>Minimum Salary = 20000.00</td>
</tr>
<tr>
<td>Loan Amount</td>
<td><input type="text" name="loanamount" value="19500.00" /></td>
<td></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="submit" name="Submit Application" /></td>
</tr>
<td></td>
</table>
</form>
要保存您所做的更改,请在“项目”窗口中选择 "index.jsp" 节点,然后从 IDE 的主菜单中选择“文件”>“保存”。
运行 index.jsp 文件:
在“项目”窗口中,展开 "LoanApplicationWebclient" 节点,然后展开“Web 页”节点。
展开 "WEB-INF" 节点,然后选择 "index.jsp"。
右键单击 index.jsp 文件,然后从弹出式菜单中选择“运行文件”。
在“输出”窗口中,将显示 index.jsp 所浏览的 URL,并且如果成功生成该文件,则还会显示“生成成功”消息。
将显示一个浏览器。如果未显示,请启动一个浏览器,然后键入在“输出”窗口的 "LoanApplicationWebclient (run)" 标签中列出的 URL。 将显示 JSP 页。
单击以放大
在浏览器的 JSP 页中,单击提交按钮。 将显示贷款申请状态。
返回页首
----------------------------------------
附录
创建 EJB 项目
创建 EJB 模块:
从 IDE 的主菜单中,选择“文件”>“新建项目”。
在“类别”下面,选择“企业”节点。
在“项目”下面,选择“EJB 模块”节点。
单击“下一步”。
在“项目名称”字段中,键入 LoanProcessor 。
(可选)在“项目位置”字段中,使用“浏览”按钮导航并选择 IDE 用于存储 EJB 项目文件的其他文件夹。
单击“完成”。 现在,“项目”窗口会包含一个名为 LoanProcessor 的 EJB 模块项目的项目节点。
创建新的 Web 服务:
在“项目”窗口中,右键单击 "LoanProcessor" 节点,然后从上下文菜单中选择“新建”>“Web 服务”。 将打开“新建 Web 服务”向导。
在“新建 Web 服务”向导中,执行以下操作:
在“名称和位置”页的“Web 服务名称”字段中,键入 LoanProcessor 。
在“包”字段中,键入 com.sun.loanprocessor 。
单击“完成”。
在“项目”窗口中,展开 "LoanProcessor" 项目节点,然后展开“Web 服务”节点。
右键单击 "LoanProcessor" 节点,然后选择“添加操作”。 将打开“添加操作”对话框。
在“名称”字段中,键入 processApplication 。
单击“添加”按钮。 将打开“输入方法参数”对话框。
在“类型”下拉列表中,选择 "String"。
在“名称”中,键入 socialSecurityNumber 。
单击“确定”。
重复执行步骤 6 至 8 以创建其他 6 个参数(说明如下):
类型
名称
String
applicantName
String
applicantAddress
String
applicantEmailAddress
int
applicantAge
String
applicantGender
double
annualSalary
double
amountRequested
单击“确定”。
在“项目”窗口中,展开 "LoanProcessor" 项目节点,然后展开“Web 服务”节点。
展开 "LoanProcessor" Web 服务,然后双击 "processApplication" 节点。 请注意,源代码编辑器中包含了 LoanProcessor.java 的标签,其中具有 processApplication 方法的框架。
复制下面的方法主体,并将其粘贴到源代码编辑器的 LoanProcessor.java 文件标签中,紧靠在自动生成的方法签名下面,以便将 processApplication 操作更改为以下内容:
public String processApplication(@WebParam(name = "socialSecurityNumber") String socialSecurity,
@WebParam(name = "applicantName")String applicantName, @WebParam(name = "applicantAddress") String applicantAddress,
@WebParam(name = "applicantEmailAddress")String applicantEmailAddress,
@WebParam(name = "applicantAge") int applicantAge, @WebParam(name = "applicantGender")String applicantGender,
@WebParam(name = "annualSalary") double annualSalary, @WebParam(name = "amountRequested")double amountRequested) {
int MINIMUM_AGE_LIMIT = 18;
int MAXIMUM_AGE_LIMIT = 65;
double MINIMUM_SALARY = 20000;
int AVERAGE_LIFE_EXPECTANCY = 70;
String result = "Loan Application APPROVED.";
if(applicantAge < MINIMUM_AGE_LIMIT) {
result = "Loan Application REJECTED - Reason: Under-aged "+applicantAge+". Age needs to be over "+MINIMUM_AGE_LIMIT+"
years to qualify.";
System.out.println(result);
return result;
}
if(applicantAge > MAXIMUM_AGE_LIMIT) {
result = "Loan Application REJECTED - Reason: Over-aged "+applicantAge+". Age needs to be under "+MAXIMUM_AGE_LIMIT+"
years to qualify.";
System.out.println(result);
return result;
}
if(annualSalary < MINIMUM_SALARY) {
result = "Loan Application REJECTED - Reason: Annual Salary $"+annualSalary+" too low. Annual Salary needs to be
over $"+MINIMUM_SALARY+" to qualify.";
System.out.println(result);
return result;
}
int yearsToRepay = AVERAGE_LIFE_EXPECTANCY-applicantAge;
double limit = annualSalary*yearsToRepay*0.5;
if(amountRequested > limit) {
result = "Loan Application REJECTED - Reason: You are asking for too much $"+amountRequested+".
Annual Salary $"+annualSalary+", Age "+applicantAge+" years.
Your limit is $"+limit;
System.out.println(result);
return result;
}
System.out.println(result);
return result;
}
要保存您所做的更改,请从 IDE 的主菜单中选择“文件”>“保存”。
返回页首