corner imagecorner image
FeaturesPluginsDocs & SupportCommunityPartners

创建一个贷款处理复合应用程序

本教程将简要介绍如何创建一个简单的贷款处理复杂应用程序,并且将演示如何部署、执行和测试复杂应用程序(Composite Application)。

业务用例

贷款处理复合应用程序需要满足以下业务用例,如 图 1 所示:

  • 要申请贷款,用户需要填写一份贷款请求,其中包括个人身份、请求贷款总额和信用历史等信息。
  • 接收到贷款请求后,系统将通过一个已有数据库验证用户提供的个人信息,然后根据其个人信息和申请额度批准或拒绝贷款。
  • 完成一些特定的手续之后,系统将以批准函的形式生成一个报告并将其发送给用户,以确认贷款批准。
  • 如果贷款由于某种原因被拒绝,则生成一个显示拒绝原因的报告,并发送给用户。

图 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 应用服务器,请执行以下操作:

  1. 如果 “服务” 窗口不可见,请选择 “窗口” > “服务” 选项。
  2. 在 “服务” 窗口中,展开 Servers 节点。
    Servers 节点中应该包含一个 GlassFish V2 子节点。如果未出现 GlassFish Application Server 节点,请阅读 配置 GlassFish 应用服务器 这篇文章。

    在“服务” 窗口中,展开 GlassFish V2 节点


  3. 右键单击 GlassFish V2 节点并选择“ 启动”选项。

    “ 输出 ” 窗口将显示关于应用程序启动的日志信息。如果“输出” 窗口不可见,请选择 “窗口” >“输出” > “输出” 选项。
    如果“输出”窗口显示Application server startup complete消息,表明应用服务器已经启动并开始运行。

    注意:如果 GlassFish Application Server 节点上有绿色箭头标志,表明服务器正在运行。

    您知道吗:当将应用程序部署到 GlassFish 应用服务器时,同时自动启动了GlassFish 应用服务器。这样,就不需要手动启动 GlassFish 应用服务器。

要选择另一个应用服务器,请执行以下操作:

以下步骤将介绍如何使用 GlassFishV2 应用服务器的另一个版本来配置 NetBean 6.1 IDE 。假定您已经下载并安装了另一个版本的应用服务器。

  1. 在 “服务” 窗口中,右键单击 Servers 节点并从弹出菜单中选择 “添加服务器 ” 选项。
    此时将打开 “添加服务器实例” 对话框。
  2. 在“选择服务器”页面中,从 Server 下拉列表中选择 GlassFish V2 选项。
  3. 单击 “下一步” 按钮。
    此时将打开 “平台文件夹位置” 页面。
  4. 在 “平台位置” 字段中,使用 “浏览” 按钮导航到应用服务器的安装位置并选择它。

    如果将 GlassFish 应用服务器安装在默认位置,那么可以使用 表 1 作为查找安装位置的指南。否则,导航到 GlassFish V2 应用服务器的安装位置。

    表 1:应用服务器的默认安装目录

    平台 所属用户组 SOA 安装 工具包安装
    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
  5. 选中 “注册本地默认域” 单选按钮,然后单击 “下一步” 按钮。
  6. 输入域管理员的用户名和密码。
    如果在安装时使用了默认值,则用户名和密码分别为 adminadminadmin
  7. 单击 “完成” 按钮。

创建 BPEL 模块项目

在本节中,我们将创建一个 BPEL 模块项目 LoanRequestor

要创建 LoanRequestor 项目,请执行以下操作:

  1. 在 NetBeans 菜单中,单击 “文件” > “新建项目”
    此时将打开“新建项目 ”向导。
  2. 在 “类别” 列表中,选择 SOA 节点;并在 “项目” 列表中,选择 BPEL Module 节点。
  3. 单击 “下一步” 按钮。
  4. 在 “项目名称”中,输入 LoanRequestor
  5. (可选)在“项目位置”字段中,使用“浏览”按钮导航到 IDE 将要存储项目文件的位置并选择它。
  6. 单击 “完成” 按钮。
    现在,“项目”窗口中已经包含一个 BPEL 模块项目节点,其名称为 LoanRequestor

返回顶部

创建 XML 模式

在本节中,我们将在 BPEL 模块项目中添加一个新 XML 模式,然后再在模式中添加一些 XML 模式组件。

