Apache Tuscany SCA 2.0-M5.1 October 2010 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-M5.1 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 Client & Implementation: Spring 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, HTTP, JSON-RPC, 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 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.

Known Issues
------------

If when building using the source distribution of tuscany you see build errors 
relating to use of hazelcast, this is a known issue which occurs in some
environments where our use of hazelcast doesn't match up with your network
configuration. If you see these errors please contact us on the mailing list
as described below. You may wish to build using the
"mvn -fae"
command, so that the rest of the build completes before it reports the issue.  

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.
