Apache Airavata Release Notes

See http://issues.apache.org/jira/browse/AIRAVATA-* (where * is the number of the issue below)

Apache Airavata Version 0.14 Released on 2014-12-20
===================================================
Below you will find the detail list of JIRA tasks/issues resolutions incorporated in 0.14.

Release Notes - Airavata - Version 0.14

** Tasks
    * [AIRAVATA-1063] - HostAddress in ComputationalResourceScheduling is required.
    * [AIRAVATA-1463] - Remove airavata-client-api dependency from other module
    * [AIRAVATA-1467] - Zookeeper Implementation to Advertise Available/up and running Airavata Services/Components
    * [AIRAVATA-1471] - Modify Airavata Distribution to Enable Separate Distributions for Orchestrator, Gfac and Xbaya.
    * [AIRAVATA-1511] - Replace legacy application descriptors used in gfac with app-catalog

** Sub-tasks
    * [AIRAVATA-468] - Support option with parameters for GramProvider
    * [AIRAVATA-1009] - Craft the Workflow Interpreter CPI
    * [AIRAVATA-1389] - Updated Xbaya to enable execution of a single application through thrift api
    * [AIRAVATA-1427] - Submit real time job count details to zookeeper
    * [AIRAVATA-1428] - Add a inmemory job count map to Orchestrator
    * [AIRAVATA-1438] - Add throtle-resources flag to airavata API
    * [AIRAVATA-1444] - Implement RabbitMQ publisher
    * [AIRAVATA-1446] - Provide a way to enable and disable Job count validation
    * [AIRAVATA-1472] - Cleanup Airavata property file for old service properties
    * [AIRAVATA-1510] - Remove connection to Workflow service from Xbaya

** Story
    * [AIRAVATA-965] - Update Airavata JGLOBUS and Unicore jar

** New Feature
    * [AIRAVATA-1494] - Add ResourceJobManger add, update, get, delete methods to airavata-api

** Improvement
    * [AIRAVATA-473] - Support For-each for Local providers
    * [AIRAVATA-495] - Implement logger in WorkflowInterpreter
    * [AIRAVATA-899] - API need enhancement so user can set a user identifier into Context header
    * [AIRAVATA-1030] - Multiple Security context to run a grid job
    * [AIRAVATA-1036] - ActualParameter and DataObjectType have same objective
    * [AIRAVATA-1333] - Can we have a way of searching for all the projects, experiments in the gateway?
    * [AIRAVATA-1404] - Airavata API function to get Job details
    * [AIRAVATA-1405] - API function to get data transfer details.
    * [AIRAVATA-1410] - Input data transfer details are not updated
    * [AIRAVATA-1419] - Allow multiple client to move the data using same server
    * [AIRAVATA-1449] - Get partial results incase outputs are not produced.
    * [AIRAVATA-1451] - RabbitMQ messaging is not supported for SGE resources
    * [AIRAVATA-1462] - Update log messages to track life cycle of experiments , jobs and tasks.
    * [AIRAVATA-1464] - XBaya doesn't support multi-app workflows with new Thrift API
    * [AIRAVATA-1474] - Remove Registry.wsdl stub autogeneration
    * [AIRAVATA-1479] - Change return type of jobSubmission API methods to string
    * [AIRAVATA-1487] - Add API methods to get job submission information

** Bug
    * [AIRAVATA-723] - Error message not sent to Xbaya as fault
    * [AIRAVATA-767] - Provide GridFTP URL incase of URL and URLArray type
    * [AIRAVATA-911] - Unable to set a different gateway name other than "default"
    * [AIRAVATA-986] - No free ports available to run GRAM provider and GridFTP transfers
    * [AIRAVATA-1091] - PersistenceException while executing BES or Gram Provider
    * [AIRAVATA-1370] - Update Client samples READMEs and INSTALL files
    * [AIRAVATA-1402] - Command for SLURM job cancel need correction
    * [AIRAVATA-1409] - Error details are saved twice which adding two records in the database
    * [AIRAVATA-1413] - Output path is not getting set to output context incase we scan output directory
    * [AIRAVATA-1418] - App catalog database connection timeout issue
    * [AIRAVATA-1423] - Orchestrator context does't set initial GFac instant list correctly in one of it's constructor.
    * [AIRAVATA-1430] - GSISSHAbstractCluster not throwing error if there is issue submitting job
    * [AIRAVATA-1433] - NullPointerException to create a SSH connection
    * [AIRAVATA-1434] - Rewrite CreateLaunchExperiment class in order to work with registerApplication method
    * [AIRAVATA-1435] - Experiment Status is updated to completed on job complete
    * [AIRAVATA-1477] - Host Aliases and IpAddresses not getting saved in Compute Resource Object
    * [AIRAVATA-1488] - AdvancedSCPInputHandler is not working if we need to transfer data to BigRed
    * [AIRAVATA-1495] - Experiment Status is not updated to Complete
    * [AIRAVATA-1520] - SCP to a newer version of Centos VM does not work
    * [AIRAVATA-1521] - SSHInputHandler cluster object is null
    * [AIRAVATA-1542] - Error message when configuring XBaya input parameter configuration


Apache Airavata Version 0.12 Released on 2014-06-27
===================================================
This release is a first iteration of using Apache thrift as a framework to implement Airavata API.
Below you will find the detail list of JIRA tasks/issues resolutions incorporated in 0.12.

Release Notes - Airavata - Version 0.12