要创建 LoanRequestor.xsd,请执行以下操作:

  1. 在“项目”窗口中,展开 LoanRequestor 项目节点,然后右键单击 Process Files 节点并选择“新建”> “其他”选项。
    此时将打开“新建文件”向导。
  2. 在 “新建文件” 向导中,执行以下操作:
    1. 在“选择文件类型”页面的“类别”列表中,选择 XML 节点,然后在“文件类型” 列表中,选择 XML Schema 节点。单击 “下一步” 按钮。
    2. 在“文件名称”中,输入 LoanRequestor
    3. 单击 “完成” 按钮。
    在“项目”窗口中,Process Files 节点现在包含一个标签为 LoanRequestor.xsd 的子节点。源编辑器中包含一个 XML 模式文件的选项卡,即 LoanRequestor.xsd,同时打开了“模式”视图。

  3. 在 “模式 ” 视图中,单击 “设计” 按钮打开 XML 模式编辑器的 “设计” 视图。

    图片显示:在 XML 模式编辑器的“设计”视图中打开新模式文件

要在 XML 模式中添加复杂类型,请执行以下操作:

  1. 在“设计”视图的“组件面板”中,展开 “XML 模式组件”区域并选择 “复杂类型” 图标。
    如果“组件面板”窗口不可见,则从主菜单中选择 “窗口” >“服务”选项。
  2. 将所选内容拖到模式设计区域 Complex Types 节点下。
    IDE 将添加一个 Complex Type 节点,并且将选中复杂类型(newComplexType)的名称供用户修改。
  3. 在新节点中键入 processApplicType 并按下回车键。
    现在,“设计” 区域中将显示刚才创建的新复杂类型,其名称为 processApplicType
  4. 重复步骤 1 到 3,再创建一个名称为 processApplicType 的复杂类型。

    在源编辑器模式设计区域的 XML 模式中添加复杂类型

要在 processApplicType 中添加本地元素,请执行以下操作:

  1. 在 “组件面板”的 “XML 组件”区域,选择 “元素” 图标并将所选内容拖动到模式设计区域的 processApplicType 节点。
    IDE 将添加一个标签为 newElement 的元素节点。
  2. 如果“属性”窗口不可见,则选择 “窗口” >“属性”选项。
  3. 在模式设计区域中,选择 newElement 节点。
  4. 在“属性”窗口中,选择 Name 属性的值字段使它变为可编辑状态,然后键入 socialSecurityNumber
  5. 在 “属性” 窗口中,将 Nillable 属性的值字段设置为 True
  6. 在“属性”窗口的 Definition 属性中,单击省略号按钮。
    此时将打开“定义”对话框。
  7. 在列表中,展开 Built-in Types 节点,选择 string 节点,然后单击 “确定” 按钮。
  8. 重复步骤 1 到 7,添加以下元素 中:

    名称 Nillable 定义
    applicantName True string
    applicantAddress True string
    applicantEmailAddress True string
    applicantAge True int
    applicantGender True string
    annualSalary True double
    amountRequested True double

要在 processApplicRespType 中添加本地元素,请执行以下操作:

  1. 在“组件面板”的 “XML 组件”区域中,选择 “组件”图标并将所选内容拖动到模式设计区域的 processApplicRespType 节点。
    IDE 将添加一个标签为 newElement 的元素节点。
  2. 在模式设计区域中,选择 newElement 节点。
  3. 在“属性”窗口中,选择 Name 属性的值字段使它变为可编辑状态,然后键入 return
  4. 在“属性”窗口的 Definition 属性中,单击省略号按钮。
    此时将打开“定义”对话框。
  5. 在列表中,展开 Built-in Types 节点,然后选择 string 节点。
  6. 单击“确定”按钮。
    将所有本地元素添加到复杂类型中之后,“设计”视图界面如下所示:

    将本地元素添加到源编辑器模式设计区域的复杂类型中

要添加全局元素,请执行以下操作:

  1. 在“组件面板”的 “XML 组件”区域,选择 “元素” 图标并将所选内容拖动到设计区域中 Elements 节点的正下方。
    IDE 将在模式设计区域的 Elements 节点下面添加一个 newElement 组件。
  2. 在 “设计”视图的模式设计区域中,选择 newElement 节点。
  3. 在“属性”窗口中,选择 Name 属性的值字段使它变为可编辑状态,然后键入 processApplicElement
  4. 在“属性”窗口的 Definition 属性中,单击省略号按钮。
    此时将打开“定义”对话框(元素定义)。
  5. 在列表中,展开 Complex Types 节点,然后选择 processApplicType 复杂类型节点。
  6. 单击“确定”按钮。
  7. 重复步骤 1 到 6,再添加一个名称为 processApplicRespElement 的全局元素,并选择 processApplicRespType 复杂类型作为定义。

    在源编辑器的XML模式中添加全局元素

  8. 要保存修改,在 “属性” 窗口中,选择 LoanRequestor 项目节点,并从主菜单中选择 “文件” > “保存所有文件” 选项。

返回顶部

创建 WSDL 文档

