IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope: Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  WebSphere | SOA and Web services  >

探索 WebSphere Application Server Feature Pack for SCA,第 5 部分: 服务组件体系结构服务的协议绑定

developerWorks
文档选项

未显示需要 JavaScript 的文档选项

英文原文

英文原文


级别: 中级

Chao M Beck, 软件工程师, IBM
Mark B Coats, 顾问软件工程师, IBM
Stephen Kinder, 高级技术人员, IBM

2009 年 8 月 10 日

本系列文章介绍 IBM® WebSphere® Application Server V7 Feature Pack for SCA,本文是其中的第 5 部分,将介绍可用于将不同 SCA 组件连接到一起的服务组件体系结构(Service Component Architecture,SCA)绑定。绑定用于定义 SCA 服务和引用的传输/协议访问机制,从而独立于应用程序编程接口选择协议。Feature Pack for SCA 支持的三种绑定类型为缺省、Web 服务和 EJB 绑定。本系列的第 1 部分对 SCA 组装模型中的 SCA 绑定进行了概述。

引言

在关于 IBM WebSphere Application Server V7 Feature Pack for SCA 的系列的第 5 部分(即本文)中,我们将介绍功能部件包提供的 SCA 绑定的详细信息,即缺省绑定、Web 服务绑定和 EJB 绑定。这些服务组件体系结构 (SCA) 绑定用于定义远程服务和引用的传输/协议访问机制。绑定封装所有配置和策略数据,使应用程序无需处理这些细节。绑定在远程 SCA 访问和每个引用上指定。

有关 SCA 组装模型中的 SCA 绑定的概述,请参见本系列的第 1 部分





回页首


绑定概述

关于本系列更多的文章,请参考:

您也可以通过 WebSphere Application Server Feature Pack for SCA 专题了解更多关于 Feature Pack for SCA 方面的内容。

关于更多 Feature Pack 方面的内容,请参考:WebSphere Application Server 功能部件包专题

developerWorks 网站 SOA and Web services 专区的 SCA 专题为您总结了 SCA 相关的内容和资源,包括入门介绍、开发技巧、监控和测试等方面的内容。

服务和引用允许组件与其他应用程序通信。不过,其设计并不考虑通信方式。绑定执行指定这个通信机制的工作。

绑定准确指定应该如何完成 SCA 组件及其服务使用者和提供者之间通信。根据组件与所提供或使用的服务间的关系,组件可能会(或不会)显式地指定绑定。图 1 显示了 SCA 如何集成意图和策略,其中与位于相同域中的另一个组件(甚至位于其他进程或计算机中)通信的组件不需要指定任何显式绑定。将由 SCA 运行时确定使用哪个绑定,使开发人员无需处理这项繁琐的工作。


图 1. 绑定概述
图 1. 绑定概述

要在其 SCA 域之外进行通信(无论是非 SCA 应用程序,还是在其他 SCA 域中的 SCA 应用程序),组件都必须指定用于进行此通信的一个或多个绑定。每个绑定各自定义用于与服务或引用通信的特定协议。单个服务或引用可以有多个绑定,允许不同的远程软件以不同的方式与其通信。

我们知道,SCA 应用程序与不同域中的其他 SCA 应用程序使用特定的协议(如 Web 服务)通信,因此将该应用程序像非 SCA 应用程序一样处理,其 SCA 的使用在其域之外不可见。这证明了服务使用者和服务实现之间有恰当的关注分离,两个 SCA 应用程序都不需要知道彼此的实现细节,只需要知道如何彼此通信就行了。

如图 1 中所示,绑定准确地指定 SCA 组件和其使用者或提供者之间的通信应如何完成。绑定可以配置为服务提供或引用请求的访问机制。绑定示例包括:

  • SCA 缺省绑定
  • Web 服务
  • 无状态会话 EJB。

引用使用绑定名描述用于调用服务(可以为其他 SCA 组件提供的服务)的访问机制。服务使用绑定描述使用者(可以为来自其他 SCA 组件的客户端)必须用于调用服务的访问机制。通常,SCA 允许每个远程服务和每个引用使用绑定指定其支持的协议。服务或引用可以使用多个绑定配置。

指定绑定

不是由运行时为域间通信选择的绑定在组件的组合配置文件中显式定义。有意思的是,不能在 Java™ 实现中直接定义特定的绑定。(SCA Java Component Implementation V1.00 服务组件体系结构规范,版本 1.0 并未定义任何直接在 Java 中指定绑定的方法。)