** Sub-task
    * [AIRAVATA-762] - Advanced Job scripts based on job manager type
    * [AIRAVATA-982] - Changing registry to support orchestrator registry functionality
    * [AIRAVATA-983] - Creating orchestrator-service and orchestrator-core components
    * [AIRAVATA-984] - Implement the embeddedGFAc job submitter to orchestrator
    * [AIRAVATA-987] - Incorporate orchestrator changes with GFAC to store statuses
    * [AIRAVATA-988] - Implement pulling information and submitting to gfac embedded mode
    * [AIRAVATA-1007] - Craft the Orchestrator CPI
    * [AIRAVATA-1008] - Craft the GFac CPI
    * [AIRAVATA-1018] - Craft monitoring data model
    * [AIRAVATA-1020] - Add database creation at server startup
    * [AIRAVATA-1022] - Implement an AMQP based monitor to use in xsede resources
    * [AIRAVATA-1023] - Implement qstat based monitor to poll the status
    * [AIRAVATA-1025] - Add unit tests for new data models
    * [AIRAVATA-1032] - Change GFAC to use ConfigurationData to replace context header
    * [AIRAVATA-1037] - Create a New Airavata Distribution with the API server and Clients
    * [AIRAVATA-1043] - Update GFAC to save JobDetails for monitoring data
    * [AIRAVATA-1046] - Airavata Standalone Server : Create a class to start Airavata API and CPI servers
    * [AIRAVATA-1047] - Update standalone airavata server startup script
    * [AIRAVATA-1055] - Update integration tests defined in the integration-test module
    * [AIRAVATA-1061] - Test experiment execution using local providers
    * [AIRAVATA-1065] - Create C++ Samples using Airavata Thrift API Client SDKs
    * [AIRAVATA-1094] - Integration Test 1 - Create Experiment
    * [AIRAVATA-1095] - Integration Test 1 - Modify Experiment
    * [AIRAVATA-1096] - Integration Test 1 - Clone Experiment
    * [AIRAVATA-1097] - Integration Test 1 - Delete Experiment
    * [AIRAVATA-1099] - Integration Test 2 - List Experiments
    * [AIRAVATA-1100] - Integration Test 2 - Launch Experiment
    * [AIRAVATA-1101] - Integration Test 2 - Monitor Experiment
    * [AIRAVATA-1102] - Integration Test 2 - List Experiment Intermediate Results
    * [AIRAVATA-1103] - Integration Test 2 - Download Experiment Intermediate Results
    * [AIRAVATA-1104] - Integration Test 2 - Notification when Experiment Completes/Fails
    * [AIRAVATA-1105] - Integration Test 2 - Notifications when Results available for Download
    * [AIRAVATA-1106] - Integration Test 2 - Download Experiment Final Results
    * [AIRAVATA-1107] - Integration Test 2 - View Experiment Errors
    * [AIRAVATA-1129] - GFAC needs a README
    * [AIRAVATA-1170] - User creates a new project
    * [AIRAVATA-1171] - User creates an experiment in a project
    * [AIRAVATA-1173] - Launch experiment
    * [AIRAVATA-1176] - User edits an existing experiment
    * [AIRAVATA-1177] - User clones an experiment
    * [AIRAVATA-1178] - User searches experiments
    * [AIRAVATA-1179] - User selects a previous experiment and gets information.
    * [AIRAVATA-1189] - User creates an experiment in a project
    * [AIRAVATA-1191] - Launch Experiment
    * [AIRAVATA-1195] - User clones an experiment
    * [AIRAVATA-1203] - Define Thrift Data Models for the Application Catalog
    * [AIRAVATA-1236] - Database design for Application Catalog

** Bug
    * [AIRAVATA-637] - Update tomcat deployment script and instruction
    * [AIRAVATA-725] - Some of the messages from EventDataListener are without experimentId
    * [AIRAVATA-825] - Airavata Client error in case workflow scheduling context is not right
    * [AIRAVATA-976] - Same INSTALL, README, NOTICE files are duplicated in many places
    * [AIRAVATA-981] - Download links for current release hashes etc must use main ASF server
    * [AIRAVATA-1001] - Not able to run a Grid job using trunk
    * [AIRAVATA-1010] - Creating a cpi package for gfac
    * [AIRAVATA-1011] - Creating orchestrator cpi
    * [AIRAVATA-1034] - Fixing build error in Xbaya
    * [AIRAVATA-1045] - Update airavata server distribution to support the new architecture
    * [AIRAVATA-1048] - cleaning up multiple configurations in monitor and orchestrator
    * [AIRAVATA-1050] - Making launchExepriment call as non-blocking
    * [AIRAVATA-1051] - Airavata-Client distribution doesn't work with the old API anymore
    * [AIRAVATA-1057] - Implementing support for SLURM for AIRAVATA
    * [AIRAVATA-1066] - GSISSH Monitoring error-Error retrieving the job status
    * [AIRAVATA-1074] - Sample application documents created with staticWorkingDirectory
    * [AIRAVATA-1078] - Supporting advanced input/output handling in gfac
    * [AIRAVATA-1080] - Implementing Advanced Input/Output Handling
    * [AIRAVATA-1088] - Removing registry dependency from job-monitor
    * [AIRAVATA-1089] - Enabling SSH job monitoring
    * [AIRAVATA-1139] - Cannot get all user projects
    * [AIRAVATA-1141] - getAllUserExperiments() ignores input
    * [AIRAVATA-1142] - getAllExperimentsInProject throws exeption instead of empty result
    * [AIRAVATA-1143] - Airavata PHP Thrift Client Distribution
    * [AIRAVATA-1147] - Throw full stack trace to client side in airavata server handler
    * [AIRAVATA-1148] - No documentation in Thrift-generated PHP SDK
    * [AIRAVATA-1161] - Clone experiment does not work properly
    * [AIRAVATA-1163] - CreateLaunchExperiment client launch experiment is not working
    * [AIRAVATA-1164] - AiravataTaskStatusUpdator.updateTaskStatus has java.lang.NullPointerException
    * [AIRAVATA-1182] - createProject doesn't warn that project already exists
    * [AIRAVATA-1185] - Output values are not populated when the experiment finish
    * [AIRAVATA-1227] - Update server handler class to throw error message to client side
    * [AIRAVATA-1264] - When creating Registry instance, instead of updating, add checks to see whether user and gateway exists
    * [AIRAVATA-1266] - Thrift -out of sequence response on validateexperiment
    * [AIRAVATA-1273] - Experiment status was coming as Launched and output value as empty
    * [AIRAVATA-1279] - When server initialize, db scripts are not read from db-scripts folder
    * [AIRAVATA-1283] - local host is hard coded in all the thrift clients
    * [AIRAVATA-1297] - Error while reading cache size from airavata-server.properties
    * [AIRAVATA-1298] - ClassNotFoundException when running CreateLaunchExperiment for local experiments

** Documentation
    * [AIRAVATA-1086] - INSTALL is out of date
    * [AIRAVATA-1122] - Airavata Architecture - Sequence Diagram
    * [AIRAVATA-1138] - Preperation of QA Test cases for Airavata API
    * [AIRAVATA-1262] - CCGrid tutorial documentation preparation for PHP scripts
    * [AIRAVATA-1263] - CCGrid tutorial documentation preparation for PHP reference gateway

** Epic
    * [AIRAVATA-759] - GSISSH-Grid security provider to run remote jobs
    * [AIRAVATA-964] - Add single job support as a first class simple Apache Airavata Execution
    * [AIRAVATA-1039] - Add Airavata Client Samples
    * [AIRAVATA-1158] - Test different API functions in Airavata API using PHP client

** Improvement
    * [AIRAVATA-934] - Update SSHProvider to use Jcraft API
    * [AIRAVATA-942] - GFAC SchedulerTest is obsolete
    * [AIRAVATA-949] - Update release management page step 11
    * [AIRAVATA-1076] - Make input/output data location in GFAC configurable
    * [AIRAVATA-1081] - Airavata README is obsolete
    * [AIRAVATA-1082] - Make SSH provider(Fork jobs) work with JCraft
    * [AIRAVATA-1118] - Adding Permission attribute to XBaya main jar to follow recent JAVA security update guide line
    * [AIRAVATA-1249] - Add search project by name and description
    * [AIRAVATA-1257] - Define experiment summary data model for search experiments
    * [AIRAVATA-1258] - Add API methods to search experiments by name and description
    * [AIRAVATA-1278] - Search experiments with resource id and application id
    * [AIRAVATA-1285] - Enable openJPA caching to improve the performance

