Apache Airavata - 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 can be used as individual components or 
as an integrated solution to build science gateways or general-purpose distributed 
application and workflow management systems. Users can use Airavata back end services 
and build gadgets to deploy in open social containers such as Apache Rave and modify them 
to suit their needs. Airavata builds on general concepts of service oriented computing, 
distributed messaging, and workflow composition and orchestration.

Release Notes
=============
0.5 is the fourth release of Airavata (skipped 0.1-INCUBATNG). This release focuses on improving test cases
and stability of code, documentation. For detailed tasks list, please see RELEASE_NOTES.

Building from source
====================
For brief installation instructions, see INSTALL
For detailed installation and further instructions refer http://airavata.apache.org/ - Documentation section in left hand panel. Step by step with proper documentation are provided.

Known Issues in This Release
============================
This is the base release and is focused on a good foundation and less on features. This 
version is not recommended for production usage.

Airavata Binary Distribution Directory Structure
================================================

    AIRAVATA_HOME
        |-- bin <folder>
            |--airavata-server.sh
            |--jackrabbit-server.sh
            |--setenv.sh
            |--xbaya-gui.sh
        |-- samples <folder>
        |-- gui <folder>
        |-- lib <folder>
        |-- standalone-server <folder>
        |   |-- lib <folder>
        |   |-- conf <folder>
        |   |-- repository <folder>
        |       -- services <folder>
        |   |-- bin <folder>
                |-- database_scripts
        |-- NOTICE <file>
        |-- LICENSE <file>
        |-- README <file>
        |-- INSTALL <file>


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/system/airavata-in-5-minutes.html
* For intermediate level Airavata features, follow "Airavata in Ten Minutes" tutorial at http://airavata.apache.org/documentation/system/airavata-in-10-minutes.html 
* For advanced use cases, please contact mailing lists - http://airavata.apache.org/community/mailing-lists.html

Description of Directory Structure
==================================
    - bin
      This contains all the executable scripts to run required applications in Airavata distribution.
        Ex: This contains scripts to run XBaya GUI Application, Airavata Server (Axis2 server with Airavata services which
            include messageBroker and messageBox with GFac Axis2 services), Jackrabbit executables to run.
    - 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.

    - lib
      This contains all the libraries required to run the client side code with the jars required to run XBaya GUI. So you can
      easily separate the server side and client side by separating the standalone-server folder and lib directory during the deployment.

    - gui
      Contains the scripts to run WS Notification Listener GUI tool

    - standalone-server
      This contains all the artifacts required during axis2Server runtime with required axis2 service archives

    - standalone-server - lib
      Contains all the libraries required for Axis2 runtime

    - standalone-server - conf
      Contains all the configuration files for Axis2 Runtime and messenger services (messagebroker and messagebox)

    - standalone-server - repository - services
      Contains deployed services in Axis2 runtime.

    - standalone-server - bin
      Commandline scripts to use to start the SimpleAxis2Server and other Axis2 related scripts.

    - standalone-server - bin - database_scripts
      Contains the database scripts which are used to create tables for messagebox and messagebroker services

    - README
      This document.

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