Title: Distributed Application Management Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at . http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. Airavata Generic Application Service Factory (GFac) facilitates users to create Web Services wrapping commandline applications. The generated application service WSDL interface provides input and outputs of the wrapped application. GFac provides a generic framework to wrap an application as a service interface in Java. This service layers separates the invocation from the communication layer supporting multiple protocol likes SOAP, REST, or JSON. Thus GFac can generate a SOAP, REST or native Java interface to any command line application. Currently, Apache Airavata focuses on the Axis2 and core java implementations, but is well architected to incorporate the GFac-Core into any service frameworks. The application provider first describes the input, outputs, deployment information, temporary working directories, remote access mechanisms for file transfers and job submissions and registers the information with a registry service. Once applications are registered, GFac Distributed Application Management handles the file staging, Job submission, and security protocols associated with executions. Furthermore, the service acts as the extensible runtime around which extensions like sharing, auditing and resource scheduling are implemented. During execution, the application schedule is determined and the input data files specified by input parameters are staged to computational host and the underlying application is executed using a job submission mechanisms. Currently, Grid, Cloud, SSH and Local submissions are supported. Subsequently, the framework monitors the status of remote application, and publishes frequent activity information to the event bus. Once the invocation is complete, the application service tries to determine the results of the application invocation by searching the standard output for user-defined patterns or by listed a pre-specified location for generated data products. The application service runtime is implemented using a processing pipeline based on the Chain of Responsibility pattern, where the pipeline can be altered by inserting interceptors. The resulting architecture is highly flexible and extensible, and provides the ideal architectural basis for a system that supports wide range of requirements. Some of the features of the toolkit include: * Inherent application life time management and the architecture allows to have large number of services registered and used. * The Application service performs data staging supporting multiple protocols including http, scp, GridFTP and S3. * The generated services are instrumented with detailed execution activity. * The toolkit supports job submissions to Local, Grid and Cloud computing resources.