Apache Tuscany SCA Runtime
==========================

Tuscany SCA Native is an SCA (Service Component Architecture) runtime written
in C++ and integrated with the Apache HTTPD server.

It supports SCA components written in C++ and Python. Experimental support
for other programming languages is under construction. SCA bindings are
available for REST services and the JSON-RPC, ATOMPub and RSS protocols.
User signin is implemented using OpenID and OAuth.

Several useful SCA components are provided on top of the SCA runtime, which
can be used to help assemble distributed SCA composite applications:

Cache: key/value memory cache, using Memcached;
Chat: XMPP chat, using Apache Vysper and Libstrophe;
Constdb: fast persistent store for mostly constant data, using TinyCDB;
Filedb: key/value persistent store, using plain files;
Http: HTTP client, using Libcurl;
Smtp: SMTP client, using Libcurl;
Log: distributed logger, using Facebook Scribe;
Queue: AMQP queuing, using Apache Qpid/C;
Sqldb: SQL database, using PostgreSQL and PgBouncer;
Webservice: Web service gateway, using Apache Axis2/C.

These components present a simple ATOMPub REST interface, allowing you to work
with a data cache, a database, a message queue or a chat connection for example
very simply using HTTP GET, POST, PUT and DELETE methods.


Getting the source code
=======================

To checkout the source code, do this:
git clone git://git.apache.org/tuscany-sca-cpp

To checkout the source code with commit access, do this:
git clone git://git.apache.org/tuscany-sca-cpp
cd tuscany-sca-cpp/.git
curl -OL http://git.apache.org/authors.txt
cd ..
git config svn.authorsfile .git/authors.txt
git config user.email <you>@apache.org
git config svn.rmdir true
git svn init --prefix=origin/ -s https://svn.apache.org/repos/asf/tuscany/sca-cpp
git svn rebase


Layout
======

Here's a rough guide to the Tuscany SCA source tree:

 /
 |-- trunk                    Master development branch
 |   |
 |   |-- kernel               SCA runtime kernel
 |   |
 |   |-- modules              Modules that plug into the runtime
 |   |   |-- atom             AtomPub data encoding
 |   |   |-- edit             Composite app editor
 |   |   |-- http             HTTP protocol
 |   |   |-- java             Support for Java components
 |   |   |-- json             JSON data encoding
 |   |   |-- oauth            User signin using OAuth
 |   |   |-- opencl           Support for OpenCL components
 |   |   |-- openid           User signin using OpenID
 |   |   |-- python           Support for Python components
 |   |   |-- rss              RSS data encoding
 |   |   |-- scheme           Support for Scheme components
 |   |   |-- server           Apache HTTPD server integration
 |   |   |-- wsgi             Python WSGI server integration
 |   |
 |   |-- components           Useful SCA components
 |   |   |-- cache            Memcached key/value cache
 |   |   |-- chat             XMPP chat
 |   |   |-- constdb          TinyCDB constant persistent store
 |   |   |-- filedb           Plain file persistent store
 |   |   |-- http             HTTP client
 |   |   |-- log              Scribe logger
 |   |   |-- queue            AMQP message queue
 |   |   |-- smtp             SMTP client
 |   |   |-- sqldb            PostgreSQL database
 |   |   |-- webservice       Axis2 Web service gateway
 |   |
 |   |-- samples              Sample Applications
 |   |   |-- store-cluster    Online store on a proxy + server + db cluster
 |   |   |-- store-cpp        Online store written in C++
 |   |   |-- store-gae        Online store written in Python, working on GAE
 |   |   |-- store-java       Online store written in Java
 |   |   |-- store-nosql      Online store using a NoSQL database
 |   |   |-- store-python     Online store written in Python
 |   |   |-- store-scheme     Online store written in Scheme
 |   |   |-- store-sql        Online store using an SQL database
 |   |   |-- store-vhost      Online store on virtual hosts
 |   |
 |   |-- macos                Automated install on Mac OS X 10.7.4
 |   |-- ubuntu               Automated install on Ubuntu 12.04
 |   |-- patches              Temporary patches to some of the dependencies
 |   |-- unmaintained         Unmaintained or outdated modules
 |
 |-- branches                 Topic and release branches
 |
 |-- tags                     Release tags


Building
========

See the INSTALL file at the root of the source tree.


Contributing to the project
===========================

To contribute to the project or report issues see the Tuscany development
mailing list:
dev@tuscany.apache.org

Archives:
http://www.mail-archive.com/dev@tuscany.apache.org
http://marc.info/?l=tuscany-dev

To subscribe send an email to:
dev-subscribe@tuscany.apache.org

