Apache Tuscany SCA 1.6.1 November 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 1.6.1 release includes implementations of the
     main SCA specifications including:

        SCA Assembly Model V1.0
        SCA Policy Framework V1.0
        SCA Java Common Annotations and APIs V1.0
        SCA Java Component Implementation V1.0
        SCA Spring Component Implementation V1.0
        SCA BPEL Client and Implementation V1.0
        SCA Web Services Binding V1.0
        SCA EJB Session Bean Binding V1.0

    It also includes implementations of many features not yet defined
    by SCA specifications, including:

        - SCA bindings for Direct Web Remoting, RSS and ATOM Feeds, 
          HTTP resources, JSON-RPC, PUB/SUB Notifications, and RMI.
        - SCA implementation types for OSGI, XQuery, BPEL, Widget and various 
          dynamic languages including Groovy, Javascript, Python and Ruby
        - Databindings for Service Data Objects (SDO), JAXB, XmlBeans, 
          Axis2's AXIOM, JSON, SAXON, DOM, SAX and StAX

    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 with distributed nodes across multiple JVMs
        - running with embedded Jetty or Tomcat
        - running as part of a standard web application                                     
     
    The Webapp samples included in this release have been tried and tested on 
        - Tomcat 5.5.20 and Tomcat 6.0.14
        - Jetty 6.1.3
        - Geronimo 2.0.2 Tomcat6 jee5
        - WebSphere 6.1 fix pack 9

See the CHANGES file for a detailed list of the features in this release.

Release packaging
-----------------

The source distribution contains the entire release contents in source form, comprising
- Tuscany runtime modules
- Tuscany tools
- integration and verification tests
- samples, tutorials and demos
- maven build files for all the above

The binary distribution contains
- the Tuscany runtime modules in binary form
- third-party runtime dependencies for these modules
- samples, tutorials and demos with full source code and pre-built jar files
- ant scripts for running and building the samples, tutorials and demos
- maven build files for building the samples, tutorials and demos

The Tuscany runtime modules and tools are available from the Maven repository
 https://repository.apache.org/content/groups/public/

The Apache Tuscany SCA Tools Core Feature for Eclipse is available at the Eclipse update site
 http://www.apache.org/dist/tuscany/java/sca/1.6.1/tuscany-sca-1.6.1-updatesite/

Notes:

1. The following Tuscany runtime modules are distributed via the maven repository only and are
   not included in the binary distribution:
    tuscany-binding-sca-corba-1.6.1.jar   (conflicts with tuscany-binding-sca-1.6.1.jar)
    tuscany-host-corba-jee-1.6.1.jar      (conflicts with tuscany-host-corba-jse-1.6.1.jar)
    tuscany-node-launcher-osgi-1.6.1-jar  (needs dependencies not in binary distro lib directory)
    tuscany-policy-transaction-1.6.1.jar  (has dependency conflicts with binary distro lib directory)

2. The following Tuscany runtime modules are included in the binary distribution but are not included
   in tuscany-sca-all-1.6.1.jar and tuscany-sca-manifest.jar:
    tuscany-binding-atom-js-dojo-1.6.1.jar     (conflicts with tuscany-binding-atom-js-1.6.1.jar)
    tuscany-binding-jsonrpc-js-dojo-1.6.1.jar  (conflicts with tuscany-binding-jsonrpc-js-1.6.1.jar)
    tuscany-host-tomcat-1.6.1.jar              (conflicts with tuscany-host-jetty-1.6.1.jar)
    tuscany-implementation-widget-runtime-dojo-1.6.1.jar  (conflicts with tuscany-implementation-widget-runtime-1.6.1.jar)
    tuscany-web-javascript-dojo-1.6.1.jar      (conflicts with tuscany-web-javascript-1.6.1.jar)
   If these files are needed at runtime, the classpath must be set up to include these jars explicitly
   and exclude the jars for which conflicts are indicated above.

3. The Erlang binding and samples require Erlang/OTP to be installed. This isn't included in the
   binary distribution and must be downloaded and installed separately if required.

4. For samples, demos, and tutorials packaged as web applications (.war files), the .war files
   are omitted from the binary distribution to save space (except for the calculator sample).
   These .war files can be created using the ant scripts provided.

5. The Tuscany SCA Eclipse Tools Feature and Plug-in are distributed via the Tuscany Eclipse
   update site only.

6. Other Tuscany tools are distributed via the maven repository only, except for the following jar
   which is also included in the binary distribution:
    tuscany-wsdl2java-1.6.1.jar  (needed by the helloworld-bpel sample)

Support
-------

For more information on Apache Tuscany visit the website at:

    http://tuscany.apache.org/
 
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/ws-tuscany-user/
       http://mail-archives.apache.org/mod_mbox/ws-tuscany-dev/

    Jira:

       http://issues.apache.org/jira/browse/TUSCANY

To join the project's mailing lists follow the instructions at:

    http://tuscany.apache.org/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.