在本节中,我们将在 BPEL 模块项目中添加一个 WSDL 文件,然后再配置 WSDL 文档的组件。

要创建 LoanRequestor.wsdl,请执行以下操作:

  1. 在“项目”窗口中,展开 LoanRequestor 项目节点,然后右键单击 Process Files 节点并选择“新建” > “WSDL 文档”选项。
    此时将打开 “新建 WSDL 文档 ” 向导。
  2. 在“ 名称和位置”页面中,执行以下操作:
    1. 在 “文件名称”中,输入 LoanRequestor
    2. 选中 “导入 XML 模式文件” 复选框。
    3. 在“XML 模式”字段,单击 “浏览” 按钮。
      此时将打开“添加导入” 对话框。该对话框将显示可以导入的 XML 模式。
    4. 展开 By File > LoanRequestor > Process Files 节点,然后选择 LoanRequestor.xsd
      确保在“导入” 列中选中 LoanRequestor.xsd 复选框。

      在“新建 WSDL 文档”向导中,选中将要导入的 LoanRequestor.xsd 复选框

    5. 单击 “确认” 按钮。
    6. 在“新建 WSDL 文档”向导中,单击“下一步”按钮。
    此时将打开 “抽象配置” 页面。
  3. 在 “抽象配置” 页面的“输入”区域中,执行以下操作:
    1. 在 “消息部分名称” 栏中,双击默认值使该字段变为可编辑状态。
    2. 键入 requestLoanMessage 并按下回车键。
    3. 在“元素或类型”栏中,单击省略号按钮。
      此时将打开 “选择元素或类型” 对话框。
    4. 展开 By File > LoanRequestor > src/LoanRequestor.xsd > Elements 节点。

      注意:您可能需要滑动到“选择元素或类型”对话框中列表的顶部才能看到 By File节点。
    5. Elements 节点下面,选择 processApplicElement 节点,然后单击“确定”按钮。
  4. 在“抽象配置”页面的“输出”区域中,执行以下操作:
    1. 在“消息部分名称”栏中,双击默认值使该字段变为可编辑状态。
    2. 键入 responsePart 并按下回车键。
    3. 在“元素或类型”栏中,单击省略号按钮。
      此时将打开“选择元素或类型”对话框。
    4. 展开 By File > LoanRequestor > src/LoanRequestor.xsd > Elements 节点。

      注意:您可能需要滑动到“选择元素或类型”对话框中列表的顶部才能看到 By File 节点。
    5. Elements 节点下面,选择 processApplicRespElement 节点,然后单击 “确定” 按钮。
    完成后,“抽象配置” 页面如下图所示。

    “新建 WSDL 文档”向导中完成的 “抽象配置 ”页面单击查看大图

  5. 单击 “完成” 按钮。
    在“项目”窗口中,Process Files 节点已经包含一个标签为 LoanRequestor.wsdl 的子节点。源编辑器中包含一个 WSDL 文件的选项卡,即 LoanRequestor.wsdl,同时打开了 “WSDL” 视图。

    在 IDE 中的 LoanRequestor WSDL 文档单击查看大图

返回顶部

打开和部署合作伙伴 Web 服务

贷款应用程序将通过它们的公开接口与其合作伙伴服务进行通信。这些接口定义在特定合作伙伴的 WSDL 文件中。

在本节中,我们将使用 J2EE 项目LoanProcessor 。可以按照 创建 EJB 模块项目 中的步骤从头开始创建此项目,或者也可以从 loanprocessing-loanprocessor.zip 下载经过压缩的项目文件。LoanRequestor 项目包含合作伙伴服务的一个非常基础的 EJB 实现。
必须将合作伙伴 Web 服务部署到 IDE 附带的 GlassFish 服务器中,然后才能够测试运行 LoanRequestorCompositeApp

该实现只用于充当贷款服务(Loan Service)流程的测试工具。

要打开 LoanProcessor 项目,需执行以下操作:

  1. 下载 loanprocessing-loanprocessor.zip 文件,然后将它解压到 IDE 的工具目录中。
    这样将创建一个 LoanProcessor 目录。
  2. 从主菜单中,选择 “文件”>“打开项目”选项。
    此时将打开“新建项目”向导。
  3. 导航到解压项目的目录,选择 LoanProcessor 项目,然后单击 “打开项目文件夹” 按钮。
    此时将显示进度对话框,然后该项目将出现在 “项目” 窗口中。

要部署 LoanProcessor 项目,请执行以下操作:

  1. 右键单击 LoanProcessor 项目节点,然后选择 “取消部署和部署”选项。
  2. 等待,直到“输出”窗口中显示消息:BUILD SUCCESSFUL
  3. 要验证 LoanProcessor 企业应用程序是否成功部署,需要切换到“服务”窗口。
  4. 在“服务”窗口中,展开 Servers > GlassFish V2 > Applications > EJB Modules 节点。
    已经添加 LoanProcessor 节点。如果该节点未出现,表明部署失败。

