我对 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 的供应商也这样做。)
我认为值得花时间看看。它可以帮助您关注的不是基于协议的服务集成,而是服务的业务逻辑,这才是它们真正带来的价值。