0

根据维基百科

服务组件架构 (SCA)是一种软件技术,用于组合遵循面向服务的架构 (SOA) 原则的应用程序。这是一种具有许多优点的开发模式,包括:

  • 将业务逻辑与其服务实现的细节分离。

  • 支持多种语言的服务,包括 C++、Java、COBOL 和 PHP 以及 XML、BPEL 和 XSLT

  • 能够无缝处理各种通信结构,包括单向、异步、呼叫返回和通知。

  • “绑定”到遗留组件或服务的能力,通常由 Web 服务、EJB、JMS、JCA、RMI、RPC、CORBA 等技术访问。

  • 声明(在业务逻辑之外)服务质量要求的能力,例如安全性、事务和可靠消息传递的使用

  • 数据可以在服务数据对象中表示

我会补充说,

  • 不同模块(组件)之间的松散耦合。

我确实使用 SCA 技术实现了一个简单的软件,在Tuscany Tutorial的帮助下,我可以看到 SCA 异构性及其平台独立性的强大功能。

今天,我正在研究另一个似乎有点相关的模型。它是声明式服务组件模型 (DS),它是一种组件模型,可简化发布和/或引用 OSGi 服务的组件的创建。在 DS 中,通过将 XML 组件声明文件添加到包资源中,OSGI 包似乎被包装为组件。XML 文件通常包含捆绑服务和引用的声明,类似于SCA复合文件。这是此类文件的示例:

<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="it.eng.test.ds.consumer">
   <implementation class="it.eng.test.ds.consumer.Consumer"/>
   <reference bind="bindHappy" cardinality="0..1" interface="it.eng.test.ds.happy.IHappy" name="IHappy" policy="dynamic" unbind="unbindHappy"/>
   <reference bind="bindSad" cardinality="0..1" interface="it.eng.test.ds.sad.ISad" name="ISad" policy="dynamic" unbind="unbindSad"/>
</scr:component>

我的问题是:SCA 和 DS 之间有什么关系吗?DS 能否实现 SCA 异质性及其组件隔离?例如,DS 能否向/来自不同平台(如 SCA 组件)提供服务或引用?DS 组件能否像 SCA 组件被隔离一样独立(隔离)?

4

3 回答 3

2

DS 和 SCA 是互补的东西。一个不能替代另一个。您可以使用 DS 来构建 OSGi 服务。这些服务可以在 OSGi 框架中使用。SCA 可用于描述跨多个节点的更大 SOA 设计。OSGi 可以是 SCA 组件的一种实现类型。因此,在将 OSGi 用作 SCA 的实现类型时,将 DS 用于 OSGi 服务。

于 2014-01-07T13:01:53.423 回答
1

我认为这两种模型都有不同的目的,尽管它们都是基于服务的。DS 是 OSGi 框架的一部分,虽然可以使用远程服务,但主要是 ds 受限于 java/OSGi。有像 Apache Wicket 这样的框架,它们为 Web 环境中的声明式服务提供某种集成。

DS 是一个强大的 java/OSGi 框架。我知道的大多数其他框架的主要区别之一是 OSGi 的动态方面。服务可以随时来来去去。与并发转换器服务相关(在您的链接示例中):在 OSGi 中,您可以在运行时交换实现,模拟它以进行测试等。OSGi 包(主要是带有元信息的 java 项目)可以提供 0...n 服务成分)。大多数最佳实践是将服务定义与实现分离成不同的捆绑包(与您链接的示例不同)。简而言之:ds 的隔离会更好,ds 的目标不是异质性(支持不同的技术平台)(当然,如果你付出一些努力,它可以以一种或另一种方式实现)。希望有帮助。

于 2014-01-07T13:15:25.933 回答
0

正如 BJ 在他的回答中提到的,DS 可以用作 SCA 组件实现类型。类似地,Spring bean、POJO 或 BPEL 流程可以用作 SCA 组件实现类型。

OSGi 包不是一种实现类型,而是 SCA 支持的一种打包机制。特别是,SCA Java POJO 规范使用 OSGi 来实现 Java 工件模块化。SCA 提供了额外的模块化机制,例如组合(参见http://java.dzone.com/articles/service-composition-modularity)。

SCA Java 规范还概述了服务的动态连接是如何工作的,但不需要 SCA 运行时来支持该功能。我不知道托斯卡纳是否支持动态布线,但 Fabric3 (www.fabric3.org) 支持。例如,Fabric3 支持动态服务引用注入(添加、删除、更新)。这对于多重引用(即作为有线服务集合的引用)特别有用。动态布线适用于本地服务和分布式服务。

于 2014-01-08T16:04:32.530 回答