根据Wikipedia,
服务组件体系结构(SCA)是一种软件技术,用于组合遵循面向服务的体系结构(SOA)原则的应用程序。它是一种开发模型,具有许多优点,包括:
将业务逻辑与其细节分离 服务实施。
支持多种语言的服务,包括C ++,Java, COBOL,PHP以及XML,BPEL和XSLT
能够与各种通信结构无缝协作 包括单向,异步,回叫和通知。
“绑定”到访问的旧组件或服务的能力 通常通过Web Services,EJB,JMS,JCA,RMI等技术, RPC,CORBA等。
声明(业务逻辑之外)质量的能力 服务要求,例如安全性,事务和使用 可靠消息传递
数据可以在服务数据对象
我想补充一下,
我确实使用SCA技术实现了一个简单的软件,在Tuscany Tutorial的帮助下,我可以看到SCA异构性的强大功能及其平台独立性。
今天,我正在寻找另一种似乎有点相关的模型。它是Declarative Services Component Model (DS),它是一个组件模型,可以简化发布和/或引用OSGi服务的组件的创建。在DS中,OSGI包似乎通过向bundle资源添加XML组件声明文件而作为组件包装。 XML文件通常包含捆绑服务和引用的声明, SIMILAR 到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异构性及其组件隔离?例如,Can DS是否为SCA组件等不同平台提供服务或引用? DS组件是否可以独立(隔离),SCA组件是隔离的?
答案 0 :(得分:2)
答案 1 :(得分:1)
我认为这两种模式都有不同的用途,尽管它们都是基于服务的。 DS是OSGi框架的一部分,虽然可以使用远程服务,但主要是ds受限于java / OSGi。有像Apache Wicket这样的框架,它们为Web环境中的声明性服务提供某种集成。
DS是java / OSGi的强大框架。我所知道的大多数其他框架的主要缺点之一是OSGi的动态方面。服务随时都可以来来去去。与并发转换器服务相关(在您的链接示例中):在OSGi中,您可以在运行时调试实现,模拟它以用于测试目的等.OSGi包(主要是具有元信息的Java项目)可以提供0 ... n服务组件)。大多数最佳实践是将服务定义与实现分离为不同的包(与您链接的示例不同)。简而言之:使用ds进行隔离会更好,异构性(支持不同的技术平台)不是针对ds的(当然,如果你付出一些努力,它可以通过某种方式实现)。希望有所帮助。
答案 2 :(得分:0)
正如B.J.在他的回答中提到的,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支持动态服务引用注入(添加,删除,更新)。这对于多重引用(即,作为有线服务的集合的引用)特别有用。动态布线适用于本地和分布式服务。