** New Feature
    * [AIRAVATA-1033] - Write Airavata Thrift Server Startup Scripts

** Story
    * [AIRAVATA-1019] - Airavata Server distribution with new Thrift server
    * [AIRAVATA-1093] - Integration Test 1 - Manage Unlaunched Experiments
    * [AIRAVATA-1098] - Integration Test 2 - Manage Launched Experiments

** Task
    * [AIRAVATA-905] - Unify SSH Libraries across Airavata
    * [AIRAVATA-1021] - Implementing new Monitoring component which handle different types of monitoring mechanisms
    * [AIRAVATA-1060] - Disable the obsolete modules from the trunk build
    * [AIRAVATA-1124] - Cleaning up unused modules in the trunk for 0.12 release
    * [AIRAVATA-1140] - Create client samples that'll be distributed
    * [AIRAVATA-1144] - Airavata CPP Thrift Client Distribution
    * [AIRAVATA-1145] - Update Experiment Status when Job Status Changes


Apache Airavata Version 0.11 Released on 2013-12-20
==================================================
This release focused on evaluating apache thrift as a framework to implement Airavata API. As the first step, we are adding thrift interfaces to workflow execution API. Feel free to explore the thrift module in Airavata source code, which contains the stand-alone thrift server and a thrift client. Apart from apache thrift integration, this release has bug fixes which related GSISSH library and integration of Airavata Credential Store with Airavata client API. 
Below you will find the detail list of JIRA tasks/issues resolutions incorporated in 0.11. 

** Improvement
     * [AIRAVATA-278] - Improve GFac stdout handling to cover output types
     * [AIRAVATA-941] - JCR properties in GFAC's service.properties are obsolete
     * [AIRAVATA-952] - Add credential store to the Airavata API
     * [AIRAVATA-963] - Refactoring Integration Tests module to allow easy extendability and remove redundancy

** Task
     * [AIRAVATA-953] - Distribute JNLP With Releases

** Sub-task
      * [AIRAVATA-925] - Display status of experiments upfront in experiments list
      * [AIRAVATA-938] - Update XBaya window to support file transfer
      * [AIRAVATA-967] - Update Unicore client version

** Story
     * [AIRAVATA-965] - Update Airavata JGLOBUS and Unicore jar

** Bug
     * [AIRAVATA-922] - Reduce the size of war distributions
     * [AIRAVATA-954] - Evaluating thrift based execution API
     * [AIRAVATA-969] - GSISSH provider not fail on PBS Syntax errors

Known Issues in This Release
============================
    * [AIRAVATA-971] - XBaya run workflow window does not render correctly for a workflow which has lot of inputs

Apache Airavata Version 0.10 Released on 2013-10-29
==================================================
This release focused on bug fixes and GSISSH library/provider for beta testing. GSISSH Library provides connectivity to remote resources using grid security, SSH keys and kerberos authentication. Feel free to explore the library https://svn.apache.org/repos/asf/airavata/trunk/tools/gsissh or work with GSISSHProvider in GFAC. This library is still in testing phase and contributions are welcome like libraries to different job managers and testing with different resources.   
Below you will find detail list of JIRA tasks/issue resolutions incorporated in 0.10.


** Sub-task
    * [AIRAVATA-760] - GSISSH provider to run simple job manager commands provided by the user
    * [AIRAVATA-761] - Input output data transfer using gsiscp or GridFTP
    * [AIRAVATA-763] - Extending GFAC schema to support GSI hosts configurations
    * [AIRAVATA-928] - Prepare release



** Bug
    * [AIRAVATA-744] - Cleanup configurations files
    * [AIRAVATA-756] - Ensure Airavata can renew proxy for long running jobs.
    * [AIRAVATA-882] - Tomcat port configuration accessing problem in certain older tomcat 7 version
    * [AIRAVATA-920] - XBaya initialization fails when it is initialized from another client application
    * [AIRAVATA-931] - GSISSHProviderTest is not working
    * [AIRAVATA-933] - Regex in OutputUtils does not support space in output string
    * [AIRAVATA-939] - When workflow fail it goes to workflow completed mode and not showing the red node



** Improvement
    * [AIRAVATA-870] - Enable CORS support in Airavata server
    * [AIRAVATA-880] - Have a UserRegistry API to support user related operations
    * [AIRAVATA-912] - [GSoC] JSON equivalent of XWF files


Apache Airavata Version 0.9 Released on 2013-09-18
==================================================
This release mainly focused on "Credential Store" functionality within Airavata. This release includes initial version of "Credential Store" and a sample-gateway (within samples) to demonstrate the functionality of "Credential Store". In addition we upgrade JGlobus version to 2.0.6. With the JGlobus upgrade we introduced functionalities such as "Two phase commit", "Job cancellation" etc ... In addition we introduced a new workflow interpreter and also introduced a REST API for workflow execution. JGlobus upgrade is well tested and some of the use cases we tested can be found in https://svn.apache.org/repos/asf/airavata/sandbox/grd-tools. Below you will find detail list of Jira tasks/issue resolutions incoporated in 0.9.


** New Feature
    * [AIRAVATA-828] - Integrate Credential Management service to Airavata Server

** Task
    * [AIRAVATA-919] - Negotiate with Apache Infra and increase the distribution size to 200 MB
    * [AIRAVATA-918] - Prepare release
    
** Improvement
    * [AIRAVATA-252] - Remove invoker caching from Workflow interpreter
    * [AIRAVATA-835] - Airavata API to get JOBID of GramJob based on workflow service node name
    * [AIRAVATA-878] - Upgrade tomcat version used in integration-tests
    * [AIRAVATA-883] - Upgrade JGlobus version to 2.0.6-RC2
    * [AIRAVATA-900] - Handling of URI and URIArray containing different files with the same name should be handled correctly

** Bug
    * [AIRAVATA-620] - Confirming the airavata shutdown is completely graceful
    * [AIRAVATA-659] - Airavata Client Exception handling
    * [AIRAVATA-720] - Error message when I try to delete Application Service from Xbaya dashboard
    * [AIRAVATA-731] - When registering urls in registry, we need to register based on transport protocol
    * [AIRAVATA-738] - Xbaya does not give error messages when connecting to database with wrong credentials
    * [AIRAVATA-753] - Fixing the provided samples
    * [AIRAVATA-754] - Levenshtein distance sample is not working
    * [AIRAVATA-852] - Fix the context root specified in the airavata-server.properties file for Airavata webapp
    * [AIRAVATA-886] - Exception in jpa-registry when building in ubuntu with java 64 bit
    * [AIRAVATA-888] - SSHProvider not working in trunk
    * [AIRAVATA-902] - Scheduling info set from advanced options in client-side is not recovered properly at server-side
    * [AIRAVATA-903] - Erroneous output is set as the input to the next node from the workflow interpreter
    * [AIRAVATA-904] - EmbeddedInvoker is not parsing previous node output to the next node input correctly
    * [AIRAVATA-907] - Experiment Data list return from getAllExperimentMetaInformation() method of provenance manager not sorted according to experiment submitted date