返回顶部

创建 BPEL 流程

要创建 LoanRequestor.bpel,需执行以下操作:

  1. 在“项目”窗口中,展开 LoanRequestor 项目节点,然后右键单击 Process Files 节点并选择“新建”>“BPEL 流程”选项。
    此时将打开 “新建 BPEL流程” 向导。
  2. 在 “文件名称”中,输入 LoanRequestor
  3. 单击 “完成” 按钮。
    此时,在“项目”窗口中,Process Files 节点包含子节点 LoanRequestor.bpel
    源编辑器中包含一个 BPEL 流程选项卡,即 LoanRequestor.bpel,同时打开了 BPEL 设计器的 “设计” 视图。

    在 IDE 中的“新建 BPEL 流程”文件单击查看大图

要添加合作伙伴链接,请执行以下操作:

  1. 在“ 项目”窗口中,展开 LoanRequestor 项目节点,然后展开 Process Files 节点并选择 LoanRequestor.wsdl 节点。
  2. 将所选内容(LoanRequestor.wsdl)从 “项目”窗口拖动到“设计”视图中。IDE 将为您提供可视化的提示来告诉您选项的放置位置。
  3. 在 “LoanRequestor 属性” 中,将 “名称” 字段中的值修改为 BpelImplementation
  4. 使用其他默认值(WSDL File = /LoanRequestor.wsdl,使用选中的 “现有合作伙伴链接类型” 单选按钮),然后单击 “确定” 按钮。
  5. 在“项目”窗口中,展开 LoanProcessor EJB Module 项目节点,然后展开 Web Services 节点并选择 LoanProcessor Web 服务节点。
  6. 将所选内容(LoanProcessor Web 服务节点)从 “项目”窗口拖动“设计”视图中。IDE 将为您提供可视化提示告诉您选项的放置位置。
    此时将打开“新建合作伙伴链接” 对话框。
  7. 将“名称”字段的值修改为 EjbImplementation
  8. 使用其他默认值(WSDL File = /Partners/LoanProcessor/LoanProcessor.wsdl,使用所选中的 “新建合作伙伴链接类型”单选按钮),然后单击 “确认” 按钮。
    注意,IDE 已经在 LoanRequestor > Process Files 节点下面添加了一个 Partners 文件夹。
  9. 展开 Partners 节点。
    注意,该文件夹中的 LoanProcessor 节点包含 LoanProcessor.wsdlLoanProcessorWrapper.wsdlLoanProcessor_xsd_1.xsd

    在 BPEL 编辑器中添加 Partner 链接单击查看大图

要添加接收活动,请执行以下操作:

  1. 在“组件面板”的 “Web 服务”区域,选择“接收”图标并将所选内容拖动到“设计”区域中 Process Start 活动与 Process End 活动中间。
    IIDE 将为您提供可视化提示告诉您选项的放置位置。
    该操作将在“设计”视图中放置一个接收活动 Receive1
  2. 单击 Receive1 活动的 “编辑”按钮。
    此时将打开 “Receive1 [Receive] 属性编辑器”。
  3. 将“ 名称”字段的值修改为 ReceiveFromCustomer
  4. 从 “合作伙伴链接”下拉列表中,选择 BpelImplementation 选项。
    IDE 将在“操作”字段中填入 LoanRequestorOperation
  5. 单击“ 输入变量”字段旁边的“创建”按钮,在 “新输入变量” 对话框中,使用默认值并单击“确定”按钮。
    这将创建一个名称为 LoanRequestorOperationIn 的新输入变量。
  6. 单击“确定”按钮,关闭 “Receive1 [Receive] ——属性编辑器”。
    现在,在“设计”视图中,不仅包含接收活动 ReceiveFromCustomer ,还包含 BpelImplementation 合作伙伴链接与 LoanRequestor 流程中接收活动之间的一条连接。

    在 BPEL 编辑器中添加接收活动。单击查看大图

