According to Wikipedia,
Service Component Architecture (SCA) is a software technology used for composing applications that follow Service Oriented Architecture (SOA) principles. It is a development model that comes with many advantages including:
Separation of business logic from the details of its service implementation.
Supports services in a multitude of languages including C++, Java, COBOL, and PHP as well as XML, BPEL, and XSLT
The ability to seamlessly work with various communications constructs including One-Way, Asynchronous, Call-Return, and Notification.
The ability to "bind" to legacy components or services, accessed normally by technologies such as Web Services, EJB, JMS, JCA, RMI, RPC, CORBA and others.
The ability to declare (outside of business logic) the Quality of Service requirements, such as Security, Transactions and the use of Reliable Messaging
Data could be represented in Service Data Objects
I would add,
- Loose Coupling between the different modules (components).
I did implement a simple software using SCA technology, and I could see the power of SCA heterogeneity and its platform independence, with help of Tuscany Tutorial.
Today, I am looking at another model that seems a bit related. It is the Declarative Services Component Model (DS), which is a component model that simplifies the creation of components that publish and/or reference OSGi Services. In DS, an OSGI bundle seems to be wrapped as a component by adding an XML component declaration file to the bundle resources. The XML file generally contains declarations of the bundle services and references, something SIMILAR to SCA composite file. Here's an example of such file:
<?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>
My questions is: Is there any kind of relationship between SCA and DS? Can DS achieve the SCA heterogeneity, and its component isolation? For example, Can DS provide services or references to/from different platforms like SCA components? Can a DS component be independent (isolated) in the same sense an SCA component is isolated?
DS and SCA are complimentary things. One is not a substitute for the other. You can use DS to build OSGi services. These services can be using in an OSGi framework. SCA can be used to describe a larger SOA design across multiple nodes. OSGi can be an implementation type for SCA components. So use DS for OSGi services when using OSGi as an implementation type for SCA.