Known Issues in This Release
============================
    * [AIRAVATA-914] - Failed to authenticate when connecting to an existing database.

Apache Airavata Version 0.8 Released on 2013-07-04
==================================================
Key focus of this release is to build upon the 0.7 release changes of GFac Architecture. The EC2 provider now confers to
the new GFac extensible architecture. The EC2 provider is now an advertised feature and users can use the provider in 
production-like deployements. The RC of this release was applied to targeted usage by PMC members and significant 
improvements have been made from errors reported. The Airavata GFac handler configurations have been well tested and 
customization of handlers is facilitated through a configuration file. 

** New Feature
    * [AIRAVATA-862] - Introducing a HostScheduler interface and allow users to write their own HostSchedulers and register them with Airavata

** Task
    * [AIRAVATA-93] - Review gfac-core code 
    
** Improvement
    * [AIRAVATA-450] - Delay in JobSubmissionListener after getting status from Gram
    * [AIRAVATA-827] - Extending Gram RSL parameters to provide Job Name, email options 
    * [AIRAVATA-832] - Provide support to configure a new provider in gfac-config.xml
    * [AIRAVATA-850] - Add a UI component to EC2 menu which allows a user to generate a key for EC2 communication

** Bug
    * [AIRAVATA-304] - WorkflowInterpreter had some memory leak which can be seen when send requests continuously upto 4000 
    * [AIRAVATA-721] - Xbaya attempt connection at a down Airavata Server
    * [AIRAVATA-745] - Levenshtein Distance Sample Needs to be updated
    * [AIRAVATA-746] - Airavata server populates incorrect URLs (GFac, interpretter ...) when HTTPS is enabled in tomcat
    * [AIRAVATA-818] - Set host dynamically per service request
    * [AIRAVATA-824] - EmbeddedGFacInvoker is not reading hostname from application scheduling context
    * [AIRAVATA-826] - Tar data uploading using gridftp cient in GFAC is not complete 
    * [AIRAVATA-829] - In Airavata API, HPCSettings the maxWallTime is not working
    * [AIRAVATA-833] - GridFTPOutputHandler is not able to download outputs from outputData folder incase of URI data type.
    * [AIRAVATA-834] - Add support for GridFTP output file staging
    * [AIRAVATA-836] - In GramRSLGenerator setOutputDataDirectory to context output path is not correct
    * [AIRAVATA-837] - Not able to load property incase of provider properties defined in gfac-config.xml
    * [AIRAVATA-849] - Error messages from Airavata API
    * [AIRAVATA-851] - Use the username specifed in the workflow graph when sshing to the AMI instances
    * [AIRAVATA-856] - Make credential-store specific table scripts lower case
    * [AIRAVATA-857] - Error while trying to query the experiment data after few hours
    * [AIRAVATA-861] - Integration tests are failing
    * [AIRAVATA-865] - Renaming GFac Job related functions in the rest service and the rest client
    * [AIRAVATA-869] - When the application aborts with return value of minus Status of failure is not reported in to registry
    * [AIRAVATA-872] - ws-messenger services come to inconsistent state with a failure scenario    


Apache Airavata Version 0.7 Released on 2013-04-13
==================================================
Key focus on this release is to improve the Airavata Application Factory (GFac) to facilitate integration of new handlers and ease the development of new providers. The following JIRA issues provide details of the changes made. 

Known Issues in This Release
============================
Apache Airavata Version 0.7 is an important step towards a extendable core components and a stable Airavata 1.0 release. This version is not yet recommended for production usage.

** Story
    * [AIRAVATA-530] - Implement a new Handler architecture

** New Feature
    * [AIRAVATA-315] - Provide an interface for Gateway administrator 
    * [AIRAVATA-316] - Provide a way to access the log for each experiment 

** Improvement
    * [AIRAVATA-202] - Add EC2 Provider to Airavata
    * [AIRAVATA-540] - There's no way to find final workflow outputs from notifications
    * [AIRAVATA-780] - Add support to add multiple security context 
    * [AIRAVATA-782] - Add the EC2 Job Submission Schedular to the trunk
    * [AIRAVATA-787] - Add support for Unicore and SSH provider in Xbaya UI

** Task
    * [AIRAVATA-471] - Add sample workflows to demonstrate the use of foreach construct
    * [AIRAVATA-757] - Remove dependency to OA4MP snapshot jars once OA4MP 1.0.6 is released
    * [AIRAVATA-803] - Run Amazon EC2 workflows through XBaya 
    * [AIRAVATA-804] - Fix the mechanism to keep the AWS secret key and access key within the workflow.

** Sub-task
    * [AIRAVATA-531] - Writing new Context classes to keep all the Context data
    * [AIRAVATA-770] - Add Unicore provider to submit jobs
    * [AIRAVATA-783] - Brief diagram about authentication framework

** Bug
    * [AIRAVATA-635] - Providing sample to configure workflow context header for each node
    * [AIRAVATA-742] - Make authenticators.xml read default database configurations from airavata-server.properties
    * [AIRAVATA-747] - SSH provider in EmbeddedGFacInvoker
    * [AIRAVATA-748] - Dependencies missing for SSH provider
    * [AIRAVATA-749] - Porting GSOC changes to Airavata trunk
    * [AIRAVATA-750] - airavataAPI.getProvenanceManager().getExperimentDataList()
    * [AIRAVATA-751] - Nullpointer exception in SSHProvider.getSession()
    * [AIRAVATA-764] - Job should not be canceled if there is a job error. 
    * [AIRAVATA-765] - GridFTPOutputHandler need to return file url incase output type in URI
    * [AIRAVATA-772] - Cannot start Airavata on Windows
    * [AIRAVATA-773] - XBaya does not work on Windows
    * [AIRAVATA-775] - Add the EC2 UI components to XBaya
    * [AIRAVATA-778] - Xbaya workflow editor: "Airavata Registry" panel doesn't update after making changes
    * [AIRAVATA-781] - Add a test case to gfac core to submit EC2 jobs 
    * [AIRAVATA-799] - Gram job data storing failing
    * [AIRAVATA-801] - 10 mins sample failed in 0.7 RC2
    * [AIRAVATA-809] - EC2 Instance Management window is not properly functioning due to backend issues
    * [AIRAVATA-812] - Add documentation for EC2 job submissions through XBaya
    * [AIRAVATA-813] - Incorrect instructions given in the wiki for Sample Workflow SimpleForEach
    * [AIRAVATA-815] - Issues when terminating and starting instances/AMIs using Amazon instance management window
    * [AIRAVATA-816] - Workflow Run sample fails  because of wrong host

Apache Airavata Version 0.6 Released on 2013-01-25
==================================================
0.6 is the fifth release of Apache Airavata. This release focuses on providing a REST service interface for Airavata Registry.

Known Issues in This Release
============================
This release is an important step towards a stable Airavata Server components and a good Airavata API client library. This version is not yet recommended for production usage.