要添加调用活动,请执行以下操作:

  1. 在“组件面板”的“Web 服务”区域,选择“调用”图标并将所选内容拖动到“设计”区域中 ReceiveFromCustomer 活动的下方。
    IDE 为您提供可视化的提示来告诉您选项的放置位置。
    该操作将在 “设计”视图中放置一个调用活动 Invoke1
  2. 单击 Invoke1 活动的 “Edit”按钮。
    此时将打开 “Invoke1 [Invoke]——属性编辑器”。
  3. 将“名称”字段值修改为 InvokeLoanProcessorEJB
  4. 从“合作伙伴”下拉列表中,选择 EjbImplementation 选项。
    IDE 将在“操作”字段中填入 processApplicOperation
  5. 单击“输入变量”字段旁边的“创建”按钮,在 “新输入变量” 对话框中,使用默认值并单击“确定”按钮。
    这将创建一个名称为 ProcessApplicOperationIn 的新输入变量。
  6. 单击“输出变量 ”字段旁边的“创建”按钮,在 “新输出变量 ”对话框中,使用默认值并单击“确定”按钮。
    这将创建一个名称为 ProcessApplicOperationOut 的新输出变量。
  7. 单击“确定”按钮,关闭 “Invoke1 [Invoke]——属性编辑器”。
    现在,在 “设计”视图中不仅包含调用活动InvokeLoanProcessorEJB,还包含 LoanRequestor 流程中的调用活动与 EjbImplementation 合作伙伴链接之间的一条连接。

    在 BPEL 编辑器中添加调用活动

要添加回复活动,请执行以下操作:

  1. 在“组件面板”的“Web 服务”区域中,选择“回复”图标并将所选内容拖动到“设计”区域中 InvokeLoanProcessorEJB 活动的下方。
    IDE 将为您提供可视化的提示来告诉您选项的放置位置。
    该操作将在 “Design” 视图中放置了一个回复活动 Reply1
  2. 单击 Reply1 活动的 “编辑”按钮。
    此时将打开 “Reply1 [Reply] ——属性编辑器”。
  3. 将“名称”字段值修改为 ReplyToCustomer
  4. 在“合作伙伴”下拉列表中,选择 BpelImplementation 选项。
    IDE 将在“操作”字段中填入 LoanRequestorOperation
  5. 确保选中了“普通响应”单选按钮。
  6. 单击“输出”字段旁边的“创建”按钮,在 “新输出变量” 对话框中,使用默认值并单击“确认”按钮。
    这将创建一个名称为 LoanRequestorOperationOut 的新输出变量。
  7. 单击 “确定” 按钮,关闭 “Reply1 [Reply]——属性编辑器”。
    该操作将在“设计”视图中放置一个名称为 ReplyToCustomer 的回复活动。

    图像显示:在 BPEL 编辑器中添加一个“回复”活动

要添加 CopyCustomerInfo 赋值活动,请执行以下操作:

  1. 在“组件面板”的 “基本活动”区域,选择 “赋值”图标并将所选内容拖动到“设计”区域中的 ReceiveFromCustomer 活动与 InvokeLoanProcessorEJB 活动中间。
    IDE 将为您提供可视化提示告诉您所选内容的放置位置。
    该操作将在“设计”视图中放置一个赋值活动 Assign1
  2. 如果“属性”窗口不可见,则从主菜单中选择“窗口”>“属性”选项。
  3. 在“设计”视图中,选择 Assign1 活动。
  4. 在“属性”窗口中,将 Name 属性修改为 CopyCustomerInfo
  5. 在 BPEL 编辑器中,选择“映射器”按钮,打开“BPEL 映射器”窗口。确保选择了 LoanRequestor.bpel 选项卡。
  6. 在 “BPEL 映射器”的源窗格(左边)中,展开 Variables > LoanRequestorOperationIn > requestLoanMessage 节点。
    先前在模式中创建的 processApplicType 复杂类型中的每个本地元素都有一个相应的节点。

    图像显示:在 “BPEL 映射器”源窗格中的 “本地”模式元素。

  7. 在 “BPEL 映射器”的目标窗格(右侧窗格)中,展开 Variables 节点下面的 ProcessApplicOperationInparameters 节点。
    parameters 节点的下面也显示了相同的模式元素节点。

    在 “BPEL 映射器”目标窗格中的“本地”模式元素

  8. 将源窗格中的 socialSecurityNumber 拖动到目标窗格中的 socialSecurityNumber 节点下。
  9. 针对以下变量,重复步骤 8:
    applicantNameapplicantAddressapplicantEmailAddressapplicantAgeapplicantGenderannualSalaryamountRequested

    在“BPEL 映射器”中的赋值活动已经完成单击查看大图

  10. 要保存修改,在 “项目” 窗口中,选择 LoanRequestor 项目节点,并从主菜单中选择 “文件” >“保存所有文件” 选项。

