创建一个贷款处理复合应用程序
由
Sherry Barkodar
和
Bob May
创建,由
Ron Jacobus
维护 2008 年 4 月 本文适用于 NetBeans IDE 6.1 发行版。
本教程将简要介绍如何创建一个简单的贷款处理复杂应用程序,并且将演示如何部署、执行和测试复杂应用程序(Composite Application)。
目录
业务用例
贷款处理复合应用程序需要满足以下业务用例,如 图 1 所示:
要申请贷款,用户需要填写一份贷款请求,其中包括个人身份、请求贷款总额和信用历史等信息。
接收到贷款请求后,系统将通过一个已有数据库验证用户提供的个人信息,然后根据其个人信息和申请额度批准或拒绝贷款。
完成一些特定的手续之后,系统将以批准函的形式生成一个报告并将其发送给用户,以确认贷款批准。
如果贷款由于某种原因被拒绝,则生成一个显示拒绝原因的报告,并发送给用户。
图 1:贷款业务用例
预计时间:45 分钟
教程需求
在开始之前,确保对本节的前提条件有所了解。
前提条件
本教程假定您已经拥有 Java 语言、平台以及 NetBeans IDE 的基础知识或编程经验。
本教程所需要的软件
要学习本教程,需要使用以下软件和资源。
NetBeans IDE
"All" 安装,版本 6.0 或 6.1
Java 开发工具包(Java Developer Kit,JDK)
版本 6 或 版本 5
与 Java EE 兼容的 Web 或应用服务器
适用于 NetBeans 6.1 的 GlassFish V2 UR2 适用于 NetBeans 6.0 的 GlassFish V2 UR1
“Download All” 选项包括 SOA Pack 和 GlassFish V2 应用服务器,它们都是本教程所必需的。
返回顶部
配置和启动 GlassFish 应用服务器
在部署应用程序之前,需要正确配置并运行 GlassFish 应用服务器。 完整的 NetBeans 6.1 下载包括 GlassFish V2 应用服务器。当安装 NetBeans 6.1 时,同时安装了 GlassFish V2 应用服务器。
要启动 GlassFish 应用服务器,请执行以下操作:
如果 “服务” 窗口不可见,请选择 “窗口” > “服务” 选项。
在 “服务” 窗口中,展开 Servers 节点。Servers 节点中应该包含一个 GlassFish V2 子节点。如果未出现 GlassFish Application Server 节点,请阅读 配置 GlassFish 应用服务器 这篇文章。
右键单击 GlassFish V2 节点并选择“ 启动”选项。 “ 输出 ” 窗口将显示关于应用程序启动的日志信息。如果“输出” 窗口不可见,请选择 “窗口” >“输出” > “输出” 选项。 如果“输出”窗口显示Application server startup complete 消息,表明应用服务器已经启动并开始运行。
注意: 如果 GlassFish Application Server 节点上有绿色箭头标志,表明服务器正在运行。 您知道吗 :当将应用程序部署到 GlassFish 应用服务器时,同时自动启动了GlassFish 应用服务器。这样,就不需要手动启动 GlassFish 应用服务器。
要选择另一个应用服务器,请执行以下操作:
以下步骤将介绍如何使用 GlassFishV2 应用服务器的另一个版本来配置 NetBean 6.1 IDE 。假定您已经下载并安装了另一个版本的应用服务器。
在 “服务” 窗口中,右键单击 Servers 节点并从弹出菜单中选择 “添加服务器 ” 选项。 此时将打开 “添加服务器实例” 对话框。
在“选择服务器”页面中,从 Server 下拉列表中选择 GlassFish V2 选项。
单击 “下一步” 按钮。 此时将打开 “平台文件夹位置” 页面。
在 “平台位置” 字段中,使用 “浏览” 按钮导航到应用服务器的安装位置并选择它。 如果将 GlassFish 应用服务器安装在默认位置,那么可以使用 表 1 作为查找安装位置的指南。否则,导航到 GlassFish V2 应用服务器的安装位置。
表 1:应用服务器的默认安装目录
Solaris OS Linux
root
/opt/SUNWappserver
/opt/SDK
Solaris OS Linux
user
~/SUNWappserver
~/SDK
Mac OS X
N/A
~/SUNWappserver
~/SDK
Windows
N/A
C:\Sun\AppServer
C:\Sun\SDK
选中 “注册本地默认域” 单选按钮,然后单击 “下一步” 按钮。
输入域管理员的用户名和密码。 如果在安装时使用了默认值,则用户名和密码分别为 admin 和 adminadmin 。
单击 “完成” 按钮。
创建 BPEL 模块项目
在本节中,我们将创建一个 BPEL 模块项目 LoanRequestor 。
要创建 LoanRequestor 项目,请执行以下操作:
在 NetBeans 菜单中,单击 “文件” > “新建项目” 。 此时将打开“新建项目 ”向导。
在 “类别” 列表中,选择 SOA 节点;并在 “项目” 列表中,选择 BPEL Module 节点。
单击 “下一步” 按钮。
在 “项目名称”中,输入 LoanRequestor 。
(可选)在“项目位置”字段中,使用“浏览”按钮导航到 IDE 将要存储项目文件的位置并选择它。
单击 “完成” 按钮。 现在,“项目”窗口中已经包含一个 BPEL 模块项目节点,其名称为 LoanRequestor 。
返回顶部
创建 XML 模式
在本节中,我们将在 BPEL 模块项目中添加一个新 XML 模式,然后再在模式中添加一些 XML 模式组件。
要创建 LoanRequestor.xsd ,请执行以下操作:
在“项目”窗口中,展开 LoanRequestor 项目节点,然后右键单击 Process Files 节点并选择“新建” > “其他” 选项。 此时将打开“新建文件”向导。
在 “新建文件” 向导中,执行以下操作:
在“选择文件类型”页面的“类别”列表中,选择 XML 节点,然后在“文件类型” 列表中,选择 XML Schema 节点。单击 “下一步” 按钮。
在“文件名称”中,输入 LoanRequestor 。
单击 “完成” 按钮。
在“项目”窗口中,Process Files 节点现在包含一个标签为 LoanRequestor.xsd 的子节点。源编辑器中包含一个 XML 模式文件的选项卡,即 LoanRequestor.xsd ,同时打开了“模式”视图。
在 “模式 ” 视图中,单击 “设计” 按钮打开 XML 模式编辑器的 “设计” 视图。
要在 XML 模式中添加复杂类型,请执行以下操作:
在“设计”视图的“组件面板”中,展开 “XML 模式组件”区域并选择 “复杂类型” 图标。 如果“组件面板”窗口不可见,则从主菜单中选择 “窗口” >“服务”选项。
将所选内容拖到模式设计区域 Complex Types 节点下。 IDE 将添加一个 Complex Type 节点,并且将选中复杂类型(newComplexType )的名称供用户修改。
在新节点中键入 processApplicType 并按下回车键。 现在,“设计” 区域中将显示刚才创建的新复杂类型,其名称为 processApplicType 。
重复步骤 1 到 3,再创建一个名称为 processApplicType 的复杂类型。
要在 processApplicType 中添加本地元素,请执行以下操作:
在 “组件面板”的 “XML 组件”区域,选择 “元素” 图标并将所选内容拖动到模式设计区域的 processApplicType 节点。 IDE 将添加一个标签为 newElement 的元素节点。
如果“属性”窗口不可见,则选择 “窗口” >“属性”选项。
在模式设计区域中,选择 newElement 节点。
在“属性”窗口中,选择 Name 属性的值字段使它变为可编辑状态,然后键入 socialSecurityNumber 。
在 “属性” 窗口中,将 Nillable 属性的值字段设置为 True 。
在“属性”窗口的 Definition 属性中,单击省略号按钮。 此时将打开“定义”对话框。
在列表中,展开 Built-in Types 节点,选择 string 节点,然后单击 “确定” 按钮。
重复步骤 1 到 7,添加以下元素 中:
applicantName
True
string
applicantAddress
True
string
applicantEmailAddress
True
string
applicantAge
True
int
applicantGender
True
string
annualSalary
True
double
amountRequested
True
double
要在 processApplicRespType 中添加本地元素,请执行以下操作:
在“组件面板”的 “XML 组件”区域中,选择 “组件”图标并将所选内容拖动到模式设计区域的 processApplicRespType 节点。 IDE 将添加一个标签为 newElement 的元素节点。
在模式设计区域中,选择 newElement 节点。
在“属性”窗口中,选择 Name 属性的值字段使它变为可编辑状态,然后键入 return 。
在“属性”窗口的 Definition 属性中,单击省略号按钮。 此时将打开“定义”对话框。
在列表中,展开 Built-in Types 节点,然后选择 string 节点。
单击“确定”按钮。 将所有本地元素添加到复杂类型中之后,“设计”视图界面如下所示:
要添加全局元素,请执行以下操作:
在“组件面板”的 “XML 组件”区域,选择 “元素” 图标并将所选内容拖动到设计区域中 Elements 节点的正下方。 IDE 将在模式设计区域的 Elements 节点下面添加一个 newElement 组件。
在 “设计”视图的模式设计区域中,选择 newElement 节点。
在“属性”窗口中,选择 Name 属性的值字段使它变为可编辑状态,然后键入 processApplicElement 。
在“属性”窗口的 Definition 属性中,单击省略号按钮。 此时将打开“定义”对话框(元素定义)。
在列表中,展开 Complex Types 节点,然后选择 processApplicType 复杂类型节点。
单击“确定”按钮。
重复步骤 1 到 6,再添加一个名称为 processApplicRespElement 的全局元素,并选择 processApplicRespType 复杂类型作为定义。
要保存修改,在 “属性” 窗口中,选择 LoanRequestor 项目节点,并从主菜单中选择 “文件” > “保存所有文件” 选项。
返回顶部
创建 WSDL 文档
在本节中,我们将在 BPEL 模块项目中添加一个 WSDL 文件,然后再配置 WSDL 文档的组件。
要创建 LoanRequestor.wsdl ,请执行以下操作:
在“项目”窗口中,展开 LoanRequestor 项目节点,然后右键单击 Process Files 节点并选择“新建” > “WSDL 文档”选项。 此时将打开 “新建 WSDL 文档 ” 向导。
在“ 名称和位置”页面中,执行以下操作:
在 “文件名称”中,输入 LoanRequestor 。
选中 “导入 XML 模式文件” 复选框。
在“XML 模式”字段,单击 “浏览” 按钮。 此时将打开“添加导入” 对话框。该对话框将显示可以导入的 XML 模式。
展开 By File > LoanRequestor > Process Files 节点,然后选择 LoanRequestor.xsd 。 确保在“导入” 列中选中 LoanRequestor.xsd 复选框。
单击 “确认” 按钮。
在“新建 WSDL 文档”向导中,单击“下一步”按钮。
此时将打开 “抽象配置” 页面。
在 “抽象配置” 页面的“输入”区域中,执行以下操作:
在 “消息部分名称” 栏中,双击默认值使该字段变为可编辑状态。
键入 requestLoanMessage 并按下回车键。
在“元素或类型”栏中,单击省略号按钮。 此时将打开 “选择元素或类型” 对话框。
展开 By File > LoanRequestor > src/LoanRequestor.xsd > Elements 节点。 注意: 您可能需要滑动到“选择元素或类型”对话框中列表的顶部才能看到 By File 节点。
在 Elements 节点下面,选择 processApplicElement 节点,然后单击“确定”按钮。
在“抽象配置”页面的“输出”区域中,执行以下操作:
在“消息部分名称”栏中,双击默认值使该字段变为可编辑状态。
键入 responsePart 并按下回车键。
在“元素或类型”栏中,单击省略号按钮。 此时将打开“选择元素或类型”对话框。
展开 By File > LoanRequestor > src/LoanRequestor.xsd > Elements 节点。 注意: 您可能需要滑动到“选择元素或类型”对话框中列表的顶部才能看到 By File 节点。
在 Elements 节点下面,选择 processApplicRespElement 节点,然后单击 “确定” 按钮。
完成后,“抽象配置” 页面如下图所示。
单击 “完成” 按钮。 在“项目”窗口中,Process Files 节点已经包含一个标签为 LoanRequestor.wsdl 的子节点。源编辑器中包含一个 WSDL 文件的选项卡,即 LoanRequestor.wsdl ,同时打开了 “WSDL” 视图。
返回顶部
打开和部署合作伙伴 Web 服务
贷款应用程序将通过它们的公开接口与其合作伙伴服务进行通信。这些接口定义在特定合作伙伴的 WSDL 文件中。
在本节中,我们将使用 J2EE 项目LoanProcessor 。可以按照 创建 EJB 模块项目 中的步骤从头开始创建此项目,或者也可以从 loanprocessing-loanprocessor.zip 下载经过压缩的项目文件。LoanRequestor 项目包含合作伙伴服务的一个非常基础的 EJB 实现。 必须将合作伙伴 Web 服务部署到 IDE 附带的 GlassFish 服务器中,然后才能够测试运行 LoanRequestorCompositeApp 。
该实现只用于充当贷款服务(Loan Service)流程的测试工具。
要打开 LoanProcessor 项目,需执行以下操作:
下载 loanprocessing-loanprocessor.zip 文件,然后将它解压到 IDE 的工具目录中。 这样将创建一个 LoanProcessor 目录。
从主菜单中,选择 “文件”>“打开项目”选项。 此时将打开“新建项目”向导。
导航到解压项目的目录,选择 LoanProcessor 项目,然后单击 “打开项目文件夹” 按钮。 此时将显示进度对话框,然后该项目将出现在 “项目” 窗口中。
要部署 LoanProcessor 项目,请执行以下操作:
右键单击 LoanProcessor 项目节点,然后选择 “取消部署和部署”选项。
等待,直到“输出”窗口中显示消息:BUILD SUCCESSFUL 。
要验证 LoanProcessor 企业应用程序是否成功部署,需要切换到“服务”窗口。
在“服务”窗口中,展开 Servers > GlassFish V2 > Applications > EJB Modules 节点。 已经添加 LoanProcessor 节点。如果该节点未出现,表明部署失败。
返回顶部
创建 BPEL 流程
要创建 LoanRequestor.bpel ,需执行以下操作:
在“项目”窗口中,展开 LoanRequestor 项目节点,然后右键单击 Process Files 节点并选择“新建”>“BPEL 流程”选项。 此时将打开 “新建 BPEL流程” 向导。
在 “文件名称”中,输入 LoanRequestor 。
单击 “完成” 按钮。 此时,在“项目”窗口中,Process Files 节点包含子节点 LoanRequestor.bpel 。 源编辑器中包含一个 BPEL 流程选项卡,即 LoanRequestor.bpel ,同时打开了 BPEL 设计器的 “设计” 视图。
要添加合作伙伴链接,请执行以下操作:
在“ 项目”窗口中,展开 LoanRequestor 项目节点,然后展开 Process Files 节点并选择 LoanRequestor.wsdl 节点。
将所选内容(LoanRequestor.wsdl )从 “项目”窗口拖动到“设计”视图中。IDE 将为您提供可视化的提示来告诉您选项的放置位置。
在 “LoanRequestor 属性” 中,将 “名称” 字段中的值修改为 BpelImplementation 。
使用其他默认值(WSDL File = /LoanRequestor.wsdl ,使用选中的 “现有合作伙伴链接类型” 单选按钮),然后单击 “确定” 按钮。
在“项目”窗口中,展开 LoanProcessor EJB Module 项目节点,然后展开 Web Services 节点并选择 LoanProcessor Web 服务节点。
将所选内容(LoanProcessor Web 服务节点)从 “项目”窗口拖动“设计”视图中。IDE 将为您提供可视化提示告诉您选项的放置位置。 此时将打开“新建合作伙伴链接” 对话框。
将“名称”字段的值修改为 EjbImplementation 。
使用其他默认值(WSDL File = /Partners/LoanProcessor/LoanProcessor.wsdl ,使用所选中的 “新建合作伙伴链接类型”单选按钮),然后单击 “确认” 按钮。 注意,IDE 已经在 LoanRequestor > Process Files 节点下面添加了一个 Partners 文件夹。
展开 Partners 节点。 注意,该文件夹中的 LoanProcessor 节点包含 LoanProcessor.wsdl 、LoanProcessorWrapper.wsdl 和 LoanProcessor_xsd_1.xsd 。
要添加接收活动,请执行以下操作:
在“组件面板”的 “Web 服务”区域,选择“接收”图标并将所选内容拖动到“设计”区域中 Process Start 活动与 Process End 活动中间。 IIDE 将为您提供可视化提示告诉您选项的放置位置。 该操作将在“设计”视图中放置一个接收活动 Receive1 。
单击 Receive1 活动的 “编辑” 按钮。 此时将打开 “Receive1 [Receive] 属性编辑器”。
将“ 名称”字段的值修改为 ReceiveFromCustomer 。
从 “合作伙伴链接”下拉列表中,选择 BpelImplementation 选项。 IDE 将在“操作”字段中填入 LoanRequestorOperation 。
单击“ 输入变量”字段旁边的“创建”按钮,在 “新输入变量” 对话框中,使用默认值并单击“确定”按钮。 这将创建一个名称为 LoanRequestorOperationIn 的新输入变量。
单击“确定”按钮,关闭 “Receive1 [Receive] ——属性编辑器”。 现在,在“设计”视图中,不仅包含接收活动 ReceiveFromCustomer ,还包含 BpelImplementation 合作伙伴链接与 LoanRequestor 流程中接收活动之间的一条连接。
要添加调用活动,请执行以下操作:
在“组件面板”的“Web 服务”区域,选择“调用”图标并将所选内容拖动到“设计”区域中 ReceiveFromCustomer 活动的下方。 IDE 为您提供可视化的提示来告诉您选项的放置位置。 该操作将在 “设计”视图中放置一个调用活动 Invoke1 。
单击 Invoke1 活动的 “Edit” 按钮。 此时将打开 “Invoke1 [Invoke]——属性编辑器”。
将“名称”字段值修改为 InvokeLoanProcessorEJB 。
从“合作伙伴”下拉列表中,选择 EjbImplementation 选项。 IDE 将在“操作”字段中填入 processApplicOperation 。
单击“输入变量”字段旁边的“创建”按钮,在 “新输入变量” 对话框中,使用默认值并单击“确定”按钮。 这将创建一个名称为 ProcessApplicOperationIn 的新输入变量。
单击“输出变量 ”字段旁边的“创建”按钮,在 “新输出变量 ”对话框中,使用默认值并单击“确定”按钮。 这将创建一个名称为 ProcessApplicOperationOut 的新输出变量。
单击“确定”按钮,关闭 “Invoke1 [Invoke]——属性编辑器”。 现在,在 “设计”视图中不仅包含调用活动InvokeLoanProcessorEJB ,还包含 LoanRequestor 流程中的调用活动与 EjbImplementation 合作伙伴链接之间的一条连接。
要添加回复活动,请执行以下操作:
在“组件面板”的“Web 服务”区域中,选择“回复”图标并将所选内容拖动到“设计”区域中 InvokeLoanProcessorEJB 活动的下方。 IDE 将为您提供可视化的提示来告诉您选项的放置位置。 该操作将在 “Design” 视图中放置了一个回复活动 Reply1 。
单击 Reply1 活动的 “编辑” 按钮。 此时将打开 “Reply1 [Reply] ——属性编辑器”。
将“名称”字段值修改为 ReplyToCustomer 。
在“合作伙伴”下拉列表中,选择 BpelImplementation 选项。 IDE 将在“操作”字段中填入 LoanRequestorOperation 。
确保选中了“普通响应”单选按钮。
单击“输出”字段旁边的“创建”按钮,在 “新输出变量” 对话框中,使用默认值并单击“确认”按钮。 这将创建一个名称为 LoanRequestorOperationOut 的新输出变量。
单击 “确定” 按钮,关闭 “Reply1 [Reply]——属性编辑器”。 该操作将在“设计”视图中放置一个名称为 ReplyToCustomer 的回复活动。
要添加 CopyCustomerInfo 赋值活动,请执行以下操作:
在“组件面板”的 “基本活动”区域,选择 “赋值”图标并将所选内容拖动到“设计”区域中的 ReceiveFromCustomer 活动与 InvokeLoanProcessorEJB 活动中间。 IDE 将为您提供可视化提示告诉您所选内容的放置位置。 该操作将在“设计”视图中放置一个赋值活动 Assign1 。
如果“属性”窗口不可见,则从主菜单中选择“窗口”>“属性”选项。
在“设计”视图中,选择 Assign1 活动。
在“属性”窗口中,将 Name 属性修改为 CopyCustomerInfo 。
在 BPEL 编辑器中,选择“映射器”按钮,打开“BPEL 映射器”窗口。确保选择了 LoanRequestor.bpel 选项卡。
在 “BPEL 映射器”的源窗格(左边)中,展开 Variables > LoanRequestorOperationIn > requestLoanMessage 节点。 先前在模式中创建的 processApplicType 复杂类型中的每个本地元素都有一个相应的节点。
在 “BPEL 映射器”的目标窗格(右侧窗格)中,展开 Variables 节点下面的 ProcessApplicOperationIn 和 parameters 节点。 在 parameters 节点的下面也显示了相同的模式元素节点。
将源窗格中的 socialSecurityNumber 拖动到目标窗格中的 socialSecurityNumber 节点下。
针对以下变量,重复步骤 8:applicantName 、applicantAddress 、applicantEmailAddress 、applicantAge 、applicantGender 、annualSalary 和 amountRequested 。
要保存修改,在 “项目” 窗口中,选择 LoanRequestor 项目节点,并从主菜单中选择 “文件” >“保存所有文件” 选项。
要添加 CopyLoanStatus 赋值活动,请执行以下操作:
在 BPEL 编辑器的工具栏中,选择 “设计” ,切换到“设计”视图。
在“组件面板”的“基本活动”区域,选择“赋值”图标并将所选内容拖动到“设计”区域中 InvokeLoanProcessorEJB 活动与 ReplyToCustomer 活动中间。 该操作将在 “设计” 视图中放置一个赋值活动 Assign1 。
选择 Assign1 活动。
在 “属性”窗口中,将 Name 属性的值修改为 CopyLoanStatus 。
在 BPEL 编辑器的工具栏中,选择 “映射器” ,转换到“BPEL 映射器”视图。
在 “BPEL 映射器”的源窗格中,展开 Variables > ProcessApplicOperationOut > parameters 节点。 可见,return 节点 在 parameters 节点的下面。
在 “BPEL 映射器”的目标窗格中,展开 Variables > ProcessApplicOperationOut > responsePart 节点。 可见,return 节点在 responsePart 节点的下面。
将源窗格中的 return 节点拖动到“BPEL 映射器”目标窗格中的 return 节点。
要保存更改,在 “项目” 窗口中,选择 LoanRequestor 项目节点,并从主菜单中选择 “文件” >“保存所有文件” 选项。
返回顶部
编译 BPEL 模块项目
要编译 LoanRequestor 项目,请执行以下操作:
在“项目”窗口中,右键单击 LoanRequestor 项目节点并选择 “清理和编译项目” 选项。 如果在 “输出” 窗口中显示 BUILD SUCCESSFUL 消息,则表明编译成功。
返回顶部
创建复合应用程序项目
在部署 BPEL 模块项目之前,必须创建一个复合应用程序。部署项目将使应用服务器可以使用服务组合件功能,运行服务单元。
要创建复合应用程序项目,请执行以下操作:
从主菜单中,选择 “文件” > “新建项目” 选项。 此时将打开 “新建项目” 向导。
在“类别”列表中,选择 SOA 节点。
在“项目”列表中,选择 Composite Application 节点。
单击 “下一步” 按钮。
在 “项目名称”字段,输入 LoanRequestorCompositeApp 。
单击 “完成” 按钮。 现在,“项目”窗口中包含一个复合应用程序项目节点 LoanRequestor 。
返回顶部
使用复合应用程序(服务组合件)编辑器
在本节中,我们将使用复合应用程序(服务组合件)编辑器修改项目配置和编译 BPEL 模块项目。我们将添加一个 WSDL 端点和一个连接,然后验证和修改自动生成的 WSDL 端点属性。
要使用复合应用程序(服务组合件)编辑器修改项目配置和编译 BPEL模块项目,请执行以下操作:
在“项目”窗口中,展开 LoanRequestorCompositeApp 节点。右键单击 Service Assembly 节点,从弹出菜单中选择“编辑”选项。 IDE 将在复合应用程序(服务组合件)编辑器中打开 .casa 文件。该编辑器“设计”视图的设计区域由三部分组成:“WSDL 端口”、“JBI 模块”和“外部模块”。
注意: 要在 NetBeans 6.0 中调用 CASA 编辑器,右键单击“项目”窗口的复合应用程序并选择 “编辑应用程序配置” 选项。
在“项目”窗口中,选择 LoanRequestor 项目节点,并将所选内容拖动到 LoanRequestorCompositeApp.casa 文件“设计”视图的“JBI 模块”区域。
在编辑器工具栏中,单击 “编译项目 ”按钮,编译 HelloSample BPEL 模块项目。 完成此步骤后:
在“输出”窗口将会显示“ BUILD SUCCESSFUL”,表明项目编译成功。
LoanRequestorCompositeApp.casa 文件的“设计”视图如下图所示。
要创建 WSDL 端点,请执行以下操作:
在“组件面板”的“WSDL”绑定区域,选择 “ 肥皂” 图标。
将所选内容拖动到 LoanRequestorCompositeApp.casa 文件“设计”视图的 “WSDL”端口区域中。 IDE 将添加一个标签为 casaPort1 的 WSDL 端口。
要创建连接,请执行以下操作:
在“设计”视图中的 casaPort1 端口中,单击“使用端点”图标。
将所选内容拖动到“JBI 模块”区域 (BPEL) LoanRequestor 框中的 LoanRequestorPortTypeRole_myRole 上。 IDE 将新建一个连接。
返回顶部
部署和测试复合应用程序
要增强复合应用程序的功能,可以添加一些测试用例并绑定到操作,然后提供输入并使用测试程序。
要部署复合应用程序,请执行以下操作:
右键单击 LoanRequestorCompositeApp 项目节点,然后选择“部署项目”选项。 如果在“输出”窗口中显示消息:BUILD SUCCESSFUL ,表明部署成功。
要为通过批准的请求添加测试用例,请执行以下操作:
在“项目”窗口中,展开 LoanRequestorCompositeApp 项目节点,右键单击 Test 节点并从弹出菜单中选择“新建测试用例”选项。 此时将打开 “新建测试用例” 向导。
在“ 测试用例名称 ”中,输入 ApprovedTestCase 并单击“下一步”按钮。
在“选择 WSDL 文档”页面中,展开 LoanRequestorCompositeApp - Process Files 节点,选择 LoanRequestorCompositeApp.wsdl 并单击“下一步”按钮。
在“选择要测试的操作” 页面中,选择 LoanRequestorOperation 并单击“完成”按钮。 在“项目”窗口中,IDE 已经在 Test 节点下面添加了一个新节点 ApprovedTestCase 。该节点包含两个子节点:Input 和 Output 。源编辑器包含输入文件的选项卡,即 Input.xml 。
注意: 如果源编辑器未包含 Input.xml 选项卡,则在“项目”窗口中双击 Input 节点打开该文件。
在Input.xml 文件的源编辑器选项卡中, 使用以下数值(粗体)取代问题标志来定义各个变量的值:
<loan:socialSecurityNumber>111-11-1111 </loan:socialSecurityNumber>
<loan:applicantName>John Smith </loan:applicantName>
<loan:applicantAddress>1601 Willow Road, Fremont, CA 94025 </loan:applicantAddress>
<loan:applicantEmailAddress>
mayj12008
@
gmail.com
</loan:applicantEmailAddress>
<loan:applicantAge>36 </loan:applicantAge>
<loan:applicantAge>15 </loan:applicantAge>
<loan:applicantAge>100000 </loan:applicantAge>
<loan:applicantAge>1000000 </loan:applicantAge>
从主菜单中,选择“文件”>“保存所有文件”选项。
关闭 Input.xml 文件的 源编辑器选项卡。
要为被拒绝的请求添加测试用例,请执行以下操作:
在“项目”窗口中,展开 LoanRequestorCompositeApp 项目节点,右键单击 Test 节点并从弹出菜单中选择“新建测试用例”选项。 此时将打开 “新建测试用例” 向导。
在 “测试用例名称”中,输入 RejectedTestCase 并单击“下一步”按钮。
在“ 选择 WSDL 文档” 页面中,展开 LoanRequestorCompositeApp - Process Files 节点,选择 LoanRequestorCompositeApp.wsdl 并单击“下一步”按钮。
在“选择要测试的操作”页面中,选择 LoanRequestorOperation 并单击 “完成” 按钮。 在“项目”窗口中,IDE 已经在 Test 节点下面添加了一个新节点,其名称为 RejectedTestCase 。该节点包含两个子节点:Input 和 Output 。源编辑器包含一个输入文件选项卡 LoanRequestor.wsdl 。
注意: 如果源编辑器未包含 Input.xml 选项卡,则在“项目”窗口中双击 Input 节点打开该文件。
在 Input.xml 文件的源编辑器选项卡中,通过使用以下数值(粗体)取代问题标记区域来定义各个变量的值:
<loan:socialSecurityNumber>222-22-2222 </loan:socialSecurityNumber>
<loan:applicantName>John Smith </loan:applicantName>
<loan:applicantAddress>8888 Willow Road, Fremont, CA 94538 </loan:applicantAddress>
<loan:applicantEmailAddress>
jsmithj12007
@
gmail.com
</loan:applicantEmailAddress>
<loan:applicantAge>15 </loan:applicantAge>
<loan:applicantAge>15 </loan:applicantAge>
<loan:applicantAge>100000 </loan:applicantAge>
<loan:applicantAge>1000000 </loan:applicantAge>
从主菜单中,选择“文件”>“保存所有”选项。
关闭 Input.xml 文件的源编辑器选项卡。
要使用 ApprovedTestCase 的基准信息填充测试文件,请执行以下操作:
在“项目”窗口中,双击 ApprovedTestCase 下面的 Output 节点,以检查该文件的内容。 我们发现,Output.xml 文件最初是空的。
在“项目”窗口中,右键单击 ApprovedTestCase 节点并从弹出菜单中选择“运行”选项。
注意: 第一次运行的是一个特殊用例,因为 Output.xml 文件为空并且 IDE 无法将测试结果与 Output.xml 文件中的内容进行比较。注意 “输出” 窗口中的失败消息。 此时将打开“覆盖空输出?”对话框。
单击 “是” 按钮。 IDE 将使用默认信息填充 Output.xml 文件。现在,此版本的文件已含有运行后续测试所需的基准信息。这种版本的文件也称作“金色”文件。
要使用 RejectedTestCase 的基准信息填充测试文件,请执行以下操作:
在“项目”窗口中,双击 RejectedTestCase 节点下面的 Output 节点,以检查该文件的内容。 我们发现,Output.xml 文件最初是空的。
在“项目”窗口中,右键单击 RejectedTestCase 节点并从弹出菜单中选择“运行”选项。 注意: 第一次运行的是一个特殊用例,因为 Output.xml 文件为空并且 IDE 无法将测试结果与 Output.xml 文件中的内容进行比较。注意 “输出” 窗口中显示的失败消息。 此时将打开“覆盖空输出?”对话框。
单击 “是” 按钮。 IDE 将使用默认信息填充 Output.xml 文件。现在,此版本的文件已含有在后续测试运行中所需的基准信息。
要运行测试,请执行以下操作:
在“项目”窗口中,右键单击 ApprovedTestCase 节点并从弹出菜单中选择“运行”选项。 注意,Output.xml 文件的内容已保存并且未被新结果覆盖。可以通过双击表示通过测试的节点(Output 节点的正下方)来查看结果。
在“项目”窗口中,右键单击 RejectedTestCase 节点并从弹出菜单中选择“运行”选项。 可以通过双击表示通过测试的节点来查看结果。
在源编辑器中,关闭所有文档。
返回顶部
(可选)创建 EJB 模块项目
在本教程中,将使用 J2EE 项目 LoanProcessor 。可以按照本节中的步骤从头开始创建此项目,或者从 loanprocessing-loanprocessor.zip 下载经过压缩的项目文件。
要创建 EJB 模块项目,请执行以下操作:
从主菜单中,选择“文件”>“新建项目”选项。
在“类别”列表中,选择 Enterprise 节点;在“项目”列表中,选择 EJB Module 节点。
单击 “下一步” 按钮。
在“项目名称”字段,输入 LoanProcessor 。
(可选)在“项目位置”字段中,使用“浏览”按钮导航到 IDE 将要存储 EJB 项目文件的位置并选择它。
单击 “下一步” 按钮。
在“服务器和设置”页面,确保选中服务器 GlassFish V2,单击 “完成” 按钮。 此时,“项目”窗口中已经包含一个 EJB Module 项目节点 LoanProcessor 。
要创建 Web 服务,请执行以下操作:
在“项目”窗口中,右键单击 LoanProcessor 项目节点并从弹出菜单中选择“新建”>“Web 服务”选项。 此时将打开 “新建 Web 服务” 向导。
在“新建 Web 服务”向导中,执行以下操作:
在“名称和位置”页面的 “Web 服务”字段中,输入 LoanProcessor 。
在“包”字段中,输入 com.sun.loanprocessor 。
单击 “完成” 按钮。
IDE 将创建一个 Web 服务并在源编辑器中打开 LoanProcessor 。
在“项目”窗口中,展开 LoanProcessor 项目节点,然后再展开 Web Services 节点。
右键单击 LoanProcessor 项目节点(Web 服务),然后选择“添加操作”选项。 此时将打开“添加操作”对话框。
在“名称”字段,输入 processApplicOperation 。
在“参数”选项卡中,添加以下七个参数。方法是单击“添加” 按钮并完成 IDE 为各参数添加的行。
socialSecurityNumber
java.lang.String
applicantName
java.lang.String
applicantAddress
java.lang.String
applicantEmailAddress
java.lang.String
applicantAge
java.lang.Integer
applicantGender
java.lang.String
annualSalary
java.lang.Double
amountRequested
java.lang.Double
单击 “确定” 按钮。
在源编辑器中,单击 “源”按钮打开 LoanProcessor.java 文件的“源”视图。 注意到,IDE 已经更新了 LoanProcessor.java 文档,其中含有 processApplicOperation 方法的框架。
在源编辑器中,将代码
//TODO write your implementation code here:
return null;
替换为以下代码:
int MINIMUM_AGE_LIMIT = 18;
int MINIMUM_AGE_LIMIT = 65;
double MINIMUM_SALARY = 20000;
int AVERAGE_LIFE_EXPECTANCY = 70;
String result = "Loan Application APPROVED.";
// Check age of applicant
// If less than min age limit, rejected
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 retValue;
}
// Check age of applicant
// If less than min age limit, rejected
if(applicantAge < MINIMUM_AGE_LIMIT) {
result = "Loan Application REJECTED - Reason:Under-aged " +
applicantAge
". Age needs to be over " +
MAXIMUM_AGE_LIMIT +
" years to qualify.";
System.out.println(result);
return retValue;
}
// Check annual salary
// If less than min age limit, rejected
if(applicantAge < MINIMUM_AGE_LIMIT) {
result = "Loan Application REJECTED - Reason:Annual Salary $" +
annualSalary
" too low.Age needs to be over " +
MINIMUM_SALARY +
" years to qualify.";
System.out.println(result);
return retValue;
}
// Calculate the years to pay off loan based on applicantAge
int yearsToRepay = AVERAGE_LIFE_EXPECTANCY - applicantAge;
// Calculate the max amount of loan based on years to pay off loan
double limit = annualSalary * yearsToRepay * 0.5;
// Check amount requested, if higher than limit, rejected
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 retValue;
}
System.out.println(result);
return retValue;
要保存更改,请从主菜单中选择“文件”>“保存”选项。
(可选)在源编辑器中关闭 LoanProcessor 选项卡。
返回 打开和部署合作伙伴 Web 服务 。
返回顶部
未来计划
更多信息
返回顶部