You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by he...@apache.org on 2013/03/06 16:57:54 UTC

svn commit: r1453396 - in /airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl: AbstractProvider.java EC2Provider.java SSHProvider.java

Author: heshan
Date: Wed Mar  6 15:57:54 2013
New Revision: 1453396

URL: http://svn.apache.org/r1453396
Log:
Commenting out the SSHProvider as it should be updated and tested against the new gfac.core architecture.

Modified:
    airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/AbstractProvider.java
    airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/EC2Provider.java
    airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/SSHProvider.java

Modified: airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/AbstractProvider.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/AbstractProvider.java?rev=1453396&r1=1453395&r2=1453396&view=diff
==============================================================================
--- airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/AbstractProvider.java (original)
+++ airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/AbstractProvider.java Wed Mar  6 15:57:54 2013
@@ -1,89 +1,89 @@
-/*
- *
- * 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.
- *
- */
-
-package org.apache.airavata.gfac.provider.impl;
-
-import java.util.Map;
-
-import org.apache.airavata.common.workflow.execution.context.WorkflowContextHeaderBuilder;
-import org.apache.airavata.core.gfac.context.invocation.InvocationContext;
-import org.apache.airavata.core.gfac.exception.*;
-import org.apache.airavata.core.gfac.notification.GFacNotifier;
-import org.apache.airavata.core.gfac.provider.Provider;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * AbstractProvider wraps up steps of execution for Provider. <br/>
- * The steps in execution are <br/>
- * - makeDirectory <br/>
- * - setupEnvironment <br/>
- * - executeApplication <br/>
- * - retrieveOutput <br/>
- */
-public abstract class AbstractProvider implements Provider {
-    protected final Logger log = LoggerFactory.getLogger(this.getClass() +
-            "." + WorkflowContextHeaderBuilder.getCurrentContextHeader().getWorkflowMonitoringContext().getExperimentId());
-    public void initialize(InvocationContext invocationContext) throws ProviderException {
-        /*
-         * Make a directory on the host
-         */
-        makeDirectory(invocationContext);
-    }
-
-    public void dispose(InvocationContext invocationContext) throws GfacException {
-    }
-
-    public Map<String, ?> execute(InvocationContext invocationContext) throws ProviderException {
-
-    	processInput(invocationContext);
-    	/*
-         * Setup necessary environment
-         */
-        setupEnvironment(invocationContext);
-
-        GFacNotifier notifier = invocationContext.getExecutionContext().getNotifier();
-
-        notifier.startExecution(invocationContext);
-
-        /*
-         * Execution application
-         */
-        executeApplication(invocationContext);
-
-        notifier.finishExecution(invocationContext);
-
-        /*
-         * Process output information
-         */
-        return processOutput(invocationContext);
-    }
-
-    protected abstract void makeDirectory(InvocationContext invocationContext) throws ProviderException;
-
-    protected abstract void setupEnvironment(InvocationContext invocationContext) throws ProviderException;
-
-    protected abstract void executeApplication(InvocationContext invocationContext) throws ProviderException;
-
-    protected abstract Map<String, ?> processOutput(InvocationContext invocationContext) throws ProviderException;
-
-    protected abstract Map<String, ?> processInput(InvocationContext invocationContext) throws ProviderException;
-}
+///*
+// *
+// * 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.
+// *
+// */
+//
+//package org.apache.airavata.gfac.provider.impl;
+//
+//import java.util.Map;
+//
+//import org.apache.airavata.common.workflow.execution.context.WorkflowContextHeaderBuilder;
+//import org.apache.airavata.core.gfac.context.invocation.InvocationContext;
+//import org.apache.airavata.core.gfac.exception.*;
+//import org.apache.airavata.core.gfac.notification.GFacNotifier;
+//import org.apache.airavata.core.gfac.provider.Provider;
+//import org.slf4j.Logger;
+//import org.slf4j.LoggerFactory;
+//
+///**
+// * AbstractProvider wraps up steps of execution for Provider. <br/>
+// * The steps in execution are <br/>
+// * - makeDirectory <br/>
+// * - setupEnvironment <br/>
+// * - executeApplication <br/>
+// * - retrieveOutput <br/>
+// */
+//public abstract class AbstractProvider implements Provider {
+//    protected final Logger log = LoggerFactory.getLogger(this.getClass() +
+//            "." + WorkflowContextHeaderBuilder.getCurrentContextHeader().getWorkflowMonitoringContext().getExperimentId());
+//    public void initialize(InvocationContext invocationContext) throws ProviderException {
+//        /*
+//         * Make a directory on the host
+//         */
+//        makeDirectory(invocationContext);
+//    }
+//
+//    public void dispose(InvocationContext invocationContext) throws GfacException {
+//    }
+//
+//    public Map<String, ?> execute(InvocationContext invocationContext) throws ProviderException {
+//
+//    	processInput(invocationContext);
+//    	/*
+//         * Setup necessary environment
+//         */
+//        setupEnvironment(invocationContext);
+//
+//        GFacNotifier notifier = invocationContext.getExecutionContext().getNotifier();
+//
+//        notifier.startExecution(invocationContext);
+//
+//        /*
+//         * Execution application
+//         */
+//        executeApplication(invocationContext);
+//
+//        notifier.finishExecution(invocationContext);
+//
+//        /*
+//         * Process output information
+//         */
+//        return processOutput(invocationContext);
+//    }
+//
+//    protected abstract void makeDirectory(InvocationContext invocationContext) throws ProviderException;
+//
+//    protected abstract void setupEnvironment(InvocationContext invocationContext) throws ProviderException;
+//
+//    protected abstract void executeApplication(InvocationContext invocationContext) throws ProviderException;
+//
+//    protected abstract Map<String, ?> processOutput(InvocationContext invocationContext) throws ProviderException;
+//
+//    protected abstract Map<String, ?> processInput(InvocationContext invocationContext) throws ProviderException;
+//}