要添加 CopyLoanStatus 赋值活动,请执行以下操作:

  1. 在 BPEL 编辑器的工具栏中,选择 “设计”,切换到“设计”视图。
  2. 在“组件面板”的“基本活动”区域,选择“赋值”图标并将所选内容拖动到“设计”区域中 InvokeLoanProcessorEJB 活动与 ReplyToCustomer 活动中间。
    该操作将在 “设计” 视图中放置一个赋值活动 Assign1
  3. 选择 Assign1 活动。
  4. 在 “属性”窗口中,将 Name 属性的值修改为 CopyLoanStatus
  5. 在 BPEL 编辑器的工具栏中,选择 “映射器”,转换到“BPEL 映射器”视图。
  6. 在 “BPEL 映射器”的源窗格中,展开 Variables > ProcessApplicOperationOut > parameters 节点。
    可见,return 节点 在 parameters 节点的下面。
  7. 在 “BPEL 映射器”的目标窗格中,展开 Variables > ProcessApplicOperationOut > responsePart 节点。
    可见,return 节点在 responsePart节点的下面。
  8. 将源窗格中的 return 节点拖动到“BPEL 映射器”目标窗格中的 return 节点。

    在 “BPEL 映射器”中的赋值活动已完成单击查看大图

  9. 要保存更改,在 “项目” 窗口中,选择 LoanRequestor 项目节点,并从主菜单中选择 “文件” >“保存所有文件” 选项。

返回顶部

编译 BPEL 模块项目

要编译 LoanRequestor 项目,请执行以下操作:

  • 在“项目”窗口中,右键单击 LoanRequestor 项目节点并选择 “清理和编译项目” 选项。
    如果在 “输出” 窗口中显示 BUILD SUCCESSFUL 消息,则表明编译成功。

返回顶部

创建复合应用程序项目

在部署 BPEL 模块项目之前,必须创建一个复合应用程序。部署项目将使应用服务器可以使用服务组合件功能,运行服务单元。

要创建复合应用程序项目,请执行以下操作:

  1. 从主菜单中,选择 “文件” > “新建项目” 选项。
    此时将打开 “新建项目” 向导。
  2. 在“类别”列表中,选择 SOA 节点。
  3. 在“项目”列表中,选择 Composite Application 节点。
  4. 单击 “下一步” 按钮。
  5. 在 “项目名称”字段,输入 LoanRequestorCompositeApp
  6. 单击 “完成” 按钮。
    现在,“项目”窗口中包含一个复合应用程序项目节点 LoanRequestor

    在“项目”窗口中的 “LoanRequestorCompositeApplication ” 复合应用程序项目

返回顶部

使用复合应用程序(服务组合件)编辑器

在本节中,我们将使用复合应用程序(服务组合件)编辑器修改项目配置和编译 BPEL 模块项目。我们将添加一个 WSDL 端点和一个连接,然后验证和修改自动生成的 WSDL 端点属性。

要使用复合应用程序(服务组合件)编辑器修改项目配置和编译 BPEL模块项目,请执行以下操作:

  1. 在“项目”窗口中,展开 LoanRequestorCompositeApp 节点。右键单击 Service Assembly 节点,从弹出菜单中选择“编辑”选项。
    IDE 将在复合应用程序(服务组合件)编辑器中打开 .casa 文件。该编辑器“设计”视图的设计区域由三部分组成:“WSDL 端口”、“JBI 模块”和“外部模块”。

    注意:要在 NetBeans 6.0 中调用 CASA 编辑器,右键单击“项目”窗口的复合应用程序并选择 “编辑应用程序配置”选项。

    CASA 编辑器,“设计”视图的设计区域

  2. 在“项目”窗口中,选择 LoanRequestor 项目节点,并将所选内容拖动到 LoanRequestorCompositeApp.casa 文件“设计”视图的“JBI 模块”区域。

    使用复合应用程序编辑器添加 JBI 模块单击查看大图

  3. 在编辑器工具栏中,单击 “编译项目 ”按钮,编译 HelloSample BPEL 模块项目。
    完成此步骤后:
    • 在“输出”窗口将会显示“ BUILD SUCCESSFUL”,表明项目编译成功。
    • LoanRequestorCompositeApp.casa 文件的“设计”视图如下图所示。

      编译 BPEL 模块项目后 CASA 编辑器的“设计”视图

要创建 WSDL 端点,请执行以下操作:

  1. 在“组件面板”的“WSDL”绑定区域,选择 “ 肥皂” 图标。
  2. 将所选内容拖动到 LoanRequestorCompositeApp.casa 文件“设计”视图的 “WSDL”端口区域中。
    IDE 将添加一个标签为 casaPort1 的 WSDL 端口。

    添加 WSDL 端点 casaport1 后 CASA 编辑器的“设计”视图

要创建连接,请执行以下操作:

  1. 在“设计”视图中的 casaPort1 端口中,单击“使用端点”图标。
  2. 将所选内容拖动到“JBI 模块”区域 (BPEL) LoanRequestor 框中的 LoanRequestorPortTypeRole_myRole 上。
    IDE 将新建一个连接。

    添加连接后 CASA 编辑器的 “设计”视图

