组装SCA组件(一)

日期: 2008-08-07 作者:Roland BarciaJeff Brent 来源:TechTarget中国 英文

  检验IBM WebSphere Integration Developer组装的SCA组件的上下文中的引用和连线。


  引言


  在这一系列文章的第1部分,我们引入了服务组件体系结构(Service Component Architecture,SCA)作为编程模型来构建和组装集成解决方案,包括简要介绍什么是SCA,以及一些相关术语的定义。我们还提供了一个通过IBM WebSphere Integration Developer使用Java构建SCA组件的示例,测试了该SCA组件,并使用SCA客户端编程模型构建了一个调用该SCA组件的示例JSP文件。在第2部分中,我们将继续描述引用和连线,并介绍如何使用它们来组装SCA组件。


  概述


  在第1部分介绍的示例中,我们使用了一个简单的JSP客户端来调用SCA组件。该示例只用于演示;当构建您自己的实际自定义应用程序时,您可能会使用标准J2EE组件模型来实现应用程序逻辑。J2EE Web应用程序将继续调用Enterprise JavaBean来访问特定于应用程序的功能。实际上,SCA编程模型是用于业务集成、应用程序组合和解决方案组装的,而不是用于J2EE应用程序开发的。SCA客户端(它可以是J2EE)通常在进程管理器外,例如它可以使用BPEL流程来编排工作流。与BPEL流程联合部署的Web应用程序也可以使用SCA编程模型来调用特定于应用程序的功能。图1显示了SCA生态系统的一个示例。



  图1. SCA生态系统
 
  SCA位于集成层。SCA组件可以通过导入来调用SCA运行时外的应用程序。非SCA客户端可以通过导出调用SCA组件。在集成层内,可以通过定义引用和使用连线来组合SCA组件,这将在本文中重点介绍。有了连线和引用,您就可以在开发时定义运行时调用的特性;例如,使调用同步或异步,标记调用的转换边界,等等。这些特性是在部署时读取的,它们可以启用所需的运行时行为。图2阐释了这些高级概念。



  图2. 引用和连线的高级视图
 
  再次说明,我们关注的是集成层,而不是应用层。另外,我们介绍的是较高级的集成,例如工作流编排或与EIS系统的高级集成。然而,出于演示目的,我们使用简单的Java示例来显示如何将组件连接到集成层中,强调的是连线和引用的功能而不是组件本身的实现。(在后续文章中,我们将介绍如何将SCA组件实现为BPEL流程和状态机,以及如何应用连线技术。)因此我们使用一个按比例缩减的模型来阐释引用和连线,如图3所示;然而,我们要记住图2中合适的SCA使用远景。



  图3. 简化的引用和连线模型
 
  引用


  正如第1部分所讨论的,SCA组件被打包成一个SCA模块。一个模块中的SCA组件通过对调用的SCA组件定义引用来彼此交互,并且将这些引用连线到相同模块中的其他SCA组件。图4阐释了这一概念。



  图4. 引用和连线概念
 
  对调用组件的引用是用SCDL表示的,如下所示:


  清单1
    
  <scdl:component
  
  
  
  
  displayName=”CreditApproval” name=”CreditApproval”>
    <interfaces>
      <interface xsi_type=”wsdl:WSDLPortType” portType=”ns1:CreditRequest”>
        <method name=”calulateCreditScore”/>
      </interface>
    </interfaces>
    <references>
      <reference name=”CreditHistoryPartner”>
        <interface xsi_type=”java:JavaInterface”
        interface=”approval.credit.credit.history.CreditHistory”>
          <method name=”getCreditLimit”/>
        </interface>
        <wire target=”CreditHistory”/>
      </reference>
      <reference name=”CreditAgencyPartner”>
        <interface xsi_type=”java:JavaInterface”
        interface=”approval.credit.credit.agency.CreditAgency”>
          <method name=”getCreditScore”/>
        </interface>
        <wire target=”CreditAgency”/>
      </reference>
    </references>
    <implementation xsi_type=”java:JavaImplementation”
    class=”sca.component.java.impl.CreditApprovalImpl”/>
  </scdl:component>
  
  引用的好处之一是能够定义调用期间的服务质量。当在Assembly Editor中连线组件时,可以指定服务质量(QoS)限定符。这些限定符定义了调用期间在SCA运行时管理组件的必要条件。


  限定符


  使用SCA,您无需编程或更改服务实现代码就可以对组件应用QoS限定符(例如事务、安全性和可靠的异步调用)。在连线组件时,您可以指定限定符来为组件以及访问服务的客户端提供扩展的服务质量。在IBM WebSphere Process Server中,您可以在三个地方定义SCA限定符:


  ·引用
  ·接口
  ·实现


  在运行时,这些规范确定了客户端如何与目标组件进行交互。运行时环境可以提供所需的任何额外处理,这取决于所指定的限定符。


  用于引用的限定符


  引用限定符可以指定异步调用的可靠性,以及是否应该联合目标组件的方法,使之成为任何客户端事务的一部分。


  引用限定符包括:


  ·Asynchronous reliability-允许发生异步调用。这些限定符还允许您指定消息的可靠性、请求和响应超时。同时也能配置Service Integration Bus——它在IBM WebSphere Application Server运行时中提供消息传递平台,因此对WebSphere Process Server可用。(有关Service Integration Bus的信息,请参阅参考资料。)


  ·Suspend transaction-对于同步调用,当使用同步编辑模型进行调用时,客户端全局事务上下文始终会被传播到目标组件。(此限定符只影响客户端全局事务,因为本地事务从不传播到目标组件。)对于客户端不想让目标组件与客户端事务联合的用例,需要使用挂起事务限定符设置来进一步限定引用:


  True会在通过服务引用调用组件之前挂起当前全局事务。
  False(缺省值)指示运行时在通过服务引用调用组件之前不要挂起全局事务。


  ·Asynchronous invocation-确定是否应该进行异步调用(作为任何客户端事务的一部分)。值:


  Call(缺省值)指示运行时在进行服务调用的同时将消息提交给异步调用的目的地。
  Commit指示运行时将消息提交给异步调用的目的地的工作交给当前工作范围单元处理。


  ·Suspend activity session-活动会话能够对可能不支持分布式事务的资源进行更高级的协调。集成解决方案中更可能出现此类情况;客户端不想让目标组件与客户端的活动会话相联合,所以需要使用挂起活动会话限定符设置来进一步地限定引用:


  True会在通过服务引用调用组件之前挂起当前活动会话(如果存在)。
  False(缺省值)指示运行时在通过服务引用调用组件之前不要挂起任何处于活动状态的活动会话。


  您可以指定引用限定符,以便它们应用于服务组件的所有引用或者只应用于独立引用。如果需要,您还可以为每个引用指定这些限定符,在这种情况下它们将重写任何顶级限定符设置。在Properties视图中以灰色表示继承的限定符,以黑色表示已赋值的限定符。继承的限定符不能更改,除非您选择定义它们的所在元素。


  用于接口的限定符


  接口限定符说明了被目标服务支持的QoS,因此代表了一个与该服务客户端的约定。


  接口限定符包括:


  ·join activity session-确定目标服务是否愿意加入传播的活动会话范围。值:


  True指示运行时不要在接口边界挂起活动会话(如果存在)。
  False(缺省值)指示运行时在接口边界挂起活动会话(如果存在)。


  ·join transaction-确定目标服务是否愿意加入传播的全局事务。值:


  True指示运行时不要在接口边界挂起全局事务(如果存在)。
  False(缺省值)指示运行时在接口边界挂起全局事务(如果存在)。


  ·Security permission-使您能够在SCA组件上定义J2EE角色。只有与声明的角色相关联的客户端才能调用该组件。


  所有接口限定符都可以应用于组件的三个级别:


  ·用于其所有接口
  ·用于单个接口
  ·用于某个接口的单个操作。


  操作的限定符覆盖接口的限定符;接口的限定符覆盖组件的所有接口的限定符。


  用于实现的限定符


  实现限定符提供确定服务权限和/或表示其对事务环境的需求的功能。


  接口限定符包括:


  ·Activity session-确定组件的处理是否在一个活动会话中执行,除了全局事务上下文所提供的,它还提供一个备选的工作范围单元。值:


  True:组件将在活动会话的上下文中执行。如果活动会话是在调用时出现的,则会添加该组件。
  False(缺省值):组件将在现有的全局事务(如果存在)或本地事务的上下文中执行。实现限定符为activitySession=false的组件必须使用接口限定符joinActivitySession=false。
  Any:如果存在活动会话,则组件会加入当前活动会话。如果不存在活动会话,则组件会在现有的工作范围单元或本地事务的上下文中执行。


  ·Transaction-确定组件处理执行的逻辑工作单元。对于逻辑工作单元,事务期间所做的全部数据修改都是作为一个单元一起提交或作为一个单元回滚的:


  Global:组件将在全局事务的上下文中执行。如果在调用时存在一个全局事务,则该组件会被添加到该全局事务范围。如果不存在全局事务,则会建立新的事务范围。
  Local(缺省值):组件将在本地事务的上下文中执行。
  Any:如果存在一个全局事务,则组件将加入当前全局事务范围。如果不存在全局事务,则组件将在本地事务的上下文中执行。


  ·Security identity-使您能够指定组件担当的身份,与部署描述符上的J2EE Run-As约束类似。


  限定符是在SCDL文件中定义的:接口限定符是在接口部分定义的,实现限定符是在实现部分定义的,引用限定符是在引用部分定义的。(有关详细信息,请查阅WebSphere Process Server Information Center。)

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

相关推荐

  • 如何透过业务和技术看SOA的发展

    随着SOA发展的深入,各种SOA相关技术标准也随之发展和完善。面对庞大而复杂的SOA相关技术标准,我们如何来有选择的使用它们呢?

  • SOA架构下补偿模型驱动的安全苛求软件开发

    随着我国高速铁路的快速发展,传统的计算机联锁软件开发方法在灵活性、可维护性、安全性以及开发效率上都显露出不足,怎样才能弥补这一不足呢?

  • 多应用程序开发:挑战ALM

    许多企业正在软件开发中经历同时开发多个软件的阶段,但怎样为业务应用程序开发制订短期和长期计划,以帮助他们的公司变得更成熟或为扩张累计能量?

  • Java程序员必备的七大全能

    Java已逐渐成为了企业开发的首选语言,众多的IT组织使用Java来做大型企业项目。作为Java程序员你的技能是否能够满足企业的要求?