我有使用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术语/方法论世界中非常环保)的解释,我会很感激。
由于
答案 0 :(得分: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? 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的供应商也这样做。)
我认为值得花些时间来研究一下。它可以帮助您更多地关注基于协议的服务集成,而不是服务的业务逻辑,这实际上是它们带来的价值。
答案 1 :(得分:3)
SCA正在通过OASIS(Assembly Specification)进行标准化,因此您可以选择不同的实施方式(例如Apache Tuscany或Fabric3)。
SCA根据以下基本构建块定义应用程序:
为了构建SOA应用程序,这些实体的具体“类型”被组合成复合体。例如:
此外,SCA定义了统一客户端API,以同步和异步(包括单向)调用组件。对于Java,这包括基于注释的引用注入。
通过组合这些功能,您可以轻松地从异构技术创建分布式应用程序,并通过添加或交换绑定,实现,接口或策略技术来发展它们。
答案 2 :(得分:1)
与SCA相比,值得关注的是Spring Integration(http://www.springsource.org/spring-integration),而不是基本的Spring,因为Spring Integration提供了一个非常好的框架,用于透明地将远程组件连接在一起。