本教程将简要介绍如何创建一个简单的贷款处理复合应用程序,并且将演示如何部署、执行和测试复合应用程序(Composite Application)。
目录
业务用例
贷款处理复合应用程序需要满足以下业务用例,如
图 1 所示:
- 要申请贷款,用户需要填写一份贷款请求,其中包括个人身份、请求贷款总额和信用历史等信息。
- 接收到贷款请求后,系统将通过一个已有数据库验证用户提供的个人信息,然后根据其个人信息和申请额度批准或拒绝贷款。
- 完成一些特定的手续之后,系统将以批准函的形式生成一个报告并将其发送给用户,以确认贷款批准。
- 如果贷款由于某种原因被拒绝,则生成一个显示拒绝原因的报告,并发送给用户。
图 1:贷款业务用例
预计时间:
45 分钟
教程需求
在开始之前,确保对本节的系统需求有所了解。
前提条件
本教程假设您拥有 Java 语言、Java 平台与 NetBeans IDE 方面的基础知识或编程经验。
本教程所需要的软件
开始之前,需要在您的计算机中下载并安装以下软件:
NetBeans 6.0。 All Download
选项包括 SOA Pack 和 GlassFish V2 应用服务器,后者为本教程所需。
配置和启动
GlassFish 应用服务器。
在部署应用程序之前,需要正确配置并运行 GlassFish 应用服务器。
完整的 NetBeans 6.0 下载包括 GlassFish 应用服务器。当我们安装 NetBeans 6.0 时,GlassFish 应用服务器将一并安装。
启动 GlassFish 应用服务器。
- 如果 Services 窗口不可见,则选择 Window > Services 选项。
- 在 Services 窗口中,展开
Servers 节点。
Servers 节点中应该包含一个
GlassFish Application Server 子节点。如果未出现
GlassFish Application Server 节点,请阅读
配置 GlassFish 应用服务器 这篇文章。
- 右键单击 GlassFish Application Server 节点并选择 Start 选项。
Output 窗口将显示关于应用程序启动的日志信息:如果 Output 窗口不可见,则选择 Window > Output > Output 选项
当 Output 窗口中出现“Application server startup complete.”消息时,则表示应用服务器已经开始运行。
注意: 如果 GlassFish Application Server 节点上出现了一个绿色的箭头标志,则表示服务器正在运行。
您知道吗:在 GlassFish 应用服务器中部署一个应用程序将自动启动 GlassFish 应用服务器。这样,我们就不需要手动启动
GlassFish 应用服务器。
配置 GlassFish V2 应用服务器:
您可能希望使用不同版本的应用服务器,而不是 NetBeans 6.0 所提供的版本。比如说,您可以从
GlassFish Community 站点下载并安装一个更新版本的 GlassFish V2。
以下步骤将演示如何配置 NetBeans 6.0 IDE 使用另一个版本的 GlassFish V2 应用服务器。假定您已经下载并安装了另一个版本的应用服务器。
- 在 Services 窗口中,右键单击 Servers 节点并从弹出菜单中选择 Add Server 选项。
此时将打开 Add Server Instance 对话框。
- 在 Choose Server 页面中,从 Server 下拉列表中选择 GlassFish V2 选项。
- 单击 Next 按钮。
此时将打开 Platform Folder Location 页面。
- 在 Platform Location 字段中,使用 Browse 按钮导航到应用服务器的安置位置并选择它。
如果将 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
|
- 选中 Register Local Default Domain 单选按钮,然后单击 Next 按钮。
- 为域的管理员输入用户名和口令。
如果在安装时接受了默认值,则用户名和口令分别为
admin 和
adminadmin。
- 单击 Finish 按钮。
创建 BPEL 模块项目
在本节中,我们将创建一个 BPEL 模块项目,其名称为
LoanRequestor。
创建
LoanRequestor 项目:
- 从主菜单中,选择 File > New Project 选项。
此时将打开 New Project 向导。
- 在 Categories 列表中,选择
SOA 节点;并在 Projects 列表中,选择
BPEL Module 节点。
- 单击 Next 按钮。
- 在 Project Name 字段中,输入
LoanRequestor。
- (可选)在 Project Location 字段中,使用 Browse 按钮导航到 IDE 将要存储项目文件的位置并选择它。
- 单击 Finish 按钮。
现在,Projects 窗口中已经含有一个 BPEL 模块项目节点,其名称为
LoanRequestor。
创建 XML 模式
在本节中,我们将在 BPEL 模块项目中添加一个新 XML 模式,然后再在模式中添加一些 XML 模式组件。
创建
LoanRequestor.xsd:
- 在 Projects 窗口中,展开
LoanRequestor 项目节点,然后右键单击
Process Files 节点并选择 New > Other 选项。
此时将打开 New File 向导。
- 在 New File 向导中,执行以下执行:
- 在 Choose File Type 页面的 Categories 列表中,选择
XML 节点。然后,在 File Types 列表中,选择
XML Schema 节点。
- 在 File Name 字段中,输入
LoanRequestor。
- 单击 Finish 按钮。
在 Projects 窗口中,
Process Files 节点已经含有一个标签为
LoanRequestor.xsd 的子节点。Source Editor 中含有一个 XML 模式文件的选项卡,即
LoanRequestor.xsd。其中打开了 Schema 视图。
- 在 Schema 视图中,单击 Design 按钮打开 XML 模式编辑器的 Design 视图。
在 XML 模式中添加复杂类型:
- 在 Design 视图的 Palette 中,展开 XML Schema Components 部分并选择 Complex Type 图标。
如果 Palette 窗口不可见,则从主菜单中选择 Window > Services 选项。
- 将选定内容立即拖动到
Complex Types 节点下面的模式设计区域中。
IDE 将添加一个
Complex Type 节点,并且将选中复杂类型(
newComplexType)的名称供用户修改。
- 在新节点中键入
processApplicType 并按下回车键。
现在,Design 区域中将显示刚才创建的新复杂类型,其名称为
processApplicType。
- 重复步骤 1 到 3,再创建一个名称为
processApplicType 的复杂类型。
在
processApplicType 中添加本地元素:
- 在 Palette 的 XML Components 部分中,选择 Element 图标并将所选内容拖动到模式设计区域的
processApplicType 节点上面。
IDE 将添加一个标签为
newElement 的元素节点。
- 如果 Properties 窗口不可见,则选择 Window > Services 选项。
- 在模式设计区域中,选择
newElement 节点。
- 在 Properties 窗口中,选择
Name 属性的值字段使它变为可编辑状态,然后键入
socialSecurityNumber。
- 在 Properties 窗口中,将
Nillable 性能的值字段设置为
True。
- 在 Projects 窗口的
Definition 属性中,单击 ellipsis 按钮。
此时将打开 Definition 对话框。
- 在列表中,展开
Built-in Types 节点,选择
string 节点,然后单击 OK 按钮。
- 重复步骤 1 到 7,将以下元素也添加到
processApplicType 中:
|
applicantName
|
True
|
string
|
|
applicantAddress
|
True
|
string
|
|
applicantEmailAddress
|
True
|
string
|
|
applicantAge
|
True
|
int
|
|
applicantGender
|
True
|
string
|
|
annualSalary
|
True
|
double
|
|
amountRequested
|
True
|
double
|
在
processApplicRespType 中添加本地元素:
- 在 Palette 的 XML Components 部分中,选择 Element 图标并将所选内容拖动到模式设计区域的
processApplicRespType 节点上面。
IDE 将添加一个标签为
newElement 的元素节点。
- 在模式设计区域中,选择
newElement 节点。
- 在 Properties 窗口中,选择
Name 属性的值字段使它变为可编辑状态,然后键入
return。
- 在 Projects 窗口的
Definition 属性中,单击 ellipsis 按钮。
此时将打开 Definition 对话框。
- 在列表中,展开
Built-in Types 节点,然后选择
string 节点。
- 单击 OK 按钮。
将所有本地元素添加到复杂类型中之后,Design 视图应类似于以下界面:
添加全局元素:
- 在 Palette 的 XML Components 部分中,选择 Element 图标并将所选内容拖动到设计区域中 Elements 节点的正下方。
IDE 将在模式设计区域的
Elements 节点下面添加一个
newElement 组件。
- 在 Design 视图的模式设计区域中,选择
newElement 节点。
- 在 Properties 窗口中,选择
Name 属性的值字段使它变为可编辑状态,然后键入
processApplicElement。
- 在 Projects 窗口的
Definition 属性中,单击 ellipsis 按钮。
此时将打开 Definition 对话框(Element 的定义)。
- 在列表中,展开
Complex Types 节点,然后选择
processApplicType 复杂类型节点。
- 单击 OK 按钮。
- 重复步骤 1 到 6,再添加一个名称为
processApplicRespElement 的全局元素,并选择
processApplicRespType 复杂类型作为定义。
- 要保存修改,在 Projects 窗口中,选择
LoanRequestor 项目节点,并从主菜单中选择 File > Save All 选项。
创建 WSDL 文档
在本节中,我们将在 BPEL 模块项目中添加一个 WSDL 文件,然后再配置 WSDL 文档的组件。
创建
LoanRequestor.wsdl:
- 在 Projects 窗口中,展开
LoanRequestor 项目节点,然后右键单击
Process Files 节点并选择 New > WSDL Document 选项。
此时将打开 New WSDL Document 向导。
- 在 Name and Location 页面中,执行以下执行:
- 在 File Name 字段中,输入
LoanRequestor。
- 选中 Import XML Schema File(s) 复选框。
- 在 XML Schema(s) 字段中,单击 Browse 按钮。
此时将打开 Add Import 对话框。该对话框将显示可以导入的 XML 模式。
- 展开
By File >
LoanRequestor >
Process Files 节点,然后选择
LoanRequestor.xsd。
确保在 Import 列中选中
LoanRequestor.xsd 行的复选框。
- 单击 OK 按钮。
- 在 New WSDL Document 向导中,单击 Next 按钮。
此时将打开 Abstract Configuration 页面。
- 在 Abstract Configuration 页面的 Input 区域中,执行以下执行:
- 在 Message Part Name 列中,双击默认值使该字段变为可编辑状态。
- 键入
requestLoanMessage 并按下回车键。
- 在 Element Or Type 列中,单击 ellipsis 按钮。
此时将打开 Select Element Or Type 对话框。
- 展开
By File >
LoanRequestor >
src/LoanRequestor.xsd >
Elements 节点。
注意: 您可能需要滑动到 Select Element Or Type 对话框中列表的顶部才能看到
By File 节点。
- 在
Elements 节点下面,选择
processApplicElement 节点,然后单击 OK 按钮。
- 在 Abstract Configuration 页面的 Output 区域中,执行以下执行:
- 在 Message Part Name 列中,双击默认值使该字段变为可编辑状态。
- 键入
responsePart 并按下回车键。
- 在 Element Or Type 列中,单击 ellipsis 按钮。
此时将打开 Select Element Or Type 对话框。
- 展开
By File >
LoanRequestor >
src/LoanRequestor.xsd >
Elements 节点。
注意: 您可能需要滑动到 Select Element Or Type 对话框中列表的顶部才能看到
By File 节点。
- 在
Elements 节点下面,选择
processApplicRespElement 节点,然后单击 OK 按钮。
完成的 Abstract Configuration 页面应类似于下图。
- 单击 Finish 按钮。
在 Projects 窗口中,
Process Files 节点已经含有一个标签为
LoanRequestor.wsdl 的子节点。Source Editor 中含有一个 WSDL 文件的选项卡,即
LoanRequestor.wsdl。其中打开了 WSDL 视图。
打开和部署伙伴 Web 服务
贷款应用程序将通过它们的公开接口与其伙伴服务进行通信。这些接口定义在特定于伙伴的 WSDL 文件中。
在本节中,我们将使用一个名称为
LoanProcessor 的 J2EE 项目。我们可以按照
创建 EJB 模块项目 中的步骤从头开始创建此项目,或者也可以从
loanprocessing-loanprocessor.zip
下载经过压缩的项目文件。
LoanRequestor 项目含有伙伴服务的一个非常基础的 EJB 实现。
伙伴 Web 服务必须部署到 IDE 附带的 GlassFish 服务器中,然后才能够测试运行
LoanRequestorCompositeApp。
该实现只用于充当贷款服务(Loan Service)流程的测试工具。
打开
LoanProcessor 项目:
- 下载
loanprocessing-loanprocessor.zip
文件,然后将它解压到 IDE 的工具目录中。
这样将创建一个
LoanProcessor 目录。
- 从主菜单中,选择 File > Open Project 选项。
此时将打开 New Project 向导。
- 导航到解压项目的目录,选择
LoanProcessor 项目,然后单击 Open Project Folder 按钮。
此时将出现一个进度对话框,然后项目将出现在 Projects 窗口中。
部署
LoanProcessor 项目:
- 右键单击
LoanProcessor 项目节点,然后选择 Undeploy and Deploy 选项。
- 等待
BUILD SUCCESSFUL 消息出现在 Output 窗口中。
- 要验证
LoanProcessor 企业应用程序是否成功部署,需要切换到 Services 窗口。
- 在 Services 窗口中,展开
Servers >
GlassFish Application Server >
Applications >
EJB Modules 节点。
已经添加了一个
LoanProcessor 节点。如果该节点未出现,则表示部署失败。
创建 BPEL 流程
创建
LoanRequestor.bpel:
- 在 Projects 窗口中,展开
LoanRequestor 项目节点,然后右键单击
Process Files 节点并选择 New > BPEL Process 选项。
此时将打开 New BPEL Process 向导。
- 在 File Name 字段中,输入
LoanRequestor。
- 单击 Finish 按钮。
在 Projects 窗口中,
Process Files 节点已经含有一个标签为
LoanRequestor.bpel 的子节点。
Source Editor 中含有一个 BPEL 流程的选项卡,即
LoanRequestor.bpel。其中打开了 BPEL Designer 的 Design 视图。
添加伙伴链接:
- 在 Projects 窗口中,展开
LoanRequestor 项目节点,然后展开
Process Files 节点并选择
LoanRequestor.wsdl 节点。
- 将所选内容(
LoanRequestor.wsdl)从 Projects 窗口拖动 Design 视图中。
此时将打开 Create New Partner Link 对话框。
- 将 Name 字段中的值修改为
BpelImplementation。
- 接受其他默认值(WSDL File =
/LoanRequestor.wsdl,使用所选中的 Existing Partner Link Type 单选按钮),然后单击 OK 按钮。
- 在 Projects 窗口中,展开
LoanProcessor EJB Module 项目节点,然后展开
Web Services 节点并选择
LoanProcessor Web 服务节点。
- 将所选内容(
LoanProcessor Web 服务节点)从 Projects 窗口拖动 Design 视图中。
此时将打开 Create New Partner Link 对话框。
- 将 Name 字段中的值修改为
EjbImplementation。
- 接受其他默认值(WSDL File =
/Partners/LoanProcessor/LoanProcessor.wsdl,使用所选中的 Newly Created Partner Link Type 单选按钮),然
后单击 OK 按钮。
注意到,IDE 已经在
LoanRequestor >
Process Files 节点下面添加了一个
Partners 文件夹。
- 展开
Partners 节点。
注意到,该文件夹中的
LoanProcessor 节点含有
LoanProcessor.wsdl、
LoanProcessorWrapper.wsdl 和
LoanProcessor_xsd_1.xsd。
添加接收活动:
- 在 Palette 的 Web Service 部分中,选择 Receive 图标并将所选内容拖动到设计区域中 Process Start 活动与 Process End 活动中间。
IDE 将为用户提供可视化提示,用户可根据提示放下所选内容。
该操作将在 Design 视图中放置一个名称为
Receive1 的接收活动。
- 双击
Receive1 活动。
此时将打开 Receive1 [Receive] Property Editor。
- 将 Name 字段中的值修改为
ReceiveFromCustomer。
- 从 Partner Link 下拉列表中,选择 BpelImplementation 选项。
IDE 将在 Operation 字段中填入
LoanRequestorOperation。
- 单击 Input Variable 字段旁边的 Create 按钮,在 New Input Variable 对话框中,接受默认值并单击 OK 按钮。
这将创建一个名称为
LoanRequestorOperationIn 的新输入变量。
- 单击 OK 按钮关闭 Receive1 [Receive] - Property Editor。
现在,接收活动在 Design 视图的标签为
ReceiveFromCustomer,并且
BpelImplementation 伙伴链接与
LoanRequestor 流程中的接收活动之间显示了一条连接。
添加调用活动:
- 在 Palette 的 Web Service 部分中,选择 Invoke 图标并将所选内容拖动到设计区域中
ReceiveFromCustomer 活动的下方。
IDE 将为用户提供可视化提示,用户可根据提示放下所选内容。
该操作将在 Design 视图中放置一个名称为
Invoke1 的调用活动。
- 双击
Invoke1 活动。
此时将打开 Invoke1 [Invoke] - Property Editor。
- 将 Name 字段中的值修改为
InvokeLoanProcessorEJB。
- 从 Partner 下拉列表中,选择 BpelImplementation 选项。
IDE 将在 Operation 字段中填入
processApplicOperation。
- 单击 Input Variable 字段旁边的 Create 按钮,在 New Input Variable 对话框中,接受默认值并单击 OK 按钮。
这将创建一个名称为
ProcessApplicOperationIn 的新输入变量。
- 单击 Output Variable 字段旁边的 Create 按钮,在 New Output Variable 对话框中,接受默认值并单击 OK 按钮。
这将创建一个名称为
ProcessApplicOperationOut 的新输出变量。
- 单击 OK 按钮关闭 Invoke1 [Invoke] - Property Editor。
现在,调用活动在 Design 视图中的标签为
InvokeLoanProcessorEJB,并且
LoanRequestor 流程中的调用活动与
EjbImplementation 伙伴链接之间显示了一条连接。
添加回复活动:
- 在 Palette 的 Web Service 部分中,选择 Reply 图标并将所选内容拖动到设计区域中
InvokeLoanProcessorEJB 活动的下方。
IDE 将为用户提供可视化提示,用户可根据提示放下所选内容。
该操作将在 Design 视图中放置一个名称为
Reply1 的回复活动。
- 双击
Reply1 活动。
此时将打开 Reply1 [Reply] - Property Editor。
- 将 Name 字段中的值修改为
ReplyToCustomer。
- 从 Partner Link 下拉列表中,选择 BpelImplementation 选项。
IDE 将在 Operation 字段中填入
LoanRequestorOperation。
- 确保选中了 Normal Response 单选按钮。
- 单击 Output Variable 字段旁边的 Create 按钮,在 New Output Variable 对话框中,接受默认值并单击 OK 按钮。
这将创建一个名称为
LoanRequestorOperationOut 的新输出变量。
- 单击 OK 按钮关闭 Reply1 [Reply] - Property Editor。
该操作将在 Design 视图中放置一个名称为
ReplyToCustomer 的回复活动。
添加
CopyCustomerInfo 指派活动:
- 在 Palette 的 Basic Activities 部分中,选择 Assign 图标并将所选内容拖动到设计区域中
ReceiveFromCustomer 活动与
InvokeLoanProcessorEJB 活动中间。
IDE 将为用户提供可视化提示,用户可根据提示放下所选内容。
该操作将在 Design 视图中放置一个名称为
Assign1 的指派活动。
- 如果 Properties 窗口不可见,则从主菜单中选择 Window > Properties 选项。
- 在 Design 视图中,选择
Assign1 活动。
- 在 Properties 窗口中,将
Name 属性修改为
CopyCustomerInfo。
- 如果 BPEL Mapper 窗口不可见,则从主菜单中选择 Window > Other > BPEL Mapper 选项。
如果 BPEL Mapper 未包含
CopyCustomerInfo 信息,则在 Design 视图中选择
LoanRequestor 流程方框,然后选择
CopyCustomerInfo 指派活动。这样可以刷新 BPEL Mapper 中的信息。
- 在 BPEL Mapper 的源面板(左侧面板)中,展开
Variables 节点下面的
LoanRequestorOperationIn 和
requestLoanMessage 节点。
先前在模式中创建的
processApplicType 复杂类型中的每个本地元素都有一个相应的节点。
- 在 BPEL Mapper 的目标面板(右侧面板)中,展开
Variables 节点下面的
ProcessApplicOperationIn 和
parameters 节点。
parameters 节点下面也显示了相同的模式元素节点。
- 将源面板中的
socialSecurityNumber 拖动到目标面板中的
socialSecurityNumber 节点上。
- 针对以下变量重复步骤 8:
applicantName、
applicantAddress、
applicantEmailAddress、
applicantAge、
applicantGender、
annualSalary 和
amountRequested。
- 要保存修改,在 Projects 窗口中,选择
LoanRequestor 项目节点,并从主菜单中选择 File > Save All 选项。
添加
CopyLoanStatus 指派活动:
- 在 Palette 的 Basic Activities 部分中,选择 Assign 图标并将所选内容拖动到设计区域中
InvokeLoanProcessorEJB 活动与
ReplyToCustomer 活动中间。
该操作将在 Design 视图中放置一个名称为
Assign1 的指派活动。
- 选择
Assign1 活动。
- 在 Properties 窗口中,将
Name 属性的值修改为
CopyLoanStatus。
- 如果 BPEL Mapper 窗口不可见,则从主菜单中选择 Window > Other > BPEL Mapper 选项。
- 在 BPEL Mapper 的源面板中,展开
Variables 节点下面的
ProcessApplicOperationOut 和
parameters 节点。
parameters 下面将出现一个
return 节点。
- 在 BPEL Mapper 的目标面板中,展开
Variables 节点下面的
LoanRequestorOperationOut 和
responsePart 节点。
responsePart 下面将出现一个 return
节点。
-
将源面板中的 return 拖动到 BPEL Mapper 目标面板中的
return 节点上。
-
要保存修改,在 Projects 窗口中,选择 LoanRequestor 项目节点,并从主菜单中选择 File > Save All 选项。
编译 BPEL 模块项目
编译
LoanRequestor 项目:
-
在 Projects 窗口中,右键单击 LoanRequestor 项目节点并选择 Clean and Build Project 选项。
如果
BUILD SUCCESSFUL 消息出现在 Output 窗口中,则表示编译成功。
创建复合应用程序项目
在部署 BPEL Module 项目之前,我们需要创建一个复合应用程序。部署项目将使应用服务器可以使用服务组装功能,从而允许服务单元运行。
创建复合应用程序项目:
-
从主菜单中,选择 File > New Project 选项。
此时将打开 New Project 向导。
-
在 Categories 列表中,选择 SOA 节点。
-
在 Projects 列表中,选择 Composite Application 节点。
-
单击 Next 按钮。
-
在 Project Name 字段中,输入 LoanRequestorCompositeApp。
-
单击 Finish 按钮。
现在,Projects 窗口中已经含有一个复合应用程序项目节点,其名称为 LoanRequestor。
使用复合应用程序(服务组装)编辑器
在本节中,我们将使用复合应用程序(服务组装)编辑器修改项目配置和构建 BPEL Module 项目。然后,我们将添加一个 WSDL 端点和连接,再验证和修改自动生成的 WSDL 端点的属性。<
/tt>
使用复合应用程序(服务组装)编辑器修改项目配置和构建 BPEL Module 项目。
-
在 Projects 窗口中,选择 LoanRequestorCompositeApp 项目节点并从弹出菜单中选择 Edit Application Configuration
选项。
IDE 将在复合应用程序(服务组装)编辑器中打开
.casa 文件。该编辑器 Design 视图的设计区域由三部分组成:WSDL Ports、JBI Modules 和 External Modules。
-
在 Projects 窗口中,选择 LoanRequestor 项目节点,并将所选内容拖动到
LoanRequestorCompositeApp.casa 文件 Design 视图的 JBI Modules 区域中。
-
在编辑器工具栏中,单击 Build Project 按钮
编译 LoanRequestor BPEL
Module 项目。
完成此步骤后:
-
状态栏消息将显示以下内容:
Finished building build.xml (jbi-build).
-
Output 窗口应类似于下图。
-
LoanRequestorCompositeApp.casa 文件的 Design 视图应类似于下图。
创建 WSDL 端点:
-
在 Palette 的 WSDL Bindings 部分,选择肥皂图标。
-
将所选内容拖动到 LoanRequestorCompositeApp.casa 文件 Design 视图的 WSDL Ports 区域中。
IDE 将添加一个标签为
casaPort1 的 WSDL 端口。
创建连接:
-
在 Design 视图的 casaPort1 端口中,单击使用端点图标
。
选择端点后,图标的颜色将发生修改:
。
-
将所选内容拖动到 JBI Modules 区域 (BPEL) LoanRequestor 框中的
LoanRequestorPortTypeRole_myRole 上。
IDE 将创建一个新连接。
部署和测试复合应用程序
要增强复合应用程序的功能,我们可以添加一些测试用例并绑定到操作,然后提供输入并使用测试程序。
部署复合应用程序:
-
右键单击 LoanRequestorCompositeApp 项目节点,然后选择 Deploy Project 选项。
如果
BUILD SUCCESSFUL 消息出现在 Output 窗口中,则表示部署成功。
为通过批准的请求添加测试用例:
-
在 Projects 窗口中,展开 LoanRequestorCompositeApp 项目节点,右键单击
Test 节点并从弹出菜单中选择 New Test Case 选项。
此时将打开 New Test Case 向导。
-
在 Test Case Name 字段中,输入 ApprovedTestCase 并单击 Next 按钮。
-
在 Select the WSDL Document 页面中,展开 LoanRequestorCompositeApp - Process Files 节点,选择
LoanRequestorCompositeApp.wsdl 并单击 Next 按钮。
-
在 Select the Operation to Test 页面中,选择 LoanRequestorOperation 并单击 Finish 按钮。
在 Projects 窗口中,IDE 已经在
Test 节点下面添加了一个新节点,其名称为
ApprovedTestCase。该节点含有两个子节点:
Input 和
Output。Source Editor 中含有一个输入文件的选项卡,即
LoanRequestor.wsdl。
注意: 如果 Source Editor 未包含一个 Input.xml 选项卡,则在 Projects 窗口中双击
Input 节点打开该文件。
-
在 Input.xml 文件的 Source Editor 选项卡中,定义各个变量的值。方法是将以下代码行:
<loan:socialSecurityNumber>?string?</loan:socialSecurityNumber>
<loan:applicantName>?string?</loan:applicantName>
<loan:applicantAddress>?string?</loan:applicantAddress>
<loan:applicantEmailAddress>?string?</loan:applicantEmailAddress>
<loan:applicantAge>?3?</loan:applicantAge>
<loan:applicantGender>?string?</loan:applicantGender>
<loan:annualSalary>?1.051732E7?</loan:annualSalary>
<loan:amountRequested>?1.051732E7?</loan:amountRequested>
替换为以下代码行:
<loan:socialSecurityNumber>111-11-1111</loan:socialSecurityNumber>
<loan:applicantName>May JavaOne</loan:applicantName>
<loan:applicantAddress>1601 Willow Road, Menlo Park, CA
94025</loan:applicantAddress>
<loan:applicantEmailAddress>mayj12007@gmail.com</loan:applicantEmailAddress>
<loan:applicantAge>36</loan:applicantAge>
<loan:applicantGender>female</loan:applicantGender>
<loan:annualSalary>100000</loan:annualSalary>
<loan:amountRequested>1000000</loan:amountRequested>
-
从主菜单中,选择 File > Save All 选项。
-
选择 Input.xml 文件的 Source Editor 选项卡。
为被拒绝的请求添加测试用例:
-
在 Projects 窗口中,展开 LoanRequestorCompositeApp 项目节点,右键单击
Test 节点并从弹出菜单中选择 New Test Case 选项。
此时将打开 New Test Case 向导。
-
在 Test Case Name 字段中,输入 RejectedTestCase 并单击 Next 按钮。
-
在 Select the WSDL Document 页面中,展开 LoanRequestorCompositeApp - Process Files 节点,选择
LoanRequestorCompositeApp.wsdl 并单击 Next 按钮。
-
在 Select the Operation to Test 页面中,选择 LoanRequestorOperation 并单击 Finish 按钮。
在 Projects 窗口中,IDE 已经在
Test 节点下面添加了一个新节点,其名称为
RejectedTestCase。该节点含有两个子节点:
Input 和
Output。Source Editor 中含有一个输入文件的选项卡,即
LoanRequestor.wsdl。
注意: 如果 Source Editor 未包含一个 Input.xml 选项卡,则在 Projects 窗口中双击
Input 节点打开该文件。
-
在 Input.xml 文件的 Source Editor 选项卡中,定义各个变量的值。方法是将以下代码行:
<loan:socialSecurityNumber>?string?</loan:socialSecurityNumber>
<loan:applicantName>?string?</loan:applicantName>
<loan:applicantAddress>?string?</loan:applicantAddress>
<loan:applicantEmailAddress>?string?</loan:applicantEmailAddress>
<loan:applicantAge>?3?</loan:applicantAge>
<loan:applicantGender>?string?</loan:applicantGender>
<loan:annualSalary>?1.051732E7?</loan:annualSalary>
<loan:amountRequested>?1.051732E7?</loan:amountRequested>
替换为以下代码行:
<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:applicantGender>male</loan:applicantGender>
<loan:annualSalary>100000</loan:annualSalary>
<loan:amountRequested>1000000</loan:amountRequested>
-
从主菜单中,选择 File > Save All 选项。
-
选择 Input.xml 文件的 Source Editor 选项卡。
使用
ApprovedTestCase 的基准信息填充测试文件:
-
在 Projects 窗口中,双击 ApprovedTestCase 下面的
Output 节点,以检查该文件的内容。
我们发现,
Output.xml 文件最初是空的。
-
在 Projects 窗口中,右键单击 ApprovedTestCase 节点并从弹出菜单中选择 Run 选项。
注意: 第一次运行的是一个特殊用例,因为
Output.xml 文件为空并且 IDE 无法将测试结果与
Output.xml 文件中的内容进行比较。注意 Output 窗口中的失败消息。
此时将打开 Overwrite Empty Output? 对话框。
-
单击 Yes 按钮。
IDE 将使用默认信息填充 Output.xml 文件。现在,此版本的文件已含有运行后续测试所需的基准信息。这种版本的文件也称作“金色”文件。
使用
RejectedTestCase 的基准信息填充测试文件:
-
在 Projects 窗口中,双击 RejectedTestCase 下面的
Output 节点,以检查该文件的内容。
我们发现,
Output.xml 文件最初是空的。
-
在 Projects 窗口中,右键单击 RejectedTestCase 节点并从弹出菜单中选择 Run 选项。
注意: 第一次运行的是一个特殊用例,因为
Output.xml 文件为空并且 IDE 无法将测试结果与
Output.xml 文件中的内容进行比较。注意 Output 窗口中的失败消息。
此时将打开 Overwrite Empty Output? 对话框。
-
单击 Yes 按钮。
IDE 将使用默认信息填充 Output.xml 文件。现在,此版本的文件已含有运行后续测试所需的基准信息。这种版本的文件也称作“金色”文件。
运行测试:
-
在 Projects 窗口中,右键单击 ApprovedTestCase 节点并从弹出菜单中选择 Run 选项。
注意,
Output.xml 文件的内容已保存并且未被新结果重写。可以双击表示通过测试的节点(
Output 节点的正下方)来查看结果。
-
在 Projects 窗口中,右键单击 RejectedTestCase 节点并从弹出菜单中选择 Run 选项。
注意,
Output.xml 文件的内容已保存并且未被新结果重写。可以双击表示通过测试的节点(
Output 节点的正下方)来查看结果。
-
在 Source Editor 中,关闭所有文档。
(可选)创建 EJB 模块项目
在本节中,我们将使用一个名称为 LoanProcessor 的 J2EE 项目。我们可以按照本节中的步骤从头开始创建此项目,或者也可以从
loanprocessing-loanprocessor.zip
下载经过压缩的项目文件。
创建 EJB Module 项目:
-
从主菜单中,选择 File > New Project 选项。
-
在 Categories 列表中,选择 Enterprise 节点;并在 Projects 列表中,选择
EJB Module 节点。
-
单击 Next 按钮。
-
在 Project Name 字段中,输入 LoanProcessor。
-
(可选)在 Project Location 字段中,使用 Browse 按钮导航到 IDE 将要存储 EJB 项目文件的位置并选择它。
-
单击 Finish 按钮。
现在,Projects 窗口中已经含有一个 EJB Module 项目节点,其名称为 LoanProcessor。
创建 Web 服务:
-
在 Projects 窗口中,右键单击 LoanProcessor 项目节点并从弹出菜单中选择 New > Web Service 选项。
此时将打开 New Web Service 向导。
-
在 New Web Service 向导中,执行以下执行:
-
在 Name and Location 页面的 Web Service Name 字段中,输入 LoanProcessor。
-
在 Package 字段中,输入 com.sun.loanprocessor。
-
单击 Finish 按钮。
IDE 将创建一个 Web 服务并在 Source Editor 中打开 LoanProcessor。
-
在 Projects 窗口中,展开 LoanProcessor 项目节点,然后再展开
Web Services 节点。
-
右键单击 LoanProcessor 项目节点(Web 服务),然后选择 Add Operation 选项。
此时将打开 Add Operation 对话框。
-
在 Name 字段中,输入 processApplicOperation。
-
在 Parameters 选项卡中,添加下面这七个参数。方法是单击 Add 按钮并完成 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
|
-
在 Add Operation 对话框中,单击 OK 按钮。
-
在 Source Editor 中,单击 Source 按钮打开 LoanProcessor.java 文件的 Source 视图。
注意到,IDE 已经使用更新
LoanProcessor.java 文件,其中含有
processApplicOperation 方法的框架。
-
在 Source Editor 中,将以下代码
/*
* TODO write your implementation code here:
*/
return null;
替换为以下代码:
int MINIMUM_AGE_LIMIT = 18;
int MAXIMUM_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 result;
}
// Check age of applicant
// If more than max age limit, rejected
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;
}
// Check annual salary
// If less than min salary, rejected
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;
}
// 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 result;
}
System.out.println(result);
return result;
-
要保存修改,从主菜单中选择 File > Save 选项。
-
(可选)在 Source Editor 中关闭 LoanProcessor 选项卡。
-
返回
打开和部署伙伴 Web 服务。