How to Deliver Composite Applications with Java, WS-BPEL & SOA
http://soa.sys-con.com/read/358049_p.htm
Java 是一种用于构建组件、服务和很多厂商和平台中立的应用程序的杰出语言。过去十年来该行业广泛采用了 Java 技术就是 Java 强大功能的最好证明。使用 Java 开发新应用程序、服务和组件并未处于领先地位,但是很多组织都逐渐转到下一个阶段,即使其 IT 基础架构更加成熟。这个阶段由很多因素驱动,包括当今商业的运作方式、必须不断调整以适应市场趋势,以及 IT 已经从一个支持组织转变为业务的骨干,因此需要与组织保持同步。根据改变的业务需求不断快速地调整、面市时间和成本是决定在此阶段是否成功的因素。
有很多技术开始在此阶段发挥重要的作用,例如,面向服务的体系结构 (SOA) 就是一个主要支持者。Java EE 技术是现有应用程序的中立服务支持者,从而形成了 SOA 的基础。支持服务的应用程序创建了复合完全不同的、各种功能的应用程序以对超越应用程序和企业边界的业务进行建模的机会。Web 服务业务流程执行语言 (WS-BPEL) 通过重用提供了一种快速复合和协调服务的方法。Java 和 WS-BPEL 彼此完美互补,并且为集成服务和交付复合应用程序提供坚实的基础。
本文将简要介绍这些技术以及它们如何共同工作以提高开发人员的效率和业务敏捷性。
技术 – Java、WS-BPEL 和 SOA
对于本文将探讨的这些技术,还没有大家认可的定义。因此,我们现在需要按照常规理解解释这些技术,然后再开始详细探讨。
面向服务的体系结构是一种用于实现具有精确定义接口的连接紧密或松散的业务和技术功能的技术模式。此类服务需要在接口中指定详细信息,而无需了解关于实现的内容。
尽管如图 1 所示的基于 SOA 体系结构的模型非常少,但定义明确的服务层实际上可能有很多个层,因为重用并组合这些服务用于创建粗粒度的服务。如图表中所示,这些服务可以彼此利用以提供多层服务,并且使用包括 Java 在内的任何语言都可以实现此类模型。只要能够通过精确定义的接口使用该服务,那么该服务就不依赖于任何技术。Java EE 5 是一组协调的技术,它使解决方案能够用于开发、部署和管理以服务器为中心的应用程序。WS-BPEL 是一种基于 XML 的执行语言,可以使用它将粗粒度的服务组合为范围更广的服务或完善的应用程序。
艰难决定
如果没有适当的工具集,使用该技术通常会弊大于利。为技术确定适当的工具集和选择该技术一样重要。
当架构师们尝试了解什么时候可以从 Java 切换到 WS-BPEL 时,交付复合应用程序与其说是一门科学,倒不如说是一门艺术。这个决定通常确定了复合应用程序的敏捷性。
适当的工具集
Sun Microsystems 提供了很多工具和服务器,在本文中我们将使用它们(尤其是 Java EE 5 SDK Update 2 Tools Bundle)构建复合应用程序。可以在 http://java.sun.com/javaee/downloads/ 上找到该软件,它包含以下内容:
该包提供了使用 Java 和 WS-BPEL 构建、部署和管理复合应用程序所需的集成工具和运行时环境。除了所有 Java SE/EE 开发环境之外,工具还包括 WS-BPEL 编辑器和调试器、WSDL 和 XSD 编辑器以及用于创建服务和将其组合为应用程序的项目系统。运行时不仅提供 Java EE 5 应用程序服务器,而且还提供执行在 WS-BPEL 编辑器中创建的业务流程所需的 WS-BPEL 引擎。
实际上,该包还提供支持完整生命周期以开发、部署和管理应用程序和业务过程,从而将来自 Java EE 应用程序的服务和 Web 服务组合在一起的功能。
对用例使用该技术
要使用该技术和工具,首先让我们假设一种您必须非常熟悉的方案,在该方案中通过重用现有 Java EE 应用程序和外部 Web 服务的功能开发一种新的面向外部的应用程序。
在图 2 中所描述的体系结构中,存在三个现有的 Java EE 应用程序:1) Performance Evaluator – 提供对现有客户的财务性能的评估;2) Vehicle Information Server – 评估市场情况以及设备历史,并且提供关于该设备价值的详细报告;3) Financial Index Server – 提供应该用于计算贷款详细信息的现行利率和价值。
新的应用程序应该提供一种在 Web 上接收贷款申请并答复决定的服务。应该对以下数据应用预先定义的处理规则得出贷款决定:1) 申请人的财务价值,2) 设备的价值 3) 贷款数量 4) 贷款的当前政策和指数。
设计
只需借助 servlet、JSP、EJB 和 POJO,就可以采用 Java 技术完全实现新的应用程序。但是,WS-BPEL 是一种更适合于进行服务组合和业务流程执行的语言。如前面所述,有关何时使用 WS-BPEL 开始组合服务的决定需慎重对待。常用的规则是可以使用 Java 扩展现有服务或组合细粒度的 Java EE 服务,以创建更多服务,这些服务可能尚不提供连接紧密和完整业务或技术功能。如果新处理单元实现了业务或技术逻辑(不仅仅是调用服务和在调用之间进行基本数据变换),这就表明它可能更适合实现 Java。但是,当所需的应用程序或复合以流程为中心,并且涉及到调用服务并用流逻辑和简单的映射将其连在一起时,WS-BPEL 可能是实现此层应用程序的最佳方法。
新应用程序需要开发以下服务:1) Applicant Evaluator – 一种聚合内部报告的服务(如果申请人是具有外部信用报告的现有客户);2) Loan Approval Processor – 一种提供申请人财务性能、设备报告以及当前指标,并且提供决定的服务;3) Vehicle Loan Application Process – 一种将向外部展示的服务。该流程将接收传入的信用申请、按照该顺序调用 Applicant Evaluator 服务、Vehicle Information 服务和 Financial Index 服务并将所有这些服务的结果传递给 Loan Approval Processor 服务,然后将该决定返回给调用方。
Applicant Evaluator 服务将作为无状态会话 bean 实现,它被注释以显示为一种 Web 服务。该服务将调用外部 Web 服务以获得信用报告,还会调用其他无状态会话 bean - Performance Evaluator – 以获得内部信用报告(如果有)。
Vehicle Information Server 和 Financial Index Server Stateless Session Bean 功能将显示为一种 Web 服务。Loan Approval Processor 服务将作为一种无状态会话 bean 实现,并且被注释以显示为一种 Web 服务。
Vehicle Loan Application Process 将作为业务流程实现,该流程按照该顺序(参见图 3)调用 Applicant Evaluator、Vehicle Information Server、Financial Index Server 和 Loan Approval Processor 服务。
实现
Java EE 技术和 NetBeans 中提供的工具允许用户采用自下而上的方法和/或自上而下的方法来交付复合应用程序。在本例中,我们将按照自下而上的开发方法。我们将从构建 Java 服务开始,之后在业务流程中调用这些服务。然后我们将在复合应用程序中组合这些服务、将该应用程序部署在 Sun Application Server 9.1 上并测试此复合应用程序。
NetBeans Enterprise Pack 5.5 提供在 IDE 中执行所有上述任务所需的功能,无需使用其他任何工具或编辑器。
Java 服务
Java EE 5 通过注释 Java 类能够使现有 Java EE 应用程序中的功能轻松支持服务。还可以使用 NetBeans 中的 EJB 模块创建向导轻松创建支持 Web 服务的新 Java EE 应用程序。在第一阶段中,EJB Modules Vehicle Information Server 和 Financial Index Server 通过向类中添加相应的注释来支持服务。
在第二阶段中,将创建两个新的服务。Applicant Evaluator 服务是无状态的会话 bean,它也显示为 Web 服务。该服务综合了外部 Web 服务、FICOSimulator 和 Performance Evaluator 无状态会话 bean 的结果。FICOSimulator Web 服务模拟返回信用报告(参见图 4)的外部 Web 服务。
Loan Approval Processor 是作为无状态会话 bean 开发的另一个服务,它也显示为 Web 服务。该服务将关于应用程序信用价值、设备的价值、贷款指标的报告组合在一起,并根据预先定义的业务规则返回决定。
复合服务
可以使用 NetBeans Enterprise Pack 5.5 中的 Business Process Editor 来复合服务。Business Process Editor 使用户能够在可视的环境中对业务流程采用图形的方式建立模型,并且会自动生成与可视模型相对应的 WS-BPEL 代码。但是,用户可以选择直接在生成的 WS-BPEL 代码中进行更改,然后将可视模型自动同步到图形视图。这些由业务流程调用的服务定义为 WSDL(参见图 5)。用户可以在 NetBeans 中直接使用 WSDL 编辑器和 XSD 编辑器创建新的 WSDL。但是,用户还可以导入现有的 WSDL 和 XSD,然后使用编辑器编辑它们。
创建一个 BPEL 项目 CreditApplicationProcessorBusinessProcessor 一小服务的 WSDL 和 XSD 包括:1) Applicant Evaluator,2) Vehicle Information Server,3) Financial Index Server,4) Loan Approval Processor Service。导入 WSDL 之后,将为要从业务流程中调用的端口类型创建 Partner Link Types。请记住,信用申请流程也将显示为一种 Web 服务,因此,将创建另一个 WSDL 即 CreditProcessor.wsdl,它表示到该业务流程的接口。
Partner Link Types 指定在端口类型中定义的服务将发挥的作用。例如,下面的 Partner Link Type CustomerDataServicesPartners 指定当调用 getCustomerReport 函数时该服务发挥 CustomerReportProvider 的作用。
<partnerLinkType name="CustomerDataServicesPartner">
<role name="CustomerReportProvider"
portType="getCustomerReport"/>
</role>
</partnerLinkType>
在 WSDL 中为 PortTypes 创建了 Partner Links Types 之后,就可以从业务流程中调用它们了。用户只需将 WSDL 拖放到 Business Process Editor 画布上,Business Process Editor 就会自动识别可用的 Partner Link Types 并且显示为业务流程配置 Partner Links 的向导。该向导允许用户确定此业务流程将是 Partner Link Type 中定义的服务的消费合作伙伴还是提供合作伙伴。
WS-BPEL 2.0 规范提供对复杂真实的业务流程建模的各种类型的活动。业务流程可以接收和回复消息,也可以只接收消息而不响应。业务流程还可以从外部源异步接收消息。WS-BPEL 规范中所支持的主要结构包括能够调用外部服务、处理异常、处理补偿和错误条件逻辑。它还允许对活动的并发执行和条件执行进行建模。本文中使用的示例仅使用几个结构,它们是 Receive、Reply、Invoke 和 Assign 活动。Invoke 活动用于使用服务,Assign 活动用于设置所调用服务的输出和输入消息中的值并从中获得值。Assign 活动打开一个映射程序,该映射程序允许用户查看业务流程中的所有变量并且以图形方式获得和设置它们之间的值。该映射程序还提供数据处理和数据转换功能,可以与指定结合使用。Receive 活动用于接收在运行时创建业务流程实例的传入消息。Reply 活动用于将响应消息发送回调用方,然后丢弃业务流程实例。
用户通过对活动进行布局,然后一次配置一个活动,开始创建一个模板业务流程。用户拖放 CreditProcess WSDL 并作为该服务的提供合作伙伴配置该业务流程。用户配置 Receive 和 Reply 活动以实现 CreditProcess WSDL 中指定的 PortType。然后用户拖动所有其他 WSDL 并作为这些服务的使用合作伙伴配置该业务流程。用户对每个使用的服务使用一个 Invoke 活动并配置此 Invoke 活动以将其与相应的 Partner Link 链接。配置完成之后,该业务流程应该类似于图 6 所示。
创建和部署复合应用程序
NetBeans 可以将不同项目下多个可用的业务流程组合成一个复合应用程序。这将允许您组合多个逻辑业务流程并在部署期间将它们作为一个逻辑单元进行管理。NetBeans 还提供用于部署复合应用程序所需的运行时组件。这些运行时组件包括 Java Application Server 9.1、WS-BPEL 服务引擎和 HTTP/SOAP 绑定组件。可以通过在环境中的不同项目中选择和添加组件轻松创建复合应用程序。NetBeans 还允许用户通过一次单击构建和部署复合应用程序。
在本文中使用的示例中,用户将项目 CreditApplicationProcessorBusinessProcess 中的业务流程模块添加到 Composite Application 项目中。然后在运行时部署该复合应用程序。
测试
需要编写客户端应用程序只是为了测试新部署的复合应用程序,这让人感到很沮丧。NetBeans 通过提供强大的测试工具避免了这个需要。该工具会自动添加到 Composite Application 项目下。用户可以创建任意数量的测试用例来测试所部署的复合应用程序的各种功能并指定这些测试的成功条件。当用户选择与要测试的业务流程相对应的 WSDL 时,还会自动生成测试用例的输入和输出消息。然后用户可以根据需要在编辑器中自定义消息,如图 7 所示。该测试工具还保留所有测试结果的日志。如果系统出现故障,可以从 NetBeans 中查看服务器和应用程序日志。该工具允许用户立即测试刚刚部署的复合应用程序。
用户为本文中所讨论的应用程序添加测试用例。第一次运行之前,可以自定义输出消息,也可以将第一次运行测试用例中的输出消息用作期望的输出消息。
一切完毕,那么下一步该做什么呢?
Java EE 5 SDK 提供使用 WS-BPEL 组合服务所需的一整套工具和环境。调用所有服务作为 SOAP/HTTP Web 服务可能会引起对性能的密切关注。可以使用 WS-BPEL 直接调用 Enterprise JavaBeans 以组合 Java EE 应用程序中的功能。可以使用 Java EE 5 SDK 对业务流程进行建模,它可以直接调用内部和外部的 Web 服务以及 Enterprise JavaBeans,如图 8 所示。
业务过程可以调用这些技术中可用的服务,包括 REST Style Web 服务。如果您有兴趣查找可用于组合服务和处理业务事件的其他选项,请检查以下开放源码项目。
您可以获得最新版本的产品和对当前正在使用的增强功能的更新。如果感兴趣,还可以加入并为这些项目做贡献。
本文中所使用的示例项目的源代码可以从 http://jdj.sys-con.com 上的本文的联机版本中下载。
小结
本文讨论并介绍了在 Java EE 5 SDK Tools Bundle 中使用 Java、WS-BPEL 和 SOA 交付复合应用程序的很多功能。
首先,本文讨论了这两种技术的优势以及它们如何共同工作以支持开发下一代应用程序。
其次,本文演示了 NetBeans 如何提供真正集成的开发环境,该环境允许用户扩展现有的 Java 服务、创建新的 Java 服务以及组合 Java 服务与业务流程。本文还介绍了如何使用 NetBeans 进行无缝地交互式开发、构建、部署以及测试复合应用程序,从而减少交付复合应用程序所需的总周转时间和精力。
资源