** New Feature
    * [AIRAVATA-387] - Support for individual users in a community
    * [AIRAVATA-572] - Add basic auth based authenticator to Airavata
    * [AIRAVATA-573] - Add support to connect different types of user stores to authenticate Airavata REST API
    * [AIRAVATA-631] - Change Airavata API (airavata-client) to use Airavata REST Service
    * [AIRAVATA-632] - Change XBaya to use the Airavata Client
    * [AIRAVATA-633] - Change XBaya to use Airavata Client for Workflow Launches

** Improvement
    * [AIRAVATA-539] - Provide WorklfowNodeID in wokflowInvoked Notification
    * [AIRAVATA-644] - Change default authenticating database to Derby
    * [AIRAVATA-645] - Provide a utility method to set basic access headers in client side
    * [AIRAVATA-653] - Use Embedded Tomcat as servlet container for Airavata
    * [AIRAVATA-658] - Create a context class to store request specific properties
    * [AIRAVATA-683] - Improving Application Manager API
    * [AIRAVATA-684] - Add stop monitoring functionality for the Monitor object
    * [AIRAVATA-685] - Improvements to the WorkflowManager API
    * [AIRAVATA-704] - BPELScript log messages to parse wsdl should be of debug level
    * [AIRAVATA-719] - Enable rest client to communicate over HTTPS

** Task
    * [AIRAVATA-556] - Adding REST interface to Airavata Registry API
    * [AIRAVATA-670] - Update LICENSE & NOTICE files in distribution
    * [AIRAVATA-677] - Simplify runExperiment function overloading in Execution Manager
    * [AIRAVATA-679] - Make the WorkflowContextHeaderBuilder transparent to the API User
    * [AIRAVATA-698] - Move the registry related property data included on airavata-client and airavata-server properties files instead
    * [AIRAVATA-726] - Generate a WAR distribution for Airavata Server at build time

** Sub-task
    * [AIRAVATA-65] - Update Audit Notifier
    * [AIRAVATA-66] - Update Performance Notifier

** Bug
    * [AIRAVATA-259] - A notification is sent out with the description "Invoking a workflow" for each service invocation this is misleading.
    * [AIRAVATA-528] - During workflow data saving node with a name of "experiments[1]" creating
    * [AIRAVATA-619] - MsgBoxWsaResponsesCorrelator is creating an infinite thread  and there's no way to interrupt that thread
    * [AIRAVATA-621] - WorkflowInterpretorEventListener is accumulating - not properly shutting down
    * [AIRAVATA-622] - Error in console when running a workflow- Not always
    * [AIRAVATA-628] - Add new user displays user add to JCR registry
    * [AIRAVATA-643] - Add different registry accessors to airavata-server.properties and update AiravataJPARegistry accordingly
    * [AIRAVATA-646] - Make tests work with paths that include spaces (Fix build failure in tests due to paths with spaces)
    * [AIRAVATA-648] - MsgBoxWsaResponseCorrelator thread is not returning
    * [AIRAVATA-650] - Provide a sample how to push notification messages to someother endpoint after capturing them in airavata client
    * [AIRAVATA-652] - Create Java REST client to REST service
    * [AIRAVATA-654] - Cannot start Airavata if the installed path contains spaces
    * [AIRAVATA-664] - Null pointer exception is thrown from REST service when calling the registry API
    * [AIRAVATA-672] - Adding embedded tomcat as default  server to Airavata
    * [AIRAVATA-680] - Application Service menu get repeated in XBAya GUI
    * [AIRAVATA-681] - Enable hash passwords in Airavata local user store and make SHA as default password hash method
    * [AIRAVATA-682] - Failed login when connecting to an existing database
    * [AIRAVATA-690] - Lonestar GridFTP URL is wrong in default host objects
    * [AIRAVATA-692] - Not able to set HPC Configuration on New Application Deployment screen. Urgent!!
    * [AIRAVATA-693] - Edit Application- Edit deployment link does not work
    * [AIRAVATA-694] - Edit Application >  Edit deployment > Scratch working directory empty
    * [AIRAVATA-696] - Airavata-client needs database configuration in client side code which is wrong
    * [AIRAVATA-699] - When executing workflow user is authenticated multiple times for the same session
    * [AIRAVATA-700] - Edit Host Description dialog vanishes once one description get deleted
    * [AIRAVATA-701] - Maven clean install does not remove existing target folders for xbaya-gui
    * [AIRAVATA-705] - There are some dependencies missing in Airavata client distribution
    * [AIRAVATA-706] - Updating the HPC Configuration Options
    * [AIRAVATA-708] - XBaya doesn't return when backend gfac operation fail
    * [AIRAVATA-713] - Cleaning up unnecessary dependencies from Xbaya distribution and airavata-client distribution
    * [AIRAVATA-715] - Database setting are picked up from registry.properties.
    * [AIRAVATA-718] - An exception while starting integration tests
    * [AIRAVATA-724] - A valid SimpleMathService is not available for the 5 minute tutorial
    * [AIRAVATA-727] - Airavata distributions are not installed to the maven repository
    * [AIRAVATA-728] - OutputDataSettings does not have method to set node information.
    * [AIRAVATA-729] - Advanced options are not saved when creating an application
    * [AIRAVATA-734] - Multiple Workflow is invoked messages in the workflow
    * [AIRAVATA-741] - Airavata startup fails when Airavata is pointed to a new database

Apache Airavata Version 0.5 Released on 2012-10-28
=============================================================
0.5 is the fourth release of Airavata (skipped 0.1-INCUBATNG). This release focuses on improving test cases and stability of code, documentation.

** New Feature
    * [AIRAVATA-277] - Add do-while support to Xbaya and workflow engine
    * [AIRAVATA-314] - Hide workflow experiment ID from the user and allow user to add a user friendly experiment ID
    * [AIRAVATA-517] - Add XBaya JNLP generation to the Airavata Build
    * [AIRAVATA-548] - Implement StringArray incase output parameters are coming multiple times in STDOUT
    * [AIRAVATA-562] - Replacing existing Jackrabbit registry with MySQL

** Improvement
    * [AIRAVATA-57] - Consolidate XBaya Web Service Invoker Clients and Re-factor them to use Axis2
    * [AIRAVATA-220] - XBaya not prompting Myproxy dialog for secure workflow invocation
    * [AIRAVATA-229] - Managing Shutdown tasks using shutdown hooks
    * [AIRAVATA-363] - Adding Embedded GFac feature in to ducumentation
    * [AIRAVATA-476] - Add sample workflows to be shipped with Airavata to demonstrate grid job submissions
    * [AIRAVATA-533] - Add scripts to run Airavata in Windows environment
    * [AIRAVATA-541] - Some code is duplicated in AiravataJCRregistry
    * [AIRAVATA-543] - Some improvements to "Airavata HowTo" doc 
    * [AIRAVATA-546] - Implementing Persistency Data Storage for Airavata
    * [AIRAVATA-589] - Need to remove jackrabbit dependency from 0.5 build
    * [AIRAVATA-613] - Cleanup XBaya Invokers and remove legacy security calls
    * [AIRAVATA-614] - Cleanup all myproxy and gsi dependencies from XBaya