Modified: airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/EC2Provider.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/EC2Provider.java?rev=1453396&r1=1453395&r2=1453396&view=diff
==============================================================================
--- airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/EC2Provider.java (original)
+++ airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/EC2Provider.java Wed Mar  6 15:57:54 2013
@@ -31,7 +31,10 @@ import org.apache.airavata.gfac.context.
 import org.apache.airavata.gfac.context.JobExecutionContext;
 import org.apache.airavata.gfac.provider.GFacProvider;
 import org.apache.airavata.gfac.provider.GFacProviderException;
+import org.apache.airavata.gfac.utils.GramJobSubmissionListener;
 import org.bouncycastle.openssl.PEMWriter;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.io.*;
 import java.security.KeyPairGenerator;
@@ -43,7 +46,9 @@ import java.util.List;
 // TODO
 // import com.sshtools.j2ssh.util.Base64;
 
-public class EC2Provider extends SSHProvider implements GFacProvider {
+public class EC2Provider /*extends SSHProvider*/ implements GFacProvider {
+
+    private static final Logger log = LoggerFactory.getLogger(EC2Provider.class);
 
     public static final int SLEEP_TIME_SECOND = 120;
 

Modified: airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/SSHProvider.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/SSHProvider.java?rev=1453396&r1=1453395&r2=1453396&view=diff
==============================================================================
--- airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/SSHProvider.java (original)
+++ airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/SSHProvider.java Wed Mar  6 15:57:54 2013
@@ -1,282 +1,282 @@
-/*
- *
- * 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.
- *
- */
-
-package org.apache.airavata.gfac.provider.impl;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.concurrent.TimeUnit;
-
-import net.schmizz.sshj.SSHClient;
-import net.schmizz.sshj.connection.ConnectionException;
-import net.schmizz.sshj.connection.channel.direct.Session;
-import net.schmizz.sshj.connection.channel.direct.Session.Command;
-import net.schmizz.sshj.transport.TransportException;
-import net.schmizz.sshj.userauth.keyprovider.KeyProvider;
-import net.schmizz.sshj.xfer.scp.SCPFileTransfer;
-
-import org.apache.airavata.commons.gfac.type.ActualParameter;
-import org.apache.airavata.core.gfac.context.invocation.InvocationContext;
-import org.apache.airavata.core.gfac.context.security.impl.SSHSecurityContextImpl;
-import org.apache.airavata.core.gfac.exception.GfacException;
-import org.apache.airavata.core.gfac.exception.ProviderException;
-import org.apache.airavata.core.gfac.utils.GFacConstants;
-import org.apache.airavata.core.gfac.utils.GfacUtils;
-import org.apache.airavata.core.gfac.utils.InputUtils;
-import org.apache.airavata.core.gfac.utils.OutputUtils;
-import org.apache.airavata.schemas.gfac.ApplicationDeploymentDescriptionType;
-import org.apache.airavata.schemas.gfac.NameValuePairType;
-import org.apache.xmlbeans.XmlException;
-
-/**
- * Execute application using remote SSH
- */
-public class SSHProvider extends AbstractProvider {
-
-    private static final String SPACE = " ";
-    private static final String SSH_SECURITY_CONTEXT = "ssh";
-    private static final int COMMAND_EXECUTION_TIMEOUT = 5;
-    private SSHSecurityContextImpl sshContext;
-    private String command;
-    private SSHClient ssh;
-
-    public SSHProvider() {
-        ssh = new SSHClient();
-    }
-
-    private Session getSession(InvocationContext context) throws IOException {
-        try {
-
-            /*
-             * if it is connected, create a session Note: one client can have multiple session (on one channel)
-             */
-            if (ssh.isConnected())
-                return ssh.startSession();
-
-            if (sshContext == null) {
-                sshContext = ((SSHSecurityContextImpl) context.getSecurityContext(SSH_SECURITY_CONTEXT));
-            }
-
-            KeyProvider pkey = ssh.loadKeys(sshContext.getPrivateKeyLoc(), sshContext.getKeyPass());
-
-            ssh.loadKnownHosts();
-            ssh.authPublickey(sshContext.getUsername(), pkey);
-
-            ssh.connect(context.getExecutionDescription().getHost().getType().getHostAddress());
-            return ssh.startSession();
-
-        } catch (NullPointerException ne) {
-            throw new SecurityException("Cannot load security context for SSH", ne);
-        }
-    }
-
-    private void closeSession(Session session) {
-        if (session != null) {
-            try {
-                session.close();
-            } catch (Exception e) {
-                log.warn("Cannot Close SSH Session");
-            }
-        }
-    }
-
-    public void makeDirectory(InvocationContext context) throws ProviderException {
-        ApplicationDeploymentDescriptionType app = context.getExecutionDescription().getApp().getType();
-
-        Session session = null;
-        try {
-            session = getSession(context);
-
-            StringBuilder commandString = new StringBuilder();
-
-            commandString.append("mkdir -p ");
-            commandString.append(app.getScratchWorkingDirectory());
-            commandString.append(" ; ");
-            commandString.append("mkdir -p ");
-            commandString.append(app.getStaticWorkingDirectory());
-            commandString.append(" ; ");
-            commandString.append("mkdir -p ");
-            commandString.append(app.getInputDataDirectory());
-            commandString.append(" ; ");
-            commandString.append("mkdir -p ");
-            commandString.append(app.getOutputDataDirectory());
-
-            Command cmd = session.exec(commandString.toString());
-            cmd.join(COMMAND_EXECUTION_TIMEOUT, TimeUnit.SECONDS);
-        } catch (ConnectionException e) {
-            throw new ProviderException(e.getMessage(), e, context);
-        } catch (TransportException e) {
-            throw new ProviderException(e.getMessage(), e, context);
-        } catch (IOException e) {
-            throw new ProviderException(e.getMessage(), e, context);
-        } finally {
-            closeSession(session);
-        }
-    }
-
-    public void setupEnvironment(InvocationContext context) throws ProviderException {
-        ApplicationDeploymentDescriptionType app = context.getExecutionDescription().getApp().getType();
-
-        // input parameter
-        ArrayList<String> tmp = new ArrayList<String>();
-        for (Iterator<String> iterator = context.getInput().getNames(); iterator.hasNext();) {
-            String key = iterator.next();
-            tmp.add(context.getInput().getStringValue(key));
-        }
-
-        List<String> cmdList = new ArrayList<String>();
-
-        /*
-         * Builder Command
-         */
-        cmdList.add(app.getExecutableLocation());
-        cmdList.addAll(tmp);
-
-        // create process builder from command
-        command = InputUtils.buildCommand(cmdList);
-
-        // redirect StdOut and StdErr
-        // TODO: Make 1> and 2> into static constants.
-        // TODO: This only works for the BASH shell. CSH and TCSH will be
-        // different.
-        command += SPACE + "1>" + SPACE + app.getStandardOutput();
-        command += SPACE + "2>" + SPACE + app.getStandardError();
-    }
-
-    public void executeApplication(InvocationContext context) throws ProviderException {
-        ApplicationDeploymentDescriptionType app = context.getExecutionDescription().getApp().getType();
-
-        Session session = null;
-        try {
-            session = getSession(context);
-
-            /*
-             * Going to working Directory
-             */
-            session.exec("cd " + app.getStaticWorkingDirectory());
-
-            // get the env of the host and the application
-            NameValuePairType[] env = app.getApplicationEnvironmentArray();
-
-            Map<String, String> nv = new HashMap<String, String>();
-            if (env != null) {
-                for (int i = 0; i < env.length; i++) {
-                    String key = env[i].getName();
-                    String value = env[i].getValue();
-                    nv.put(key, value);
-                }
-            }
-            // extra env's
-            nv.put(GFacConstants.INPUT_DATA_DIR_VAR_NAME, app.getInputDataDirectory());
-            nv.put(GFacConstants.OUTPUT_DATA_DIR_VAR_NAME, app.getOutputDataDirectory());
-
-            /*
-             * Set environment
-             */
-            log.debug("Command = " + command);
-            for (Entry<String, String> entry : nv.entrySet()) {
-                log.debug("Env[" + entry.getKey() + "] = " + entry.getValue());
-                session.setEnvVar(entry.getKey(), entry.getValue());
-            }
-
-            /*
-             * Execute
-             */
-            Command cmd = session.exec(command);
-            log.debug("stdout=" + GfacUtils.readFromStream(session.getInputStream()));
-            cmd.join(COMMAND_EXECUTION_TIMEOUT, TimeUnit.SECONDS);
-
-            /*
-             * check return value. usually not very helpful to draw conclusions based on return values so don't bother.
-             * just provide warning in the log messages
-             */
-            if (cmd.getExitStatus() != 0) {
-                log.error("Process finished with non zero return value. Process may have failed");
-            } else {
-                log.debug("Process finished with return value of zero.");
-            }
-
-        } catch (ConnectionException e) {
-            throw new  ProviderException(e.getMessage(), e, context);
-        } catch (TransportException e) {
-            throw new ProviderException(e.getMessage(), e, context);
-        } catch (IOException e) {
-            throw new ProviderException(e.getMessage(), e, context);
-        } finally {
-            closeSession(session);
-        }
-    }
-
-    public Map<String, ?> processOutput(InvocationContext context) throws ProviderException {
-        ApplicationDeploymentDescriptionType app = context.getExecutionDescription().getApp().getType();
-        try {
-
-            // Get the Stdouts and StdErrs
-            String timeStampedServiceName = GfacUtils.createUniqueNameForService(context.getServiceName());
-            File localStdOutFile = File.createTempFile(timeStampedServiceName, "stdout");
-            File localStdErrFile = File.createTempFile(timeStampedServiceName, "stderr");
-
-            SCPFileTransfer fileTransfer = ssh.newSCPFileTransfer();
-            fileTransfer.download(app.getStandardOutput(), localStdOutFile.getAbsolutePath());
-            fileTransfer.download(app.getStandardError(), localStdErrFile.getAbsolutePath());
-
-            String stdOutStr = GfacUtils.readFileToString(localStdOutFile.getAbsolutePath());
-            String stdErrStr = GfacUtils.readFileToString(localStdErrFile.getAbsolutePath());
-
-            return OutputUtils.fillOutputFromStdout(context.<ActualParameter> getOutput(), stdOutStr,stdErrStr);
-
-        } catch (XmlException e) {
-            throw new ProviderException("Cannot read output:" + e.getMessage(), e, context);
-        } catch (ConnectionException e) {
-            throw new ProviderException(e.getMessage(), e, context);
-        } catch (TransportException e) {
-            throw new ProviderException(e.getMessage(), e, context);
-        } catch (IOException e) {
-            throw new ProviderException(e.getMessage(), e, context);
-        } catch (Exception e){
-        	throw new ProviderException("Error in retrieving results",e,context);
-        }
-    }
-
-    public void dispose(InvocationContext invocationContext) throws GfacException {
-        super.dispose(invocationContext);
-        try {
-            if (ssh != null && ssh.isConnected()) {
-                ssh.disconnect();
-            }
-        } catch (Exception e) {
-            log.warn("Cannot Close SSH Connection");
-        }
-    }
-
-	@Override
-	protected Map<String, ?> processInput(InvocationContext invocationContext)
-			throws ProviderException {
-		// TODO Auto-generated method stub
-		return null;
-	}
-}
+///*
+// *
+// * 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.
+// *
+// */
+//
+//package org.apache.airavata.gfac.provider.impl;
+//
+//import java.io.File;
+//import java.io.IOException;
+//import java.util.ArrayList;
+//import java.util.HashMap;
+//import java.util.Iterator;
+//import java.util.List;
+//import java.util.Map;
+//import java.util.Map.Entry;
+//import java.util.concurrent.TimeUnit;
+//
+//import net.schmizz.sshj.SSHClient;
+//import net.schmizz.sshj.connection.ConnectionException;
+//import net.schmizz.sshj.connection.channel.direct.Session;
+//import net.schmizz.sshj.connection.channel.direct.Session.Command;
+//import net.schmizz.sshj.transport.TransportException;
+//import net.schmizz.sshj.userauth.keyprovider.KeyProvider;
+//import net.schmizz.sshj.xfer.scp.SCPFileTransfer;
+//
+//import org.apache.airavata.commons.gfac.type.ActualParameter;
+//import org.apache.airavata.core.gfac.context.invocation.InvocationContext;
+//import org.apache.airavata.core.gfac.context.security.impl.SSHSecurityContextImpl;
+//import org.apache.airavata.core.gfac.exception.GfacException;
+//import org.apache.airavata.core.gfac.exception.ProviderException;
+//import org.apache.airavata.core.gfac.utils.GFacConstants;
+//import org.apache.airavata.core.gfac.utils.GfacUtils;
+//import org.apache.airavata.core.gfac.utils.InputUtils;
+//import org.apache.airavata.core.gfac.utils.OutputUtils;
+//import org.apache.airavata.schemas.gfac.ApplicationDeploymentDescriptionType;
+//import org.apache.airavata.schemas.gfac.NameValuePairType;
+//import org.apache.xmlbeans.XmlException;
+//
+///**
+// * Execute application using remote SSH
+// */
+//public class SSHProvider extends AbstractProvider {
+//
+//    private static final String SPACE = " ";
+//    private static final String SSH_SECURITY_CONTEXT = "ssh";
+//    private static final int COMMAND_EXECUTION_TIMEOUT = 5;
+//    private SSHSecurityContextImpl sshContext;
+//    private String command;
+//    private SSHClient ssh;
+//
+//    public SSHProvider() {
+//        ssh = new SSHClient();
+//    }
+//
+//    private Session getSession(InvocationContext context) throws IOException {
+//        try {
+//
+//            /*
+//             * if it is connected, create a session Note: one client can have multiple session (on one channel)
+//             */
+//            if (ssh.isConnected())
+//                return ssh.startSession();
+//
+//            if (sshContext == null) {
+//                sshContext = ((SSHSecurityContextImpl) context.getSecurityContext(SSH_SECURITY_CONTEXT));
+//            }
+//
+//            KeyProvider pkey = ssh.loadKeys(sshContext.getPrivateKeyLoc(), sshContext.getKeyPass());
+//
+//            ssh.loadKnownHosts();
+//            ssh.authPublickey(sshContext.getUsername(), pkey);
+//
+//            ssh.connect(context.getExecutionDescription().getHost().getType().getHostAddress());
+//            return ssh.startSession();
+//
+//        } catch (NullPointerException ne) {
+//            throw new SecurityException("Cannot load security context for SSH", ne);
+//        }
+//    }
+//
+//    private void closeSession(Session session) {
+//        if (session != null) {
+//            try {
+//                session.close();
+//            } catch (Exception e) {
+//                log.warn("Cannot Close SSH Session");
+//            }
+//        }
+//    }
+//
+//    public void makeDirectory(InvocationContext context) throws ProviderException {
+//        ApplicationDeploymentDescriptionType app = context.getExecutionDescription().getApp().getType();
+//
+//        Session session = null;
+//        try {
+//            session = getSession(context);
+//
+//            StringBuilder commandString = new StringBuilder();
+//
+//            commandString.append("mkdir -p ");
+//            commandString.append(app.getScratchWorkingDirectory());
+//            commandString.append(" ; ");
+//            commandString.append("mkdir -p ");
+//            commandString.append(app.getStaticWorkingDirectory());
+//            commandString.append(" ; ");
+//            commandString.append("mkdir -p ");
+//            commandString.append(app.getInputDataDirectory());
+//            commandString.append(" ; ");
+//            commandString.append("mkdir -p ");
+//            commandString.append(app.getOutputDataDirectory());
+//
+//            Command cmd = session.exec(commandString.toString());
+//            cmd.join(COMMAND_EXECUTION_TIMEOUT, TimeUnit.SECONDS);
+//        } catch (ConnectionException e) {
+//            throw new ProviderException(e.getMessage(), e, context);
+//        } catch (TransportException e) {
+//            throw new ProviderException(e.getMessage(), e, context);
+//        } catch (IOException e) {
+//            throw new ProviderException(e.getMessage(), e, context);
+//        } finally {
+//            closeSession(session);
+//        }
+//    }
+//
+//    public void setupEnvironment(InvocationContext context) throws ProviderException {
+//        ApplicationDeploymentDescriptionType app = context.getExecutionDescription().getApp().getType();
+//
+//        // input parameter
+//        ArrayList<String> tmp = new ArrayList<String>();
+//        for (Iterator<String> iterator = context.getInput().getNames(); iterator.hasNext();) {
+//            String key = iterator.next();
+//            tmp.add(context.getInput().getStringValue(key));
+//        }
+//
+//        List<String> cmdList = new ArrayList<String>();
+//
+//        /*
+//         * Builder Command
+//         */
+//        cmdList.add(app.getExecutableLocation());
+//        cmdList.addAll(tmp);
+//
+//        // create process builder from command
+//        command = InputUtils.buildCommand(cmdList);
+//
+//        // redirect StdOut and StdErr
+//        // TODO: Make 1> and 2> into static constants.
+//        // TODO: This only works for the BASH shell. CSH and TCSH will be
+//        // different.
+//        command += SPACE + "1>" + SPACE + app.getStandardOutput();
+//        command += SPACE + "2>" + SPACE + app.getStandardError();
+//    }
+//
+//    public void executeApplication(InvocationContext context) throws ProviderException {
+//        ApplicationDeploymentDescriptionType app = context.getExecutionDescription().getApp().getType();
+//
+//        Session session = null;
+//        try {
+//            session = getSession(context);
+//
+//            /*
+//             * Going to working Directory
+//             */
+//            session.exec("cd " + app.getStaticWorkingDirectory());
+//
+//            // get the env of the host and the application
+//            NameValuePairType[] env = app.getApplicationEnvironmentArray();
+//
+//            Map<String, String> nv = new HashMap<String, String>();
+//            if (env != null) {
+//                for (int i = 0; i < env.length; i++) {
+//                    String key = env[i].getName();
+//                    String value = env[i].getValue();
+//                    nv.put(key, value);
+//                }
+//            }
+//            // extra env's
+//            nv.put(GFacConstants.INPUT_DATA_DIR_VAR_NAME, app.getInputDataDirectory());
+//            nv.put(GFacConstants.OUTPUT_DATA_DIR_VAR_NAME, app.getOutputDataDirectory());
+//
+//            /*
+//             * Set environment
+//             */
+//            log.debug("Command = " + command);
+//            for (Entry<String, String> entry : nv.entrySet()) {
+//                log.debug("Env[" + entry.getKey() + "] = " + entry.getValue());
+//                session.setEnvVar(entry.getKey(), entry.getValue());
+//            }
+//
+//            /*
+//             * Execute
+//             */
+//            Command cmd = session.exec(command);
+//            log.debug("stdout=" + GfacUtils.readFromStream(session.getInputStream()));
+//            cmd.join(COMMAND_EXECUTION_TIMEOUT, TimeUnit.SECONDS);
+//
+//            /*
+//             * check return value. usually not very helpful to draw conclusions based on return values so don't bother.
+//             * just provide warning in the log messages
+//             */
+//            if (cmd.getExitStatus() != 0) {
+//                log.error("Process finished with non zero return value. Process may have failed");
+//            } else {
+//                log.debug("Process finished with return value of zero.");
+//            }
+//
+//        } catch (ConnectionException e) {
+//            throw new  ProviderException(e.getMessage(), e, context);
+//        } catch (TransportException e) {
+//            throw new ProviderException(e.getMessage(), e, context);
+//        } catch (IOException e) {
+//            throw new ProviderException(e.getMessage(), e, context);
+//        } finally {
+//            closeSession(session);
+//        }
+//    }
+//
+//    public Map<String, ?> processOutput(InvocationContext context) throws ProviderException {
+//        ApplicationDeploymentDescriptionType app = context.getExecutionDescription().getApp().getType();
+//        try {
+//
+//            // Get the Stdouts and StdErrs
+//            String timeStampedServiceName = GfacUtils.createUniqueNameForService(context.getServiceName());
+//            File localStdOutFile = File.createTempFile(timeStampedServiceName, "stdout");
+//            File localStdErrFile = File.createTempFile(timeStampedServiceName, "stderr");
+//
+//            SCPFileTransfer fileTransfer = ssh.newSCPFileTransfer();
+//            fileTransfer.download(app.getStandardOutput(), localStdOutFile.getAbsolutePath());
+//            fileTransfer.download(app.getStandardError(), localStdErrFile.getAbsolutePath());
+//
+//            String stdOutStr = GfacUtils.readFileToString(localStdOutFile.getAbsolutePath());
+//            String stdErrStr = GfacUtils.readFileToString(localStdErrFile.getAbsolutePath());
+//
+//            return OutputUtils.fillOutputFromStdout(context.<ActualParameter> getOutput(), stdOutStr,stdErrStr);
+//
+//        } catch (XmlException e) {
+//            throw new ProviderException("Cannot read output:" + e.getMessage(), e, context);
+//        } catch (ConnectionException e) {
+//            throw new ProviderException(e.getMessage(), e, context);
+//        } catch (TransportException e) {
+//            throw new ProviderException(e.getMessage(), e, context);
+//        } catch (IOException e) {
+//            throw new ProviderException(e.getMessage(), e, context);
+//        } catch (Exception e){
+//        	throw new ProviderException("Error in retrieving results",e,context);
+//        }
+//    }
+//
+//    public void dispose(InvocationContext invocationContext) throws GfacException {
+//        super.dispose(invocationContext);
+//        try {
+//            if (ssh != null && ssh.isConnected()) {
+//                ssh.disconnect();
+//            }
+//        } catch (Exception e) {
+//            log.warn("Cannot Close SSH Connection");
+//        }
+//    }
+//
+//	@Override
+//	protected Map<String, ?> processInput(InvocationContext invocationContext)
+//			throws ProviderException {
+//		// TODO Auto-generated method stub
+//		return null;
+//	}
+//}