
SCA 编程模型基础知识
软件组件这一概念是构成“服务组件体系结构”(SCA) 编程模型的基础。组件是用于实现某种逻辑的单元,并通过接口使该逻辑可供其他组件使用。组件可能还要求使服务可供其他组件使用。在这种情况下,组件将呈示对这些服务的引用。
在 SCA 中,每个组件都必须至少呈示一个接口。图 1 中显示的组合件图有三个组件。每个组件都有一个用字母 I 表示的接口。组件也可以引用其他组件。引用以字母 R 表示。然后,在组合件图中链接引用和接口。实质上,集成开发者通过将引用与用于实现必需逻辑的组件的接口连接起来“解析”引用。

调用 SCA 组件
为了能够访问要调用的服务,SCA 编程模型提供了一个 ServiceManager 类,从而使开发者能够按名称查找可用服务。下面是一个用于说明如何查找服务的典型 Java™ 代码段。ServiceManager 用来获取对于由系统提供的 BOFactory 服务的引用:
//Get service manager singleton
ServiceManager smgr = new ServiceManager();
//Access BOFactory service
BOFactory bof =(BOFactory)
smgr.locateService("com/ibm/websphere/bo/BOFactory");
开发者可以按照相似的机制,通过指定 locateService 方法中引用的服务名称,来获取对于他们自己的服务的引用。在您通过使用 ServiceManager 类获取对于某个服务的引用之后,便可以在不用考虑调用协议和实现类型的情况下对该服务调用任何可用操作。
- 同步 SCA 调用:使用此调用方式时,调用者将同步等待返回响应。这种方式是传统的调用机制。
- 异步 SCA 调用:此机制使调用者能够在不必等待立即生成响应的情况下调用服务。调用者将获得“凭单”,而不是获得响应。此凭单的准确用法取决于所使用的特定异步调用方式。
- 具有回调的异步方式 SCA 调用:此调用方式将返回响应的职责委派给被调用者。调用者需要呈示一项特殊操作(即,回调操作),当响应就绪时,被调用者便可以调用此操作。
- 具有延迟响应的异步方式 SCA 调用:在这种调用方式下,客户端将调用一项服务,然后继续进行处理,直到客户端请求捕获响应为止。
- 使用单向调用的异步方式。当调用的操作不提供返回值时,此方式适用。
导入
有时候,业务逻辑由外部系统上可用的组件或功能(如较旧的应用程序)或者由其他外部实施来提供。在这些情况下,集成开发者无法通过以下方式来解析引用:将引用连接至其中包含此开发者所需实现的组件,从而将此引用连接至“指向”外部实现的组件。这样一个组件被称为导入。您在定义导入时,需要指定可以如何根据位置和调用协议来访问外部服务。
导出
同样,如果外部应用程序(通常为案例)需要访问您的组件,那么您必须使用此组件可访问。可使用一个向“外部世界”呈示您的逻辑的特殊组件使它可访问。这样一个组件被称为导出。还可以同步调用或者异步调用导出。
独立引用
在 IBM® Business Process Manager 中,SCA 服务模块被打包为一个 Java EE EAR 文件,此文件中包含若干其他的 Java EE 子模块。可以将 Java EE 元素(例如,WAR 文件)与 SCA 模块一起打包。也可以将非 SCA 工件(例如,JSP)与 SCA 服务模块一起打包。这种打包方式使它们能够通过 SCA 客户端编程模型使用一种称为“独立引用”的特殊类型的组件来调用 SCA 服务。
SCA 编程模型是一种声明性很强的编程模型。无论是应该采用同步调用还是异步调用,集成开发者都可以直接在组合件图中以声明性方式配置多个方面(例如,调用的事务性行为以及安全凭证的传播)。SCA 运行时将负责实现在这些修饰符中指定的行为(而不是由开发者负责)。SCA 的声明灵活性是这种编程模型的其中一项最强大的功能。开发者可以集中精力实现业务逻辑,而不必着重于解决技术方面的问题(例如,能够接受异步调用机制)。所有这些方面都由 SCA 运行时自动处理。
限定符
限定符用于管理服务客户端与目标服务之间的交互。可以对服务组件引用、接口和实现指定限定符,限定符通常位于实现外部。
下面是不同类别的限定符:
- 事务限定符,用于指定在 SCA 调用中处理事务性上下文的方式
- 活动会话限定符,用于指定活动会话上下文的传播方式。
- 安全性限定符,用于指定许可权
- 异步可靠性用于提供异步消息传递规则
SCA 允许以声明方式将这些服务质量 (QoS) 限定符应用于组件(不需要编程或者更改服务实现代码)。可以使用 WebSphere® Integration Developer 来添加服务限定符。通常,在您准备考虑部署解决方案时应用 QoS 限定符。