返回顶部

部署和测试复合应用程序

要增强复合应用程序的功能,可以添加一些测试用例并绑定到操作,然后提供输入并使用测试程序。

要部署复合应用程序,请执行以下操作:

  • 右键单击 LoanRequestorCompositeApp 项目节点,然后选择“部署项目”选项。
    如果在“输出”窗口中显示消息:BUILD SUCCESSFUL ,表明部署成功。

要为通过批准的请求添加测试用例,请执行以下操作:

  1. 在“项目”窗口中,展开 LoanRequestorCompositeApp 项目节点,右键单击 Test 节点并从弹出菜单中选择“新建测试用例”选项。
    此时将打开 “新建测试用例” 向导。
  2. 在“ 测试用例名称 ”中,输入 ApprovedTestCase 并单击“下一步”按钮。
  3. 在“选择 WSDL 文档”页面中,展开 LoanRequestorCompositeApp - Process Files 节点,选择 LoanRequestorCompositeApp.wsdl 并单击“下一步”按钮。
  4. 在“选择要测试的操作” 页面中,选择 LoanRequestorOperation 并单击“完成”按钮。
    在“项目”窗口中,IDE 已经在 Test 节点下面添加了一个新节点 ApprovedTestCase。该节点包含两个子节点:InputOutput。源编辑器包含输入文件的选项卡,即 Input.xml

    ApprovedTestCase 的 Input.xml 文件单击查看大图

    注意:如果源编辑器未包含 Input.xml 选项卡,则在“项目”窗口中双击 Input 节点打开该文件。
  5. 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></loan:applicantEmailAddress>
    <loan:applicantAge>36</loan:applicantAge>
    <loan:applicantAge>15</loan:applicantAge>
    <loan:applicantAge>100000</loan:applicantAge>
    <loan:applicantAge>1000000</loan:applicantAge>
    
  6. 从主菜单中,选择“文件”>“保存所有文件”选项。
  7. 关闭 Input.xml 文件的 源编辑器选项卡。

要为被拒绝的请求添加测试用例,请执行以下操作:

  1. 在“项目”窗口中,展开 LoanRequestorCompositeApp 项目节点,右键单击 Test 节点并从弹出菜单中选择“新建测试用例”选项。
    此时将打开 “新建测试用例” 向导。
  2. 在 “测试用例名称”中,输入 RejectedTestCase 并单击“下一步”按钮。
  3. 在“ 选择 WSDL 文档” 页面中,展开 LoanRequestorCompositeApp - Process Files 节点,选择 LoanRequestorCompositeApp.wsdl 并单击“下一步”按钮。
  4. 在“选择要测试的操作”页面中,选择 LoanRequestorOperation 并单击 “完成” 按钮。
    在“项目”窗口中,IDE 已经在 Test 节点下面添加了一个新节点,其名称为 RejectedTestCase。该节点包含两个子节点:InputOutput。源编辑器包含一个输入文件选项卡 LoanRequestor.wsdl

    RejectedTestCase 的 Input.xml 文件单击查看大图

    注意:如果源编辑器未包含 Input.xml 选项卡,则在“项目”窗口中双击 Input 节点打开该文件。
  5. 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></loan:applicantEmailAddress>
    <loan:applicantAge>15</loan:applicantAge>
    <loan:applicantAge>15</loan:applicantAge>
    <loan:applicantAge>100000</loan:applicantAge>
    <loan:applicantAge>1000000</loan:applicantAge>
  6. 从主菜单中,选择“文件”>“保存所有”选项。
  7. 关闭 Input.xml 文件的源编辑器选项卡。

要使用 ApprovedTestCase 的基准信息填充测试文件,请执行以下操作:

  1. 在“项目”窗口中,双击 ApprovedTestCase 下面的 Output 节点,以检查该文件的内容。
    我们发现,Output.xml 文件最初是空的。

    ApprovedTestCase 的空输出文件

  2. 在“项目”窗口中,右键单击 ApprovedTestCase 节点并从弹出菜单中选择“运行”选项。

    注意:第一次运行的是一个特殊用例,因为 Output.xml 文件为空并且 IDE 无法将测试结果与 Output.xml 文件中的内容进行比较。注意 “输出” 窗口中的失败消息。
    此时将打开“覆盖空输出?”对话框。

    JUnit 测试结果显示:首次测试失败单击查看大图

  3. 单击 “是” 按钮。
    IDE 将使用默认信息填充 Output.xml 文件。现在,此版本的文件已含有运行后续测试所需的基准信息。这种版本的文件也称作“金色”文件。

    为 ApprovedTestCase 创建的基准输出文件单击查看大图

