2014-01-07 84 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有點過時並引入了大多數應用程序用例所不需要的複雜性。 –