下面是如何指定给定组件的引用的绑定示例:


清单 1. 示例引用绑定
				
<reference name="StockQuoteService">
	<interface.java interface="services.stockquote.stockquoteService"/>
	<binding.ws uri= http://www.sqs.com/StockQuoteService
		requires="soap/1.2"/>
</reference>
..

在此示例中,binding 元素指定两件事:

  • 绑定使用哪个协议。
  • 可以使用此协议访问服务的 URI。

元素的名称中的 binding.ws 指示其中的第一项,即使用 Web 服务绑定。元素的 URI 属性指示第二项,即服务所在的 URL。另外还可以(而且非常可能)让 Web 服务绑定使用相对 URL,而不是这里所示的绝对形式。

因此,绑定由组合文件中的 binding 元素定义,这个元素本身是其所属的 service 或 reference 元素的子元素。binding 元素在 SCDL 中正式描述为与所有 binding 元素类似的形式。


图 2. 绑定的有用性
图 2. 绑定的有用性

正如前面提到的,通过绑定,可以独立于应用程序编程接口选择协议。让我们回顾一下应用程序如何在 Java EE 5 及其 J2EE™ 前身中使用不同的协议。每个协议都使用不同的技术提供,因此每个都有自己的应用程序编程接口。例如,使用 SOAP over HTTP 通常意味着在 JAX-WS(或 J2EE 1.4 中的 JAX-RPC)基础上进行构建。使用 IIOP 通常意味着使用 EJB 组件。此方法将业务逻辑和协议选择混合在了一起。

SCA 采用了更为简单的方法。SCA 没有使用不同的 API 将不同的协议包装为不同的技术,而是允许每个远程服务和每个引用使用从实现中抽象出来的绑定指定所支持的协议。无论使用哪个协议,应用程序所看到的编程模型保持不变。这样就可以在部署期间替换绑定和绑定配置,而且不会影响业务逻辑——事实上,这提高了业务逻辑的可重用性。

例如,为了通过 SOAP over HTTP 进行访问,SCA 服务可以使用 Web 服务绑定。与此类似,EJB 会话 Bean 绑定允许使用 Internet ORB 间协议(Internet Inter-ORB Protocol,IIOP)访问会话 Bean。

任何绑定类型都不支持对话接口。

SCA 定义了多个不同的绑定类型,包括 Web 服务、无状态会话 EJB、JMS、JCA、SCA 缺省绑定等等。不过,Feature Pack for SCA 的这个初始版中包括对缺省 (SCA) 绑定、Web 服务绑定和 EJB 2 及 EJB 3 绑定。将在后面部分对这些绑定进行更为详细的讨论。





回页首


缺省绑定

每个 SCA 运行时都提供了 SCA 绑定,即所说的缺省绑定,也就是用于未为组件引用或服务指定其他绑定的情况。对于 SCA 到 SCA 调用(如 SCA 客户端调用 SCA 服务),这是理所当然要的绑定。

此绑定使用的协议由每个 SCA 运行时确定,因此只能用于部署在相同 SCA 域内的 SCA 使用者和提供者之间。从体系结构的角度而言,域概念由每个供应商设计,因此域是特定于供应商的,也就是说,不能通过体系结构设计的方法来使用缺省绑定调用或提供部署在其他域中的服务。WebSphere Application Server V7 中的 SCA 运行时将基于部署细节(如引用的位置)来选择最高效的服务调用机制,但在通过远程接口进行调用时,将遵循语义行为(如按值传递)。


图 3. SCA 域和缺省绑定
图 3. SCA 域和缺省绑定

域代表了在 SCA 中重要的易用性概念。域代表可以使用逻辑名称将各个服务组装到一起的范围。这方面有两个重要功能:

  • 它极大地简化了部署 SCA 组合的工作,因为部署人员不需要了解 SCA 域配置的细节。
  • 可以在无需重新配置 SCA 程序集的情况下进行基础结构更改(如在服务器之间移动应用程序)。




回页首


Web 服务绑定

SCA Web 服务绑定用于定义服务作为 Web 服务提供的方式以及使用引用调用 Web 服务的方式。此绑定设计用于提供和使用基于 SOAP 的、兼容 WS-I(可互操作)的 Web 服务。

SCA 功能部件包支持 SOAP 1.1 及 1.2 和 WSDL 1.1。