要使用 RejectedTestCase 的基准信息填充测试文件,请执行以下操作:

  1. 在“项目”窗口中,双击 RejectedTestCase 节点下面的 Output 节点,以检查该文件的内容。
    我们发现,Output.xml 文件最初是空的。
  2. 在“项目”窗口中,右键单击 RejectedTestCase 节点并从弹出菜单中选择“运行”选项。

    注意:第一次运行的是一个特殊用例,因为 Output.xml 文件为空并且 IDE 无法将测试结果与 Output.xml 文件中的内容进行比较。注意 “输出” 窗口中显示的失败消息。
    此时将打开“覆盖空输出?”对话框。
  3. 单击 “是” 按钮。
    IDE 将使用默认信息填充 Output.xml 文件。现在,此版本的文件已含有在后续测试运行中所需的基准信息。

    为 RejectedTestCase 创建的基准输出文件单击查看大图

要运行测试,请执行以下操作:

  1. 在“项目”窗口中,右键单击 ApprovedTestCase 节点并从弹出菜单中选择“运行”选项。
    注意,Output.xml 文件的内容已保存并且未被新结果覆盖。可以通过双击表示通过测试的节点(Output 节点的正下方)来查看结果。

    测试通过单击查看大图
  2. 在“项目”窗口中,右键单击 RejectedTestCase 节点并从弹出菜单中选择“运行”选项。
    可以通过双击表示通过测试的节点来查看结果。
  3. 在源编辑器中,关闭所有文档。

返回顶部

(可选)创建 EJB 模块项目

在本教程中,将使用 J2EE 项目 LoanProcessor 。可以按照本节中的步骤从头开始创建此项目,或者从 loanprocessing-loanprocessor.zip 下载经过压缩的项目文件。

要创建 EJB 模块项目,请执行以下操作:

  1. 从主菜单中,选择“文件”>“新建项目”选项。
  2. 在“类别”列表中,选择 Enterprise 节点;在“项目”列表中,选择 EJB Module 节点。
  3. 单击 “下一步” 按钮。
  4. 在“项目名称”字段,输入 LoanProcessor
  5. (可选)在“项目位置”字段中,使用“浏览”按钮导航到 IDE 将要存储 EJB 项目文件的位置并选择它。
  6. 单击 “下一步” 按钮。
  7. 在“服务器和设置”页面,确保选中服务器 GlassFish V2,单击 “完成”按钮。
    此时,“项目”窗口中已经包含一个 EJB Module 项目节点 LoanProcessor

要创建 Web 服务,请执行以下操作:

  1. 在“项目”窗口中,右键单击 LoanProcessor 项目节点并从弹出菜单中选择“新建”>“Web 服务”选项。
    此时将打开 “新建 Web 服务” 向导。
  2. 在“新建 Web 服务”向导中,执行以下操作:
    1. 在“名称和位置”页面的 “Web 服务”字段中,输入 LoanProcessor
    2. 在“包”字段中,输入 com.sun.loanprocessor

      已完成在“新建 Web 服务”向导的“ 名称和位置”页面设置

    3. 单击 “完成” 按钮。
    IDE 将创建一个 Web 服务并在源编辑器中打开 LoanProcessor
  3. 在“项目”窗口中,展开 LoanProcessor 项目节点,然后再展开 Web Services 节点。
  4. 右键单击 LoanProcessor 项目节点(Web 服务),然后选择“添加操作”选项。
    此时将打开“添加操作”对话框。
  5. 在“名称”字段,输入 processApplicOperation
  6. 在“参数”选项卡中,添加以下七个参数。方法是单击“添加” 按钮并完成 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

    完成“添加操作”对话框

  7. 单击 “确定” 按钮。
  8. 在源编辑器中,单击 “源”按钮打开 LoanProcessor.java 文件的“源”视图。
    注意到,IDE 已经更新了 LoanProcessor.java 文档,其中含有 processApplicOperation 方法的框架。
  9. 在源编辑器中,将代码
    	//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;
    
    
  10. 要保存更改,请从主菜单中选择“文件”>“保存”选项。
  11. (可选)在源编辑器中关闭 LoanProcessor 选项卡。
  12. 返回 打开和部署合作伙伴 Web 服务

返回顶部

未来计划

  • 要发送意见和建议,获取支持,了解 NetBeans IDE Java EE 开发功能的最新发展,请加入 邮件列表。



更多信息


返回顶部

Companion
Projects:
MySQL Database Server   GlassFish Community: an Open Source Application Server   Open Solaris  Open JDK: an Open SourceJDK   Mobile & Embedded Community     Sponsored by 
Sponsored by Sun Microsystems