Apache Tuscany SCA 2.0-M2 April 2009 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
--------

     The Apache Tuscany SCA 2.0-M2 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 WS-BPEL Client and Implementation V1.1
        (portions of) SCA JEE Integration V1.1

    It also includes implementations of many features not yet defined
    by SCA specifications, including:

        - SCA bindings for RMI.
        - 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 or 
    as an SCA domain distributed across multiple nodes. 
    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.
