2014-01-07 131 views
0

Wikipedia服务组件架构和声明式服务组件模型

服务组件架构(SCA)是用于撰写遵循面向服务的架构(SOA)的原则应用的软件技术。它是一款具有许多优点,包括发展模式:从 服务实现的细节业务逻辑的

  • 分离。

  • 支持服务的语言包括C众多++,Java和 COBOL和PHP以及XML,BPEL和XSLT

  • 与各种通信无缝工作的能力,构建 包括单向,异步,回拨和通知。

  • 的能力, “绑定”,以传统的组件或服务,访问 通常由技术,如Web服务,EJB,JMS,JCA,RMI, RPC,CORBA等。

  • 声明(业务逻辑的外部)的能力的 服务要求,例如安全性,事务和可靠消息传递的使用 质量

  • 数据可以在服务数据来表示对象

我想补充,

  • 不同模块之间的松耦合s(组件)。

我确实使用SCA技术实现了一个简单的软件,在Tuscany Tutorial的帮助下,我可以看到SCA异构性的强大功能及其平台独立性。

今天,我正在看另一个模型,似乎有点相关。它是Declarative Services Component Model (DS),它是一种简化创建发布和/或引用OSGi服务的组件的组件模型。在DS中,通过将XML组件声明文件添加到捆绑软件资源中,OSGI捆绑包似乎被封装为组件。 XML文件通常包含对bundle服务和引用的声明,对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异质性及其组件隔离?例如,DS可以提供​​服务或引用/从不同的平台,如SCA组件? DS组件是否可以独立(隔离),即SCA组件是隔离的?

回答

2

DS和SCA是免费的东西。一个不能替代另一个。您可以使用DS来构建OSGi服务。这些服务可以在OSGi框架中使用。 SCA可以用来描述跨多个节点的更大的SOA设计。 OSGi可以是SCA组件的实现类型。因此,在使用OSGi作为SCA的实现类型时,请将DS用于OSGi服务。

+0

谢谢,但是如果我将它们用作SCA组件的实现,我可以保留OSGI捆绑包的活力吗?换句话说,我能在运行时加载和卸载SCA组件(它是作为OSGI包实现的)吗? –

1

我认为这两种模式都有不同的用途,尽管它们都是基于服务的。 DS是OSGi框架的一部分,虽然可以使用远程服务,但主要是ds限制为java/OSGi。有像Apache Wicket这样的框架为Web环境中的声明性服务提供某种集成。

DS是一个强大的java/OSGi框架。对于我所知道的大多数其他框架来说,其中一个主要的缺点是OSGi的动态方面。服务可以随时来去。与并发转换器服务相关(在您的链接示例中):在OSGi中,您可以在运行时扩展实现,模拟它以用于测试目的等。OSGi包(主要是具有元信息的Java项目)可以提供0 ... n服务组件)。大多数情况下,最佳实践是将服务定义与实现分离为不同的包(与链接的示例不同)。简而言之:ds的隔离效果会更好,异构性(支持不同的技术平台)不是针对ds的(当然,如果您付出一些努力,它可以通过某种方式实现)。希望有所帮助。

0

由于B.J.在他的回答中提到,DS可以用作SCA组件实现类型。同样,Spring bean,POJO或BPEL流程可以用作SCA组件实现类型。

OSGi包不是实现类型,而是SCA支持的打包机制。特别是,SCA Java POJO规范使用OSGi for Java工件模块化。 SCA提供了额外的模块化机制,如复合材料(请参阅http://java.dzone.com/articles/service-composition-modularity)。

SCA Java规范还概述了服务的动态连线如何工作,但不需要SCA运行时来支持该功能。我不知道托斯卡纳是否支持动态布线,但Fabric3(www.fabric3.org)支持。例如,Fabric3支持动态服务引用注入(添加,删除,更新)。这对于多重参考(即参考是有线服务的集合)特别有用。动态接线适用于本地以及分布式服务。

+0

我目前正在检查面料3,但我有一个与您的答案有关的问题。使用OSGI作为SCA实现类型的功能是什么?为什么不仅仅是JAVA的实现? –

+0

我个人的选择是使用SCA Java实现类型。使用OSGi类型可能会提供对Service Registry和其他特定于OSGi的API的访问权限,但我知道的大多数用例(包括动态的)都可以使用SCA Java(或Spring bean作为SCA组件)实现,如果您更喜欢框架)。国际海事组织,OSGi服务注册表API有点过时并引入了大多数应用程序用例所不需要的复杂性。 –