Apache Airavata Source - README.txt
Licensed under Apache License 2.0 - http://www.apache.org/licenses/LICENSE-2.0
--------------------------------------------------------------------------------

About
=====
Apache Airavata, a software framework to executing and managing computational jobs on 
distributed computing resources including local clusters, supercomputers, national grids, 
academic and commercial clouds. Airavata builds on general concepts of service oriented computing, 
distributed messaging, and workflow composition and orchestration. Airavata bundles a server package,
a client API to access the server and a general purpose GUI XBaya as a application registration, workflow
construction execution and monitoring. XBaya GUI also provides capabilities to access the workflow 
produced data.  

Contact
========
For additional information about Apache Airavata, please contact the user or dev mailing lists:
http://airavata.apache.org/community/mailing-lists.html

Description of Airavata Directory Structure
==================================
    - modules
      This contains the source code of all the airavata maven projects organized as libraries, services and distributions

    - samples
      This contains all the system wide samples provided in Airavata distribution. All the sample are having its README file
      So users have to refer each readme file before running each sample.

    - tools
      This contains source code libraries that can enhance Airavata features.

    - README
      This document.
    
    - RELEASE_NOTES
      The describe the key features and know issues with the current release. 

    - INSTALL
      This document will contain information on installing Apache-Airavata.

Airavata Source Distribution Directory Structure
================================================

    AIRAVATA_TRUNK
		├── modules
		│   ├── airavata-client
		│   ├── commons
		│   │   ├── gfac-schema
		│   │   ├── utils
		│   │   ├── workflow-execution-context
		│   │   └── workflow-tracking
		│   ├── distribution
		│   │   ├── airavata-client
		│   │   ├── airavata-server
		│   │   ├── xbaya-gui
		│   │   └── release
		│   ├── gfac-core
		│   ├── integration-tests
		│   ├── registry
		│   │   ├── airavata-jpa-registry
		│   │   ├── airavata-registry-service
		│   │   ├── airavata-registry-test
		│   │   ├── registry-api
		│   ├── rest
		│   │   ├── client
		│   │   ├── mappings
		│   │   ├── service
		│   │   └── webapp
		│   ├── security
		│   ├── credential-store
		│   ├── server
		│   ├── test-suite
		│   ├── workflow-interpreter
		│   ├── workflow-model
		│   │   ├── workflow-model-component-node
		│   │   └── workflow-model-core
		│   ├── ws-messenger
		│   │   ├── commons
		│   │   ├── distribution
		│   │   ├── messagebox
		│   │   ├── messagebroker
		│   │   ├── message-monitor
		│   │   └── samples
		│   └── xbaya-gui
		├── samples
		├── tools
		│   ├── phoebus-integration
		│   └── registry-migrate
		├── INSTALL
		├── LICENSE
		├── NOTICE
		├── README
		└── RELEASE_NOTES

Available Binary Distributions
==============================

Server Distributions
--------------------
* Airavata Server
  The Airavata Server binary distribution allows you to run a standalone Airavata Server which includes all the airavata services 
  shipped with a default derby database as the backend registry. For stable purposes, a mysql configuration is recommended. 

* Airavata Server Web Application
  This is similar package as the Airavata Server but is distributed as the server Web Application archive.
  This war is compatible with Apache Tomcat application server. The war bundles all airavata services 
  enabled by defualt to startup a derby database as the backend registry. For stable purposes, a mysql configuration is recommended. 

Client Distributions
--------------------
* Airavata XBaya
  The Airavata XBaya distribution is a client GUI application with features to register applications as web services, construct workflows,
  execute and monitor workflows and browse the generated results from the airavata registry.

* Airavata Client
  The Airavata Client distribution is a set of libraries and configurations files that allow a 3rd party application to programatically 
  access Airavata functionality through Airavata API. 
  
 How to test and run samples
===========================
* If you built Airavata from source, and if you see "BUILD SUCCESS", then the test cases should have passes.
* The test cases are beyond unit level, they startup embedded services and run through basic workflow use cases.
* To walk through Airavata features, follow "Airavata in Five Minutes" tutorial at http://airavata.apache.org/documentation/tutorials/airavata-in-5-minutes.html. 
* For intermediate level Airavata features, follow "Airavata in Ten Minutes" tutorial at http://airavata.apache.org/documentation/tutorials/airavata-in-5-minutes.html.
* For advanced use cases, please contact mailing lists - http://airavata.apache.org/community/mailing-lists.html 