Web 服务绑定是基于 Web 服务描述语言(Web Services Description Language,WSDL)1.1,因此要么引用现有 WSDL 绑定,要么支持组装人员指定足够的信息,以便在部署期间生成 WSDL 绑定。

Web 服务绑定元素 <binding.ws> 可以在组件服务或组件引用定义中使用:

  • 在组件服务中使用时,此绑定类型允许客户端将 SCA 服务作为标准 Web 服务访问。
  • 在组件引用中使用时,此绑定允许组件按照使用其他服务时相同的方式使用外部 Web 服务。

SCA Web 服务绑定可以通过使用 WebSphere Application Server 策略集进行进一步自定义。

图 4 显示了名为 MyValueComposite 的组合的 SCA 组合定义。其中包含 MyValueComponent 的组件定义,其中有对一个股票报价服务的引用。StockQuoteComponent 提供股票报价服务。服务和引用都使用 Web 服务绑定。另外,这些服务也可以通过其他绑定(如 SCA 缺省绑定)进行提供和连接。


图 4. Web 服务绑定示例
图 4. Web 服务绑定示例

在没有 WSDL 的情况下部署 SCA 应用程序

SCA 贡献包 (contribution) 可以在没有 WSDL 文档的情况下打包。可以忽略 binding.ws 上的 wsdlElement 属性,无需在贡献包中打包 WSDL 文档。在此场景中,任何必要的 WSDL 文档都将在运行时动态生成。因为不存在静态 WSDL,因此 Web 服务客户端必须使用 WSDL 位置属性之外的方法指定端点。务必知道,服务接口的方法参数、返回类型和异常必须符合 JAX-WS 和 EJB 规范。

通常,Web 服务客户端和服务都需要使用相同的 WSDL,因此,如果部署服务时没有 WSDL,则可以使用附加到 URL 的“? wsdl”查询 Web 服务,以获得用于客户端访问的 WSDL。

清单 2 演示了如何指定服务的无 WSDL 部署。对于具有回调接口的服务,仅仅指定一个空白 <binding.ws> 标记。interface.java 和相应的 callbackInterface 都是必需的服务元素。


清单 2. 服务的无 WSDL 部署
				
<?xml version="1.0" encoding="UTF-8"?>
    <composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
          xmlns:wsdl="http://www.w3.org/2004/08/wsdl-instance" 
          name="helloworldws" >
        <component name="HelloWorldServiceComponent">
            <implementation.java class="helloworld.HelloWorldImpl"/>
            <service name="HelloWorldService">
    <interface.java interface="helloworld.HelloWorldService" 
			callbackInterface="helloworld.HelloWorldCallback"/>
                <binding.ws/>
                <callback>
                    <binding.ws/>
                </callback>
            </service>
        </component>
</composite>

清单 3 显示了如何指定引用的无 WSDL 部署。此示例说明了如何在 <binding.ws> URI 属性中指定绝对服务端点 URL。对于具有回调接口的引用,请仅指定空白 <binding.ws>。interface.java 和相应的 callbackInterface 都是必需的引用元素。


清单 3. 引用的无 WSDL 部署
				
<?xml version="1.0" encoding="UTF-8"?>
    <composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
          xmlns:system="http:// tuscany.apache.org/xmlns/system/1.0-SNAPSHOT" 
          name="helloworldwsclient" >
        <component name="HelloWorldServiceClientComponent">
            <implementation.java class="helloworld.HelloWorldServiceComponent"/>
            <reference name="HelloWorldService">
 <interface.java interface="helloworld.HelloWorldService" 
	callbackInterface="helloworld.HelloWorldCallback"/>
 <binding.ws 
	uri=”http://localhost:9080/HellowWorldServiceComponent/HelloWorldService”/>
                <callback>
                    <binding.ws/>
                </callback>
            </reference>
        </component>
    </composite>

清单 4 显示了使用引用指定用于解析服务端点的目标属性,如 <reference target="HellowWorldServiceComponent/HelloWorldService"> 中所示。这仅仅适用于引用指向与其相同的 SCA 域(WebSphere Application Server 计算单元)中的服务的情况。


清单 4. 引用:组件名/服务
				