** Bug
    * [AIRAVATA-232] - GridFTPFileTransferClient has file paths that refer to a local file paths need to generalize this
    * [AIRAVATA-317] - After changing the username of jackrabbit still I can save service description
    * [AIRAVATA-400] - ConcurrentModificationException during using RegistryAPI
    * [AIRAVATA-497] - Deprecating xbaya engine running in the gui mode and make WorkflowInterpreter invocation by default
    * [AIRAVATA-506] - No log file is creating during standalone mode run of Airavata server
    * [AIRAVATA-516] - Input Output node data can not be retreived by using Airavata API's ProvananceManager
    * [AIRAVATA-522] - Application Failed status is not updated in XBaya
    * [AIRAVATA-527] - Monitor panel does not report final error when a node fails
    * [AIRAVATA-534] - Error creating the database in Windows environment - When starting the Airavata Server
    * [AIRAVATA-538] - getWorkflowExecutionByUser(...) method implementation is not correct
    * [AIRAVATA-544] - Could not deploy WS-Messenger with MySQL
    * [AIRAVATA-545] - 5 minutes tutorial fails when running WS-Messenger with MySQL
    * [AIRAVATA-559] - Improvements to AiravataJCRRegistry class
    * [AIRAVATA-564] - ForEach does not work if Array size is 1
    * [AIRAVATA-575] - Data type of workflow_graph and workflow_content of User_Workflow table and Published_Workflow table should be BLOB datatype
    * [AIRAVATA-581] - Supporting derby by default for airavata
    * [AIRAVATA-582] - Make run button of Xbaya to go through interpreter server by default
    * [AIRAVATA-584] - GridFTP transfer does not set type to Binary for binary data
    * [AIRAVATA-586] - Node deletion is giving some issues
    * [AIRAVATA-588] - Error when try to open a workflow from filesystem
    * [AIRAVATA-594] - Improving data retrieval time in provenance data 
    * [AIRAVATA-595] - Gram RSL generated is missing the jobtype parameter
    * [AIRAVATA-597] - XBaya pom have Junit jar version but its not added to properties
    * [AIRAVATA-598] - Warn user before closing XBaya
    * [AIRAVATA-611] - Remove derby.sh and startNetworkServer scripts
    * [AIRAVATA-612] - File transfer error getting masked to a general error

Apache Airavata Version 0.4-INCUBATING Released on 2012-07-28
=============================================================
0.4-INCUBATNG is the third release of Airavata (skipped 0.1-INCUBATNG). This release focuses on improving test cases
 and stability of code, documentation. 
 
** New Feature
    * [AIRAVATA-236] - Develop Gdirftp and and file transfer utils to GFac
    * [AIRAVATA-237] - Support http url sameway gridftp url is supported in the GFac URI type
    * [AIRAVATA-287] - Add while construct 
    * [AIRAVATA-298] - Allow workflow intepreter to start executing even when all the "Input Node" valuese are not set
    * [AIRAVATA-309] - XRegistry entries transfer (from OGCE XRegistry to Airavata XRegistry)
    * [AIRAVATA-358] - Integrate GFac with XBaya to run in embedded mode
    * [AIRAVATA-365] - Creating temporary location based on the given executable location
    * [AIRAVATA-366] - Adding default set of host descriptions during startup
    * [AIRAVATA-377] - Allowing users disable some of the input Nodes in a workflow during Invocation
    * [AIRAVATA-392] - Allowing users to specify the workflow name during XBaya startup and open the given workflow
    * [AIRAVATA-417] - Create a getter on AiravataClient to read the location to save the output file
    * [AIRAVATA-517] - Add XBaya JNLP generation to the Airavata Build

** Task
    * [AIRAVATA-414] - Refactor XBaya
    
** Sub-task
    * [AIRAVATA-321] - Create documentation for XRegistry to Airavata Registry migration tool
    * [AIRAVATA-326] - Gram and GridFTP ERP's are not populated in XRegistry entries transfer
    * [AIRAVATA-327] - Application temporary directory was not populated
    * [AIRAVATA-328] - Service Inputs and outputs are not coming
    * [AIRAVATA-329] - Verify different name spaces
    * [AIRAVATA-336] - After migration of xregistry resources, Application Services are not listed in Component List
    * [AIRAVATA-337] - Compare the OGCE Schema and Airavata Schema then add missing parts to airavata Schema
    * [AIRAVATA-491] - Do-While GUI component
    * [AIRAVATA-492] - Changing the workflow model for do-while
    * [AIRAVATA-493] - Add Do-while handler for Workflow Interpreter

** Improvement
    * [AIRAVATA-284] - Making the timeout value configurable in ws-messenger client package
    * [AIRAVATA-313] - Add validation in to airavata before submitting jobs to Grid
    * [AIRAVATA-334] - Xbaya Application description GUI
    * [AIRAVATA-381] - Copying gridftp and urls in to Grid during input Staging
    * [AIRAVATA-390] - Allowing users to configure the XBaya GUI placement in the screen
    * [AIRAVATA-401] - Allowing users to give empty String and URL inputs for a workflow
    * [AIRAVATA-403] - Workflow Execution Context should be used for all workflow executions
    * [AIRAVATA-405] - Adding monitoring capability to AiravataClient
    * [AIRAVATA-412] - GFac outputdata directory name should be customizable from application description
    * [AIRAVATA-464] - Extension for Application Deployment Description to specify Hadoop provider specific parameters 
    * [AIRAVATA-483] - Create java docs with the build using maven
    * [AIRAVATA-484] - Airavata API improvements
    * [AIRAVATA-486] - Add a document describing Airavata Users to the website
    * [AIRAVATA-520] - Service outputs as stdout and stderr
    
