Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

In a typical enterprise, business functions are implemented using various technologies, business data are represented in different ways and business services applications are communicated using heterogeneous protocols. It is almost impossible to converge all the applications onto one technology stack such as web services. To have all the applications in an enterprise talk to each other is a big challenge.

The following are common challenges faced by business integrations:

  • The design of business applications is Business applications are tightly-coupled with the IT infrastructure and early design decisions have to be made before the real deployment.
  • Application developers have are forced to learn many APIs for different protocols/transports and understand many technologies beyond the business domain knowledge
  • Business logic is polluted and coupled by various technology-specific API calls imposed by the IT infrastructure. It's not easy to write and not easy to change.
  • It is almost impossible to converge all the applications onto one technology stack such as web services.

SCA tried to To componentize and neutralize the business services beyond the traditional hardware, software and network and promotes , SCA defines a unified programming model that works with all kinds of existing technologies. There are With SCA, we can apply the following different patterns to support the SOA style business integration:

  • Wrap the legacy application as a service component
  • Invoke the lagacy application using an existing protocol
  • Expose the new business functions over an existing protocol

Let's look at a simple business scenario to see how Tuscany/SCA can help in the enterprise application integration. As illustraed below, the application is to enquery the accounts for a customer to report the total value. For the demonstration purpose, the scenario is exaggrated in the sense of the implementation and communication choices.

Image Added

In the composite, we model the basic unit of business logic as SCA components.

Once we have all the business logic implemented, we can then decorate the references and services with proper bindings so that they can collabrate over the networks.Image Removed

Code Block
<composite xmlns="http://www.osoa.org/xmlns/sca/1.0" xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/1.0"
    targetNamespace="http://bigbank" xmlns:bb="http://bigbank" name="BigBank">

    <component name="AccountServiceComponent">
        <implementation.java class="bigbank.account.AccountServiceImpl" />

        <service name="AccountService">
            <tuscany:binding.jsonrpc uri="/AccountJSONService" />
            <binding.ws wsdlElement="http://bigbank#wsdl.port(AccountService/AccountServiceSoap)" />
            <binding.sca />
        </service>

        <reference name="accountDataService" target="AccountDataServiceComponent" />
        
        <reference name="calculatorService">
            <tuscany:binding.rmi host="localhost" port="8099" serviceName="CalculatorRMIService" />
        </reference>
        
        <reference name="stockQuoteService">
            <binding.ws uri="http://localhost:8081/services/StockQuoteWebService" />
        </reference>

        <property name="currency">EURO</property>
    </component>

    <component name="AccountFeedComponent">
        <implementation.java class="bigbank.account.feed.AccountFeedImpl" />
        <service name="Collection">
            <tuscany:binding.rss uri="/rss" />
            <tuscany:binding.atom uri="/atom" />
        </service>
        <reference name="accountService" target="AccountServiceComponent" />
    </component>

    <component name="AccountDataServiceComponent">
        <implementation.composite name="bb:AccountData" />
    </component>

    <component name="WebResourceComponent">
        <tuscany:implementation.resource location="web" />
        <service name="Resource">
            <tuscany:binding.http uri="/" />
        </service>
    </component>

</composite>

...