4

我有使用 Spring 开发 Java Web 应用程序的经验,但在 SOA 领域没有那么多经验。我正在阅读有关 SCA- SCA4J - http://www.service-conduit.org/user-guide.pdf - 其中很多似乎与 Spring 非常相似。

我试图了解 SCA 在哪些情况下有用,但仍然不了解 SCA 提供了哪些功能/优势,而不是单独使用 Spring。

我发现了这篇旧博客文章 - http://rajith.2rlabs.com/2007/08/05/sca-vs-spring-a-reply-to-dans-post/ - 但 SOA 对我来说没有什么特别突出的行话。

如果有人能给出更适合春季开发人员的解释(在 SOA 术语/方法的世界中非常年轻),我将不胜感激。

谢谢

4

3 回答 3

9

我对 Spring 不是最了解,但我非常熟悉 SCA,因为我曾在 IBM 的 WebSphere Integration Developer IDE 中使用过它以及它部署到的环境:WebSphere Enterprise Service Bus 和 WebSphere Process Server。

这实际上与抽象和允许开发人员专注于最重要的事情——业务逻辑的想法有关。我们都熟悉面向对象编程的概念以及该抽象如何更好地代表“现实世界”。然后是 Web 服务和面向服务的架构方法。Web 服务通过减少对逻辑背后的语言的依赖,进一步抽象了我们的逻辑。现在 C++ 或 .Net 或 Java 甚至 RPG 或 COBOL 或任何可能在我们的 Web 服务背后的东西。我们可以让语言和系统以一种不依赖于 CORBA 和库等的方式相互交流。

SCA(服务组件架构)试图将 SOA 提升到一个新的水平。它试图抽象用于与另一个系统或服务通信的协议和地址。原因如下:使用 Web 服务时,作为开发人员,您仍然需要使用协议并编写或挂钩大量样板代码。你必须知道你是http还是https。您必须知道您是(在 Java 世界中)JAX-RPC、JAX-WS 2.0、JAX-WS 2.1、JAX-WS 2.2 还是 JAX-RS(基于 REST)。您需要知道您使用的是 JSON、XML 还是 SOAP,如果是 SOAP,它是 1.0、1.1 还是 1.2?有时你甚至必须知道你的应用服务器的供应商是如何实现某些东西的(你不应该,但它可能是这样的)。然后,如果您希望您的 Web 服务与另一个服务通信,会发生什么情况。但是第二项服务恰好是基于消息传递的。这是否意味着 JMS?MQ?MQ 上的 JMS?其他?那么纯粹的 HTTP POST 和 GET 呢?

这就是 SCA 的用武之地。SCA 尝试将服务的端点抽象化,并对开发人员隐藏协议实现。当您需要一个服务时,您只需通过 SCA API 查找它,然后调用该服务(我认为该方法是执行?至少它在 IBM 的 SCA 扩展中)。但无论如何......现在您不必知道您正在与之通信的服务是 JAX-WS 2.1 或 REST 甚至 MQ。您不必知道您使用的是 SOAP/HTTP 或 JSON/XML 或 SOAP/JMS 等。SCA 向您隐藏这一切。它允许您将不同实现的服务相互连接,这样它们就可以通过一个通用的“服务接口”相互通信。

可以想象,这是在现有抽象技术之上的另一层抽象和技术。但是亲眼所见,我相信它是值得研究的。我知道 IBM 和 Apache(我认为目前还没有想到的其他人)致力于提出 SCA 标准。(实际上,IBM 的 SCA 版本现在是建立在 Apache 提出的开放标准之上的。希望其他支持 SCA 的供应商也这样做。)

我认为值得花时间看看。它可以帮助您关注的不是基于协议的服务集成,而是服务的业务逻辑,这才是它们真正带来的价值。

于 2011-04-20T12:53:53.813 回答
3

SCA 正在通过 OASIS(组装规范)进行标准化,因此您可以从不同的实现中进行选择(例如Apache Tuscany或 Fabric3)。

SCA 根据以下基本构建块定义应用程序:

  • 接口:定义可用的操作
  • 组件:根据它提供哪些“服务”、它需要哪些“引用”以及它公开哪些可配置“属性”来描述一个实现工件
  • 绑定:声明服务或引用使用的通信协议
  • 策略:捕获服务、引用或实现的非功能性需求

为了构建 SOA 应用程序,这些实体的具体“类型”被组装成组合。例如:

  • 接口:WSDL 端口类型,Java 接口
  • 组件实现:Java类、BPEL流程、Python、Spring
  • 绑定:JMS、Web 服务、RMI/IIOP
  • 政策:交易、安全

此外,SCA 定义了统一的客户端 API 以同步和异步(包括单向)调用组件。对于 Java,这包括基于注解的引用注入。

结合这些功能,您可以轻松地从异构技术创建分布式应用程序,并通过添加或交换绑定、实现、接口或策略技术来发展它们。

于 2011-05-09T22:09:57.180 回答
1

与 SCA 相比,与基本 Spring 相比,Spring Integration (http://www.springsource.org/spring-integration) 值得一看,因为 Spring Integration 提供了一个非常好的框架,可以透明地将远程组件连接在一起。

于 2013-01-07T11:56:10.993 回答