Apache Tuscany SCA 2.0 June 2012 Release Notes
===============================================

Apache Tuscany provides a runtime based on the Service Component
Architecture. SCA is a set of specifications aimed at simplifying SOA
Application Development which are being standardized at OASIS as part
of Open Composite Services Architecture (Open CSA) - http://www.oasis-opencsa.org/.

Overview
--------

This Apache Tuscany SCA release includes implementations of the main SCA 
specifications and recent updates from Open CSA drafts including:

        * SCA Assembly Model V1.1 
        * SCA Policy Framework V1.1 
        * SCA Java Common Annotations and APIs V1.1
        * SCA Java Component Implementation V1.1
        * SCA Web Services Binding V1.1
        * SCA JMS Binding V1.1
        * SCA Spring Client and Implementation V1.1
        * SCA WS-BPEL Client and Implementation V1.1
        (portions of) SCA JEE Integration V1.1

For those specs marked * the Tuscany runtime passes the 
OASIS conformance tests (otests) for the specs as they stand
at the time of release. If you want to see the tests run you
can manually remove the comment that prevents them running 
in the main build in the following Maven pom:

        testing/compliance-tests/pom.xml

The distribution also includes implementations of many features not 
yet defined by SCA specifications, including:

        - SCA bindings for RMI, REST, WebSockets, Comet, HTTP, JSON-RPC, JSONP, ATOM.
        - Databindings for JAXB, Axis2's AXIOM, DOM, SAX and StAX
        - Integration with various web frameworks

The Tuscany SCA Runtime can be configured as a single node SCA domain.
 
In addition Tuscany SCA supports the following host-deployment options: -
        - running standalone 
        - running in a OSGi enabled runtime Environment (Equinox)
        - running with distributed nodes across multiple JVMs
     
See the CHANGES file for a detailed list of the features in this release.


Support
-------

For more information on Apache Tuscany visit the website at:

    http://tuscany.apache.org/tuscany/
 
Any issues with this release can be reported to Apache Tuscany
using the mailing lists or in the JIRA issue tracker.

    Mailing list archives:

       http://mail-archives.apache.org/mod_mbox/tuscany-user/
       http://mail-archives.apache.org/mod_mbox/tuscany-dev/

    Jira:

       http://issues.apache.org/jira/browse/TUSCANY

To join the project's mailing lists follow the instructions at:

    http://incubator.apache.org/tuscany/mailing-lists.html

To find out more about OASIS Open CSA go to: 

    http://www.oasis-opencsa.org.

Apache Tuscany welcomes your help. Any contribution, including code,
testing, improving the documentation, or bug reporting is always
appreciated. 

Thank you for using Apache Tuscany!

- The Tuscany Team.
