Apache Airavata Release Notes

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

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