** Bug Fixes
    * [AIRAVATA-296] - Threads get create continuously in WorkflowInterpreter during accessing registry
    * [AIRAVATA-362] - Error while saving Gram Configuration
    * [AIRAVATA-368] - Host description update doesn't work properly
    * [AIRAVATA-369] - Huge Error message box comes when try to show an huge error
    * [AIRAVATA-380] - GFac doesn't keep the order properly for application invocation
    * [AIRAVATA-382] - Workflow loading when there's a URIParameterType is there in the workflow
    * [AIRAVATA-384] - Wrong workflow is saving so during loading of the workflow it shows a weird input nodes without Edges
    * [AIRAVATA-385] - Registry related commandline arguments are not picked up by the XBaya GUI
    * [AIRAVATA-386] - Cannot configure input nodes by clicking on inputNodes
    * [AIRAVATA-393] - Error while processing input from another node at Gfac-service
    * [AIRAVATA-395] - gfac fails with ArrayInput types
    * [AIRAVATA-411] - Service Description editing fails
    * [AIRAVATA-416] - Notifications are not delivering sometimes when a workflow run in Interpreter Service mode
    * [AIRAVATA-418] - Handling application exit codes and if its non zero through and error up to XBaya GUI
    * [AIRAVATA-421] - Propagate GFac failures in to XBaya GUI properly and make the failure nodes red
    * [AIRAVATA-425] - jackrabbit.log_IS_UNDEFINED
    * [AIRAVATA-431] - Error when importing a workflow from file system
    * [AIRAVATA-432] - GFAC is not creating outputData directory for GRAM Jobs
    * [AIRAVATA-435] - outputData directory variable is set as inputData in Gram RSL
    * [AIRAVATA-436] - GFAC does not support reading output data directly from outputData and set values into output array
    * [AIRAVATA-438] - Sometimes Gfac notifications are not receiving to XBaya so the failures scenarios are not visible to the user
    * [AIRAVATA-456] - Input type URIArray is not handled properly
    * [AIRAVATA-466] - WorkflowInterpreter notification is broken
    * [AIRAVATA-487] - Changing the host dynamically based on the request content
    * [AIRAVATA-494] - Not able to Run a local service in GFAC from Xbaya
    * [AIRAVATA-502] - -workflow option doesn't work on trunk
    * [AIRAVATA-503] - Workflow nodes are not becoming red when it failes but it receives the proper notification
    * [AIRAVATA-504] - NPE while starting Airavata Server
    * [AIRAVATA-505] - Saved workflow with EndWhile is loading the component wrong
    * [AIRAVATA-507] - NPE when deploying Airavata on Tomcat
    * [AIRAVATA-508] - Cannot add multipe hosts for a single service
    * [AIRAVATA-509] - Gram Hosts are not showing properly in XBAya gui
    * [AIRAVATA-510] - When connecting through XBaya to an Airavata which is deployed on tomcat, MessageBox and MessageBroker URLs are not propagated properly

** Test
    * [AIRAVATA-472] - Add more test cases to cover ForEach construct functionality


Apache Airavata Version 0.3-INCUBATING Released on 2012-05-14
=============================================================
0.3-INCUBATNG is the second release of Airavata (skipped 0.1-INCUBATNG). This release focuses on improving test cases
+and stability of code, documentation.

** New Feature
    * [AIRAVATA-100] - Workflow Execution Context Header schema
    * [AIRAVATA-305] - Allow users to configure provenacne Writer Thread pool size and shutdown the thread pool during service shutdown
    * [AIRAVATA-348] - Need Maven profiles for building Airavata clients.

** Task
    * [AIRAVATA-106] - Adding a Sample which demonstares the usage of XMLBean generated POJO classes
    * [AIRAVATA-301] - create documentation for how to use XBayaClient with a sample code
    * [AIRAVATA-302] - Document the xbaya.properties file entries used in WorkflowInterpreter service in detail
    * [AIRAVATA-303] - Document how to invoke echo service in one of the super computers (ranger)
    
** Sub-task
    * [AIRAVATA-291] - Test Foreach when workflow interpreter is  running without the ws-messenger
    * [AIRAVATA-292] - Long running stress evaluation of workflow interpreter without the ws-messenger
    * [AIRAVATA-407] - name all module jars with airavata prefix

** Improvement
    * [AIRAVATA-253] - Remove weps.jar
    * [AIRAVATA-263] - Improve WorkflowInterpreter to run multiple jobs in parallel
    * [AIRAVATA-267] - minimize the default size of XBaya Window
    * [AIRAVATA-273] - Providing multiple port suppor for EndForEach Node
    * [AIRAVATA-274] - Threads get created during a long run of Interpreter service
    * [AIRAVATA-279] - xml serialization error in 10 minute tutorial
    * [AIRAVATA-285] - Remove messenger to attic
    * [AIRAVATA-293] - Allow users to configure the time interval to delete old messageboxes
    * [AIRAVATA-294] - Create new api method to initialize the XBaya client without the notificaton listner
    * [AIRAVATA-319] - Move the XBayaClient to a separate module
    * [AIRAVATA-398] - remove src and target folders from binary distribution of samples

** Bug
    * [AIRAVATA-266] - Fix intermittent test failures in XBaya test cases
    * [AIRAVATA-269] - Hyphen replacement is not working properly
    * [AIRAVATA-272] - XBaya UI Application Description saving - executable selection doens't work properly
    * [AIRAVATA-275] - PUBLISHER threads are not interrupted after the workflow inovacation
    * [AIRAVATA-276] - Unnecessary QueueName element in ApplicationDescription dialog 
    * [AIRAVATA-283] - Old messagebox deletion doesn't work 
    * [AIRAVATA-286] - Registry API random test failures
    * [AIRAVATA-295] - In a long run messagePuller threads are not killing completely
    * [AIRAVATA-297] - New Deployment Description panel "save" button
    * [AIRAVATA-310] - Not able to edit existing service description
    * [AIRAVATA-311] - New Deployment Description panel layout issue
    * [AIRAVATA-312] - Host Description Advanced Options panel layout issue
    * [AIRAVATA-378] - Update Gram Configuration Dialog to accept Static Working Directory option
    * [AIRAVATA-389] - jobs fails with lack of memory in batch submission
    * [AIRAVATA-399] - Improve GramProvider to support transfer of local files 
    
** Test
    * [AIRAVATA-239] - Create a Edit distance based dot product and cartisian product ForEach test case

Airavata Version 0.2-INCUBATING Released on 2012-04-22
======================================================

0.2-INCUBATNG is the first release of Airavata, 0.1-INCUBATNG was attempted but the vote was cancelled. 
This notes covers both the releases. This release focuses on improving test cases and stability of code, 
cleaning up of donated code, packaging all components into modular architecture, documentation, and 
removal of non-compatible license dependencies.
 

** New Feature
    * [AIRAVATA-104] - Allow creating new account using XBaya GUI for Jackrabbit registry

** Task
    * [AIRAVATA-78] - Creating a document how to deploy gfac-axis2 service on axis2
    * [AIRAVATA-145] - Deprecate support for GPEL Client in XBaya
    * [AIRAVATA-227] - Disable Jython Execution Menu
    * [AIRAVATA-246] - Update the site documentation
    * [AIRAVATA-247] - Create new document for advance workflow sample running
    * [AIRAVATA-248] - Add the Complex-math-service and Levinshtine-distance-service to the maven build, in order to build axis2 service archives

** Improvement
    * [AIRAVATA-222] - Workflow launch input box requires inserting xml wrapper elements
    * [AIRAVATA-223] - Workflow Interpreter should go to pause if it waits on a failed service
    * [AIRAVATA-224] - Popup  save dialog when closing the workflow tab if changed
    * [AIRAVATA-225] - Add more samples/workflows which demonstrates the use of basic constructs
    * [AIRAVATA-226] - Allow user to browse the Application during definition of application description
    * [AIRAVATA-230] - Review XBaya code
    * [AIRAVATA-231] - Deprecate Stream component
    * [AIRAVATA-235] - Ability to edit existing application/service and host descriptions
    * [AIRAVATA-241] - Check App/Service/host descriptions before saving whether it overrides existing document

