Installing  Apache Airavata XBaya 0.6
-------------------------------------

Prerequisites
-------------
Java 1.5 or later
Maven (tested on v 3.0.2)

Build Apache Airavata XBaya JNLP from Source
--------------------------------------------
* Unzip/untar the source file or check out from svn.
* cd to project folder and type
	$ mvn clean install
	Note: in order to skip tests use the command
			$ mvn clean install -Dmaven.test.skip=true
* The compressed binary distribution is created at <PROJECT DIR>/modules/distribution/xbaya-gui/target/apache-airavata-xbaya-gui-<airavata-version>-jnlp.zip

Installing the JNLP Distribution
--------------------------------
* Extract the Apache Airavata XBaya JNLP distribution to a web accessible location
* Update the the xbaya.jnlp file "codebase" with the web access location of the jnlp
      eg: <jnlp ... codebase="http://example-server.com/airavata/xbaya/" ...>
           ...
           ...
          </jnlp> 

Starting Apache Airavata XBaya JNLP
-----------------------------------
Using the web browser
	* Using a browser navigate to the url <JNLP-web-access-url>/xbaya.jnlp
		eg: http://example-server.com/airavata/xbaya/xbaya.jnlp
	* Following the web start download instructions to run XBaya

Using the commandline
	* type for following command in the commandline to start the Airavata XBaya
			$ javaws <JNLP-web-access-url>/xbaya.jnlp
				eg: $ javaws http://example-server.com/airavata/xbaya/xbaya.jnlp

Running Tests
-------------
Once the binary is unzipped, instructions to run the tests should be followed from README

Tutorials 
----------
The airavata website has instructions for basic tutorials:
* For basic understanding of how Airavata works - http://airavata.apache.org/documentation/system/airavata-in-5-minutes.html
* Describing and executing applications using Airavata - http://airavata.apache.org/documentation/system/airavata-in-10-minutes.html
* Advanced tutorial to provide understanding of how to run sample workflows distributed with Airavata - http://airavata.apache.org/documentation/system/advanced-workflow-samples.html