<?xml version="1.0" encoding="UTF-8"?>
    <composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
          xmlns:system="http:// tuscany.apache.org/xmlns/system/1.0-SNAPSHOT"
          name="helloworldwsclient" >
        <component name="HelloWorldServiceClientComponent">
            <implementation.java class="helloworld.HelloWorldServiceComponent"/>
            <reference
                    name="HelloWorldService"
                    target="HelloWorldServiceComponent/HelloWorldService">
                <interface.java interface="helloworld.HelloWorldService"
                    callbackInterface="helloworld.HelloWorldCallback"/>
                <binding.ws/>
                <callback>
                    <binding.ws/>
                </callback>
            </reference>
        </component>
    </composite>

SCA 功能部件包和 WSDL 文档

Feature Pack for SCA 并不要求提供正式的 WSDL 文档来将 SCA 组件作为 Web 服务公开。对于从 Java 实现入手,并打算将其作为 Web 服务公开的情况,这非常有利于进行快速服务开发。服务开发并完成了服务接口后,应该捕获服务 WSDL,并将其作为接口的正式定义使用。这样可确保 SOA 中适当考虑接口的正式性,并将帮助防止可能会导致新服务的使用者被意外破坏的更改。

使用 WSDL 文档

到目前为止,WSDL 在 SCA 功能部件包中起作用的两个领域是:

  • 定义服务接口

    在定义服务接口时,通过在 WSDL 中运行 wsimport 命令生成 Java 接口和 JAXB 类型来从 WSDL 派生 Java 类。对于客户端,请使用这些生成的类设置代理调用的类型(例如,配合使用 @Reference)。对于服务,编写运行所生成的接口的实现(配合使用 @Service 等)。清单 5 显示了一个示例。

    清单 5. 使用 WSDL 文档定义服务接口

    							
    <wsdl:service name="BackEndComponentService">
    <wsdl:port binding="intf:BackEndComponentServiceSoapBinding" 
    	     name="BackEndComponentService">
     <wsdlsoap:address 
    	     location="http://localhost:9080/BackEndComp/BackEndComponentService"/>
           </wsdl:port>
    </wsdl:service>

  • 使用 Web 服务绑定

    您可以开发可基于 SCA 规范访问和调用 SCA 服务的 SCA 服务客户端。SCA 客户端可以通过相应的 SCA 绑定的功能并结合传统 Java 对象 (POJO)客户端编程模型使用各种服务,如企业 Bean、Web 服务和其他 SCA 服务。

    要开发 SCA 服务客户端,可以首先从现有 WSDL 文件入手,使用 wsimport 工具生成 Java 接口,或者可以从现有 Java 接口入手。还可以使用组件引用开发使用服务或作为目标服务的客户端的组件。

    除了使用来自其他组件的引用的服务外,Feature Pack for SCA 还提供了通过缺省绑定使用来自非 SCA 组件的 SCA 服务的机制。要实现此目的,您将需要使用 Java 实现创建组件定义。在 SCDL 文件中,将添加一个 <reference> 元素,使其引用原始接口和 SCA 组件的字段或 setter。此引用将作为组件的子元素添加。组件属于组合定义的一部分。

    清单 6 显示了一个服务客户端 SCDL 示例。此示例仅显示了指定 binding.ws 的多种方式中的一种。您必需按照所示的方式将 WSDL 定义打包,并在 SCDL 中指定 wsdlElement=<namespace>#wsdl.port。



    清单 6. 服务客户端 SCDL
    						
    <composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
                xmlns:dbsdo="http://tuscany.apache.org/xmlns/sca/databinding/sdo/1.0"
                name="FrontEndComponentComposite">
       <component name="FrontEndComponent">
       <implementation.java 
    	class="test.sca.bindings.ws.components.FrontEndComponentImpl"/>
       <reference name="aBackEndComponentServiceRef" 
    		target="BackEndComp/BackEndComponentService">
      	<interface.javainterface=
    		"test.sca.bindings.ws.components.BackEndComponentService"
    	  callbackInterface="test.sca.bindings.ws.components.BackEndComponentCallback"/>
      	<binding.ws wsdlElement="http://components.ws.bindings.sca.test#wsdl.port
            	 (BackEndComponentService/BackEndComponentService)"/>
      	 <callback>
     	    <binding.ws wsdlElement="http://components.ws.bindings.sca.test#wsdl.binding
              (BackEndComponentCallbackSoapBinding)"/>
      	 </callback>
         </reference>    
       </component>
    </composite>