** Bug
    * [AIRAVATA-81] - Workflow interpreter- Workflow already running
    * [AIRAVATA-118] - WS-Notification monitoring tool is failing in airavata
    * [AIRAVATA-181] - When adding a ServiceDescription through the UI sometimes the out parameter is not added
    * [AIRAVATA-184] - Messagebox test should skip if a listener port cannot be started on machine due to firewall or system issues. 
    * [AIRAVATA-194] - XBaya Registry Test throws XML Parsing error
    * [AIRAVATA-203] - XBaya console error: node does not have a parent
    * [AIRAVATA-205] - SimpleMathService can be added 2 time but not more than that
    * [AIRAVATA-217] - GramProvider Test is failing with new schema
    * [AIRAVATA-218] - Application registration randomly sets application name to Application1
    * [AIRAVATA-219] - Appearence of dynamic workflow run toolbar during workflow execution
    * [AIRAVATA-221] - Inconsistency in managing of the Workflow instance status from GUI
    * [AIRAVATA-228] - XBaya Registry Connection Error Message
    * [AIRAVATA-233] - ressurect workflow test
    * [AIRAVATA-234] - HostDescription is allowed to be saved over and over in HostDescriptionDialog
    * [AIRAVATA-244] - CrossProductWorkflowTest fails with a NP
    * [AIRAVATA-245] - Fixing a build failure in WorkflowTrackingTest

** Test
    * [AIRAVATA-238] - Include a workflow tracking test that include the Messaging system
    * [AIRAVATA-242] - Registry Delete test
    * [AIRAVATA-243] - Registry Restart while XBaya is running Test


Version 0.1 Attempted Release on 2011-11-11 and Cancelled
=========================================================

** Initial Setup
    * [AIRAVATA-1 to AIRAVATA-10] - Accepting Code donation from OGCE. Setup and organize SVN, Website JIRA.
    
** Crypto Requirements & License Compatibility
    * [AIRAVATA-7] - Crypto Requirements for all SSL and GSI Security Dependencies
    * [AIRAVATA-23, AIRAVATA-26 to 28] - Remove MySQL jars and integrate with Apache Derby In-Memory database
   
** Build, Tools, Documentation & Code Cleanup
    * [AIRAVATA-38] - Improve Eclipse support
    * [AIRAVATA-94] - Add Airavata to Apache Sonar analysis service
    * [AIRAVATA-95] - Add Airavata to Apache's Jenkins build system
    * [AIRAVATA-42] - Providing README.txt and install files in to source
    * [AIRAVATA-58] - SVN Reorganization
    * [AIRAVATA-56] - Clean up Workflow-Interpreter pom file and correct the build profile for this module
    * [AIRAVATA-86] - create complete airavata distribution
    * [AIRAVATA-101] - Clean up WS-Messenger package
    * [AIRAVATA-122] - Add Architecture to Website
    * [AIRAVATA-144] - Deprecate XRegistry and move to Attic
    
** Improvement
    * [AIRAVATA-68] - Import OGCE GFac Schema as based type system for airavata Gfac
    * [AIRAVATA-102] - Simplify XBaya Menu to make it self explanatory
    * [AIRAVATA-105] - Improvements to the HostDescription, ServiceDescription and ApplicationDeploymentDescription classes
    * [AIRAVATA-107 to AIRAVATA-110] - Switch Logging Library to SLF4J
    * [AIRAVATA-123] - Aggregate the existing 3 forms & create a single form to support adding Application/Service/Host descriptors from XBaya GUI
    * [AIRAVATA-143] - Integrate Globus Online file transfer capability to XBaya
    * [AIRAVATA-146] - Add a Window to XBaya to support Globus online file transfers
    * [AIRAVATA-152] - Support application level scheduling and outputs in execution context
    * [AIRAVATA-153] - Improve ShellApplicationDeployment to use POJOs generated from XMLBeans
    * [AIRAVATA-161] - Reorganize Application Schema to make it extendable. 
    * [AIRAVATA-162] - Service Description Schema should have method and port types to generate wsdl
    * [AIRAVATA-171] - Remove GFac POJO and replace with XMLBeans object

** New Feature
    * [AIRAVATA-75] - Integrate new Registry API and GFAC Pojos to XBaya
    * [AIRAVATA-117] - Provided set of gfac-urls can be used in xbaya by referring registry
    * [AIRAVATA-134] - Saving outputs of Nodes in to Registry User space
    * [AIRAVATA-148] - Create a JCR registry browser for XBaya
    * [AIRAVATA-157] - Add workflow provenance interface to catalog workflow execution data
    * [AIRAVATA-158] - Implement Provenance Cataloging with JCR registry
    * [AIRAVATA-163] - Add WSDL Generation utilities to gfac-schema-utils
    * [AIRAVATA-119] - Save Application Descriptors through the JCRComponentRegistry in ApplicationDescriptionRegistrationWindow
    * [AIRAVATA-137] - When creating/updating a Service Description the WSDL for that service should be autogenerated & saved to the registry  
    * [AIRAVATA-61] - Integration of improved workflow tracking library
    * [AIRAVATA-36] - Change XBaya event handling to new WS-Messenger Client
    * [AIRAVATA-50] - Integrate all Airavata components system to use improved WS-Messenger
    * [AIRAVATA-171] - Improved GFac Application Registration Schema to use XML Beans, change the GFac Architecture
    * [AIRAVATA-183] - Change GFac architecture to serve incoming request, without starting temporary services each time
    * [AIRAVATA-73] - Add a Repository interface to GFac to experiment with JCR repository API
    * [AIRAVATA-74] - Integrate new Registry API to GFAC
    * [AIRAVATA-148 Create a JCR registry browser for XBaya
    * [AIRAVATA-159] - Add data browsing to the registry browser
    * [AIRAVATA-183] - Changing GFac architecture to better integrate with Axis2

** Bug
    * [AIRAVATA-24] - Error while running MsgBoxSample
    * [AIRAVATA-140] - Removing XRegistry menus from Xbaya since they are no longer functioning.
    * [AIRAVATA-142] - Cannot execute a workflow in XBaya when MessageBox is deployed on other machine
    * [AIRAVATA-150] - XBayaService is not working
    * [AIRAVATA-151] - Fixing a build error in Airavata trunk
    * [AIRAVATA-154] - Fixing a test failure in PropertiesBasedServiceImplTest
    * [AIRAVATA-155] - Improve ServiceDescription to use POJOs generated from XMLBeans
    * [AIRAVATA-156] - Improve DataType class to use POJOs generated from XMLBeans
    * [AIRAVATA-160] - Storing inputs for workflow in to Registry
    * [AIRAVATA-164] - XML format error while running the test WorkflowTest
    * [AIRAVATA-168] - Fixing the name of generated apache-airavata--0.0.1-SNAPSHOT-bin.zip file
    * [AIRAVATA-172] - Fix build warnings
    * [AIRAVATA-182] - Fixing the build failure in airavata trunk




