SCA优于Spring的优势?

我有使用Spring开发java Web应用程序的经验,但与SOA的世界不同。 我正在阅读有关SCA-SCA4J的内容 – http://www.service-conduit.org/user-guide.pdf – 其中很多内容与Spring非常相似。

我试图了解SCA有用的情况,但仍然不了解SCA提供的使用Spring独立版的function/优点。

我找到了这篇旧博客文章 – http://rajith.2rlabs.com/2007/08/05/sca-vs-spring-a-reply-to-dans-post/ – 但是没有什么能够从SOA中脱颖而出行话。

我很感激,如果有人能给出一个更适合spring开发人员的解释(他在SOA术语/方法论的世界里非常环保)。

谢谢

我不是最了解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? JMS over MQ? 其他? 那么纯粹的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的供应商也这样做。)

我认为值得花些时间去研究一下。 它可以帮助您更多地关注基于协议的服务集成,而不是服务的业务逻辑,这实际上是它们带来的价值。

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

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

  • interface:定义可用的操作
  • 组件:描述一个实现工件,它提供了哪些“服务”,它所需的“引用”,以及它所暴露的可配置“属性”
  • binding:声明服务或引用使用的通信协议
  • 策略:捕获服务,引用或实现的非function性需求

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

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

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

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

在与SCA进行比较时,值得关注Spring Integration(http://www.springsource.org/spring-integration),而不是基本的Spring,因为Spring Integration提供了一个非常好的框架,用于透明地将远程组件连接在一起。