<binding.ws> 最终使用 WSDL 端口定义,此端口可以由应用程序开发人员提供的 WSDL 显式定义,也可以隐式定义(这时将由 SCA 运行时为您生成端口)。例如,如果在客户端/服务中打包了定义 WSDL 端口的 WSDL 文档,则可以直接在您的 <binding.ws/> 定义上的 SCDL 中引用它。

端点

可以为通过 Web 服务绑定公开服务的 SCA 组件配置自定义端点 URI。

通常,当服务在 SCA Web 服务绑定上公开时,服务端点特定于承载服务的服务器。非 SCA 客户端使用此端点 URI 访问服务。在有些情况下,您可能会希望使用代理服务器作为服务端点来让客户端间接引用服务。例如,代理服务器需要实现集群化 Web 服务绑定端点。可以通过两种方式让客户端使用代理端点:

  • 如果您的端点在 SCA 组合或 WSDL 文档中指定,则必须确保配置的是代理端点,而不是特定于 WebSphere Application Server 的端点。
  • 如果您的客户端使用客户端 SCDL 文档中的 <sca:reference target=""> 属性解析端点,则请使用管理控制台为 SCA 组合配置 HTTP 协议访问的自定义端点。

以下这个示例显示了如何指定自定义端点,从而通过代理服务器提供服务:

  1. 从 WebSphere Application Server 管理控制台导航到 Applications => Application Types => Business-level applications => YourBLA => YourCU,然后单击 Provide HTTP endpoint URL information(图 5)。

    图 5. 指定自定义端点
    图 5. 指定自定义端点

  2. 在下一面板上(图 6),选择提供的缺省 URL 前缀,或指定自定义 URL 端点。图中所示的示例针对代理服务器。

    图 6. 提供 HTTP 端点 URL 信息
    图 6. 提供 HTTP 端点 URL 信息

对于 SCA 客户端位于与其服务提供者相同的域中的情况,此方法最为灵活。使用 <sca:reference target=""> 属性时,可以在客户端未在 SCDL 或 WSDL 文档中指定端点时将 SCA 引用解析到服务端点。

获得端点

客户端可以采取三种方式获得其服务的端点:

  • 组件的组合配置文件的 binding.ws 元素
  • WSDL 端口
  • @target 标注

使用目标标注 (@target) 时,客户端所使用的端点从 SCA 域获得。这优先于 WSDL 中或 binding.ws 元素中指定的端点。因此,当使用 @target 时,您不需要指定任何引用端点。

集群化服务

支持集群化服务。使用作为 Web 服务公开的集群化 SCA 服务时,必须像使用 WebSphere Application Server 承载的任何其他集群化 Web 服务一样配置 WebSphere Proxy Server。还必须将 WebSphere Proxy Server 端点配置为 SCA 客户端使用的端点。无论使用 @target 指定客户端端点,还是在 binding.ws 上或 WSDL 位置属性中指定端点,都要这样做。

对于 @target 方法,您需要在部署服务之后在 WebSphere Application Server 管理控制台中指定代理端点:

  1. 在管理控制台中,导航到组合单元。
  2. 在 Custom Http Endpoints URL 文本框中,输入与您的 WebSphere Proxy Server 所侦听的端点对应的一个安全 HTTP 端点和一个非安全 HTTP 端点。Proxy Server 然后会将请求路由到承载您的服务的特定应用服务器。
  3. 对于 binding.ws 或 WSDL 指定的端点,请输入与 Custom Http Endpoints 文本框中的输入相同的基础 URI 信息(协议、主机和端口)。关键是,端点需要为 Proxy Server 的端点。

对策略集的增强支持

在此版本之前,向 Web 服务绑定公开的服务始终同时通过安全和非安全端点提供。现在,如果服务使用需要 SSL 的安全策略描述,则服务将不在非安全端点提供。

