Apache Tuscany SCA 2.0-Beta1 June 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-Beta1 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.