Feature Pack for SCA 与 WebSphere Application Server 策略集功能进行了集成,支持服务和引用上的安全策略。WebSphere Application Server 策略集通过管理控制台定义,均使用简单名称。SCA 策略集作为 XML 限定名称指定。为了消除这个差异,Feature Pack for SCA 包括了一个扩展,允许将 WebSphere Application Server 策略集附加到 SCA 服务和引用。这个扩展是名为 wsPolicySet 的全局 XML 属性,在特定于 WebSphere 的命名空间 (http://www.ibm.com/xmlns/prod/websphere/sca/1.0/2007/06) 中定义。清单 7 给出了如何在 WSDL 中使用此属性的示例。(Feature Pack for SCA 中不支持 SCA Policy Framework 规范的 policySet 属性。)


清单 7. SCDL 引用中的 wsPolicySets 示例
				
<reference name="EchoTimeServiceReferenceFromEchoClient">
   <interface.java 
interface="test.ws.soa.sca.qos.policy.echoRealyServiceTest.echoService.EchoTimeService"/>
   <binding.ws
	wsdlElement="http://echoTime#wsdl.port(EchoTimeService/EchoTimeServiceSoapPort)"
		qos:wsPolicySet="WSHTTPS default" />
		</reference>

另外,使用 <reference target=""> 时,由系统确定的服务或引用端端点将遵循安全 QoS 策略,如清单 7 中所示。清单 8 中显示了 SSL 策略如何应用到 binding.ws 服务,说明了如何解析 qos:namespace。这里的关键是,使用 xmlns:qos 属性指定 XML 命名空间,其中包括 WebSphere wsPolicysSt 扩展属性的定义。引用配置与此类似。


清单 8. binding.ws 服务上的示例 SSL 策略
				
<composite xmlns="http://www.osoa.org/xmlns/sca/1.0" 
           xmlns:wsdl="http://www.w3.org/2004/08/wsdl-instance"
           xmlns:qos=http://www.ibm.com/xmlns/prod/websphere/sca/1.0/2007/06
           targetNamespace=http://www.ibm.com/samples/sca/wsusecase”
           name="EchoServiceWSComposite">
   <component name="EchoServiceWSComponent">
         <service name="EchoService">
             <binding.ws qos:wsPolicySet="WSHTTPS default" 
                         qos:wsServicePolicySetBinding="Provider sample"/>
         </service>
         <implementation.java class=”test.sca.bindngs.ws.components.EchoServiceImpl”/>
     </component>
</composite>

局限性

Web 服务绑定的局限包括:

  • 不支持 WSDL 2.0,也就意味着不支持 wsdl.endpoint。
  • 不考虑 wsdlLocationis,目前被忽略。
  • 服务不能直接通过 binding.ws 从作为实现(而不是提升服务)使用的组合内的组件公开。不过,使用组合作为实现的组件可以为其提供的服务定义 Web 服务绑定。
  • Web 服务绑定以及任何其他绑定都不支持对话接口。
  • 不能将多个 Web 服务绑定捆绑到相同服务。




回页首


EJB 绑定

通过 EJB 绑定,SCA 能够将 SCA 服务作为无状态会话 Bean 公开,从而与现有基于 Java EE 的应用程序集成。EJB 会话 Bean 绑定允许将之前开发的会话 Bean 作为 SCA 服务对待,将其作为 SCA 引用使用 EJB 绑定连接到 SCA 组合中。图 7 显示了服务和引用上使用的 EJB SCA 绑定。


图 7. EJB 绑定
图 7. EJB 绑定

SCA 服务可以作为会话 Bean 公开,以供 Java EE 应用程序使用。组合服务或组合引用中对 EJB 绑定使用的绑定元素为 <binding.ejb>。


清单 9. 使用 EJB 绑定元素的示例
				
<component name="HelloWorldServiceComponent">
         <implementation.java class="helloworld.HelloWorldImpl"/>
         <service name="HelloWorldService">
                <binding.ejb…ejb-version=/>
         </service>
         <reference name =”” >
                <binding.ejb …>
         </ reference >
</component>

对服务和引用,Feature Pack for SCA 提供对 2.x 和 3.0 样式的 EJB 绑定支持。另外还提供对引用目标的支持。

服务端 EJB 绑定

服务端 EJB 绑定只能用于 JAR 打包的 SCA 应用程序。

  • EJB 2:SCA 服务通过无状态 EJB 公开,供 EJB 2 客户端使用。服务的无状态 EJB 在 ejb/sca/ejbbinding/<componentName>/<serviceName> 中绑定到 JNDI。
  • EJB 3:SCA 服务通过无状态 EJB 公开,供 EJB 3 客户端使用。服务的无状态 EJB 在 ejb/sca/ejbbinding/SOAAssureServiceComponentViaAny/SOAAssureServiceSCA#<package qualified SCA service interface with SUFFIX Remote or Local> 中绑定到 JNDI。

引用端 EJB 绑定

引用端 EJB 绑定可用于 JAR 打包的应用程序和 WAR 打包的应用程序。如果要连接到现有 Java EE EJB 模块,此 URI 用于查找 EJB 2.x 主接口或 EJB 3.0 业务接口(此 URI 遵循 Java EE 命名约定)。如果您要使用 binding.ejb 连接到 SCA 服务,则使用这些值:

  • homeInterface:不使用
  • session-type:缺省值“stateless”
  • ejb-version:缺省值“EJB2”

您可以使用 EJB 绑定将引用连接到服务,不过这并不是典型用例。EJB 服务绑定主要用于将 SCA 组件向纯 Java EE 客户端或调用方公开。EJB 引用绑定可以访问在纯 Java EE 环境中运行的无状态 EJB。

EJB 绑定中使用的引用接口可以为远程会话 Bean 接口,也可以为本地会话 Bean 接口。SCA 部署逻辑和绑定实现将对引用接口类进行自检,以确定是本地接口还是远程接口。如果 SCA 组件需要同时能访问会话 Bean 的本地和远程接口,则应该通过两个引用在 SCA 程序集中进行建模,一个用于本地接口,一个用于远程接口。

EJB 3.0 绑定

SCA 应用程序在 WebSphere Application Server 中启动前,在应用程序中定义的所有 EJB 引用和资源引用都无需绑定到应用服务器中定义的实际构件(企业 Bean 或资源)。在定义绑定时,要指定应用程序中可引用和被引用构件的 JNDI 名称。为构件指定的 jndiName 值必须为限定查询名称。

您不需要为 EJB 3.0 模块中的企业 Bean 上的每个接口或 EJB 主接口手动分配 JNDI 绑定名。如果没有显式分配 jndiName 绑定,EJB 容器将分配缺省绑定。

图 8 显示了使用 Java EE EAR 文件中的 EJB 服务的 EJB 引用绑定。此 EJB 引用绑定提供对无状态会话 Bean 提供的服务的访问。


图 8. 示例 EJB 引用绑定
图 8. 示例 EJB 引用绑定

部署了一个将从 Java EE 环境调用的 SCA 服务。假定您需要从未使用 SCA 进行增强的 Java EE 环境中调用服务,因此需要使用 Java EE 编程模型。在这种情况下,SCA 服务部署到能够承载 EJB 绑定的 SCA 运行时中(图 9)。


图 9. 使用 EJB 绑定公开 SCA 服务
图 9. 使用 EJB 绑定公开 SCA 服务

清单 10 显示了如何将上述服务作为 EJB 会话 Bean 进行访问。


清单 10. SCA 组合文件 (default.composite) 中的服务
				
<service name=”CompanyInfo”>
  <interface.java interface=”com.app.jobbank.CompanyInfo”/>
	<binding.ejb ejb-version=”EJB2”/>
 <reference>CompanyInfoComponent/CompanyInfo</reference>
</service>

由于客户端将使用标准 Java EE 编程模型,因此客户端需要知道 SCA 服务的主接口。sca.composite 文件中的服务将如清单 11 中所示。


清单 11. 客户端“查询”代码
				
(CompanyHome)initialContext.lookup("ejb/sca/ejbbinding/CompanyComponent/Company");





回页首


总结

服务和引用允许组件与其他应用程序通信。不过,其设计并不考虑通信方式。绑定执行指定这个通信机制的工作。IBM WebSphere Application Server Feature Pack for SCA 中支持的三个绑定为缺省(或 SCA)绑定,Web 服务绑定和 EJB 绑定。绑定可将通信细节同业务逻辑分离,从而能简化 SCA 应用程序开发人员的工作。



参考资料

学习

获得产品和技术


作者简介

Chao Beck 是服务组件体系结构(Service Component Architecture,SCA)功能包早期计划的技术负责人。她是 Application Integration Middleware 早期计划团队的老资格成员,负责执行 IBM WebSphere Application Server 产品的早期计划。她处理新产品功能的教育开发和交付,并在 GA 前(早期)计划和 GA 后(客户促进)计划期间提供客户支持。


Mark Coats 是一名 WebSpere Application Server 高级开发人员,他关注的领域是 Web 服务和管理控制台。在以前的工作中,他曾是 CORBA 对象请求代理的开发人员和 Attachmate Corporation 公司的通信系统工程师。


Stephen Kinder 是一名高级技术人员,是负责 WebSphere Application Server 中的服务组件体系结构交付的首席架构师。他已在 IBM 工作了 20 年,参与 WebSphere 产品开发已有 10 年时间。




对本文的评价










回页首


IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款