You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by sa...@apache.org on 2013/06/10 21:21:49 UTC

svn commit: r1491570 - in /airavata/trunk/modules: airavata-client/src/main/java/org/apache/airavata/client/api/ airavata-client/src/main/java/org/apache/airavata/client/impl/ gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/ gfac-core/sr...

Author: samindaw
Date: Mon Jun 10 19:21:49 2013
New Revision: 1491570

URL: http://svn.apache.org/r1491570
Log:
application job data persistance for BESProvider + refacting

Modified:
    airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/api/ProvenanceManager.java
    airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/impl/ProvenanceManagerImpl.java
    airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/BESProvider.java
    airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/GramProvider.java
    airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/LocalProvider.java
    airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/utils/GFacUtils.java
    airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/utils/GramJobSubmissionListener.java
    airavata/trunk/modules/registry/registry-api/src/main/java/org/apache/airavata/registry/api/ProvenanceRegistry.java
    airavata/trunk/modules/registry/registry-api/src/main/java/org/apache/airavata/registry/api/workflow/ApplicationJob.java

Modified: airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/api/ProvenanceManager.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/api/ProvenanceManager.java?rev=1491570&r1=1491569&r2=1491570&view=diff
==============================================================================
--- airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/api/ProvenanceManager.java (original)
+++ airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/api/ProvenanceManager.java Mon Jun 10 19:21:49 2013
@@ -398,6 +398,14 @@ public interface ProvenanceManager {
       */
      public void updateApplicationJobStatus(String jobId, ApplicationJobStatus status, Date statusUpdateTime) throws AiravataAPIInvocationException;
      
+	 /**
+	 * Update the status of the job for the current server time
+	 * @param jobId
+	 * @param status
+	 * @throws RegistryException
+	 */
+     public void updateApplicationJobStatus(String jobId, ApplicationJobStatus status) throws AiravataAPIInvocationException;
+     
      /**
       * Update the job data. GFacProvider implementation should decide the job data. Typically it'll 
       * be a serialization of the submitted job query (eg: rsl for a GRAM job) 

Modified: airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/impl/ProvenanceManagerImpl.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/impl/ProvenanceManagerImpl.java?rev=1491570&r1=1491569&r2=1491570&view=diff
==============================================================================
--- airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/impl/ProvenanceManagerImpl.java (original)
+++ airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/impl/ProvenanceManagerImpl.java Mon Jun 10 19:21:49 2013
@@ -21,6 +21,7 @@
 
 package org.apache.airavata.client.impl;
 
+import java.util.Calendar;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
@@ -521,60 +522,60 @@ public class ProvenanceManagerImpl imple
 	}
 
 	@Override
-	public void updateApplicationJobStatus(String gfacJobId, ApplicationJobStatus status, Date statusUpdateTime)
+	public void updateApplicationJobStatus(String jobId, ApplicationJobStatus status, Date statusUpdateTime)
 			throws AiravataAPIInvocationException {
 		try {
-			client.getRegistryClient().updateApplicationJobStatus(gfacJobId, status, statusUpdateTime);
+			client.getRegistryClient().updateApplicationJobStatus(jobId, status, statusUpdateTime);
 		} catch (Exception e) {
 			throw new AiravataAPIInvocationException(e);
 		}
 	}
 
 	@Override
-	public void updateApplicationJobData(String gfacJobId, String jobdata)
+	public void updateApplicationJobData(String jobId, String jobdata)
 			throws AiravataAPIInvocationException {
 		try {
-			client.getRegistryClient().updateApplicationJobData(gfacJobId, jobdata);
+			client.getRegistryClient().updateApplicationJobData(jobId, jobdata);
 		} catch (Exception e) {
 			throw new AiravataAPIInvocationException(e);
 		}
 	}
 
 	@Override
-	public void updateApplicationJobSubmittedTime(String gfacJobId, Date submitted)
+	public void updateApplicationJobSubmittedTime(String jobId, Date submitted)
 			throws AiravataAPIInvocationException {
 		try {
-			client.getRegistryClient().updateApplicationJobSubmittedTime(gfacJobId, submitted);
+			client.getRegistryClient().updateApplicationJobSubmittedTime(jobId, submitted);
 		} catch (Exception e) {
 			throw new AiravataAPIInvocationException(e);
 		}
 	}
 
 	@Override
-	public void updateApplicationJobStatusUpdateTime(String gfacJobId, Date completed)
+	public void updateApplicationJobStatusUpdateTime(String jobId, Date completed)
 			throws AiravataAPIInvocationException {
 		try {
-			client.getRegistryClient().updateApplicationJobStatusUpdateTime(gfacJobId, completed);
+			client.getRegistryClient().updateApplicationJobStatusUpdateTime(jobId, completed);
 		} catch (Exception e) {
 			throw new AiravataAPIInvocationException(e);
 		}
 	}
 
 	@Override
-	public void updateApplicationJobMetadata(String gfacJobId, String metadata)
+	public void updateApplicationJobMetadata(String jobId, String metadata)
 			throws AiravataAPIInvocationException {
 		try {
-			client.getRegistryClient().updateApplicationJobMetadata(gfacJobId, metadata);
+			client.getRegistryClient().updateApplicationJobMetadata(jobId, metadata);
 		} catch (Exception e) {
 			throw new AiravataAPIInvocationException(e);
 		}
 	}
 
 	@Override
-	public ApplicationJob getApplicationJob(String gfacJobId)
+	public ApplicationJob getApplicationJob(String jobId)
 			throws AiravataAPIInvocationException {
 		try {
-			return client.getRegistryClient().getApplicationJob(gfacJobId);
+			return client.getRegistryClient().getApplicationJob(jobId);
 		} catch (Exception e) {
 			throw new AiravataAPIInvocationException(e);
 		}
@@ -602,4 +603,10 @@ public class ProvenanceManagerImpl imple
 		}
 	}
 
+	@Override
+	public void updateApplicationJobStatus(String jobId,
+			ApplicationJobStatus status) throws AiravataAPIInvocationException {
+		updateApplicationJobStatus(jobId, status, Calendar.getInstance().getTime());
+	}
+
 }

Modified: airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/BESProvider.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/BESProvider.java?rev=1491570&r1=1491569&r2=1491570&view=diff
==============================================================================
--- airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/BESProvider.java (original)
+++ airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/BESProvider.java Mon Jun 10 19:21:49 2013
@@ -25,21 +25,32 @@ import java.io.BufferedOutputStream;
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
 import org.apache.airavata.gfac.GFacException;
 import org.apache.airavata.gfac.context.JobExecutionContext;
 import org.apache.airavata.gfac.context.security.GSISecurityContext;
 import org.apache.airavata.gfac.provider.GFacProvider;
 import org.apache.airavata.gfac.provider.GFacProviderException;
+import org.apache.airavata.gfac.utils.GFacUtils;
+import org.apache.airavata.registry.api.workflow.ApplicationJob;
+import org.apache.airavata.registry.api.workflow.ApplicationJob.ApplicationJobStatus;
 import org.apache.airavata.schemas.gfac.UnicoreHostType;
 import org.apache.xmlbeans.XmlCursor;
 import org.ggf.schemas.bes.x2006.x08.besFactory.ActivityStateEnumeration;
+import org.ggf.schemas.bes.x2006.x08.besFactory.ActivityStateEnumeration.Enum;
 import org.ggf.schemas.bes.x2006.x08.besFactory.ActivityStatusType;
 import org.ggf.schemas.bes.x2006.x08.besFactory.CreateActivityDocument;
 import org.ggf.schemas.bes.x2006.x08.besFactory.CreateActivityResponseDocument;
 import org.ggf.schemas.bes.x2006.x08.besFactory.GetActivityStatusesDocument;
 import org.ggf.schemas.bes.x2006.x08.besFactory.GetActivityStatusesResponseDocument;
+import org.ggf.schemas.jsdl.x2005.x11.jsdl.JobDefinitionType;
 import org.globus.gsi.gssapi.GlobusGSSCredentialImpl;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -86,10 +97,11 @@ public class BESProvider implements GFac
         CreateActivityDocument cad = CreateActivityDocument.Factory
                 .newInstance();
         
+		JobDefinitionType jobDefinition = null;
         try {
             //FIXME: Replace by a native client
-//			cad.addNewCreateActivity().addNewActivityDocument()
-//			        .setJobDefinition(JSDLGenerator.buildJSDLInstance(jobExecutionContext).getJobDefinition());
+//			jobDefinition = JSDLGenerator.buildJSDLInstance(jobExecutionContext).getJobDefinition();
+//			cad.addNewCreateActivity().addNewActivityDocument().setJobDefinition(jobDefinition);
 			System.out.println("REMOVE ME");
 		} catch (Exception e1) {
 			throw new GFacProviderException("Cannot generate JSDL instance from the JobExecutionContext.",e1);
@@ -123,7 +135,7 @@ public class BESProvider implements GFac
             jobId = new Long(Calendar.getInstance().getTimeInMillis())
                     .toString();
         }
-        
+		saveApplicationJob(jobExecutionContext, jobDefinition);
         log.info(formatStatusMessage(activityEpr.getAddress().getStringValue(), factory.getActivityStatus(activityEpr)
                 .toString()));
         
@@ -135,6 +147,7 @@ public class BESProvider implements GFac
             ActivityStatusType activityStatus = null;
     		try {
     			activityStatus = getStatus(factory, activityEpr);
+    			GFacUtils.updateApplicationJobStatus(jobExecutionContext, jobId, getApplicationJobStatus(activityStatus));
     			log.info (subStatusAsString(activityStatus));
     		} catch (UnknownActivityIdentifierFault e) {
     			throw new GFacProviderException(e.getMessage(), e.getCause());
@@ -164,6 +177,36 @@ public class BESProvider implements GFac
 		} 
 	}
 
+	private ApplicationJobStatus getApplicationJobStatus(ActivityStatusType activityStatus){
+		if (activityStatus==null){
+			return ApplicationJobStatus.UNKNOWN;
+		}
+		Enum state = activityStatus.getState();
+		if (ActivityStateEnumeration.PENDING.equals(state)){
+			return ApplicationJobStatus.PENDING;
+		} else if (ActivityStateEnumeration.CANCELLED.equals(state)){
+			return ApplicationJobStatus.CANCELLED;
+		} else if (ActivityStateEnumeration.FAILED.equals(state)){
+			return ApplicationJobStatus.FAILED;
+		} else if (ActivityStateEnumeration.FINISHED.equals(state)){
+			return ApplicationJobStatus.FINISHED;
+		} else if (ActivityStateEnumeration.RUNNING.equals(state)){
+			return ApplicationJobStatus.EXECUTING;
+		}
+		return ApplicationJobStatus.UNKNOWN;
+	}
+	
+	private void saveApplicationJob(JobExecutionContext jobExecutionContext,
+			JobDefinitionType jobDefinition) {
+		ApplicationJob appJob = GFacUtils.createApplicationJob(jobExecutionContext);
+        appJob.setJobId(jobId);
+        appJob.setJobData(jobDefinition.toString());
+        appJob.setSubmittedTime(Calendar.getInstance().getTime());
+        appJob.setJobStatus(ApplicationJobStatus.SUBMITTED);
+        appJob.setStatusUpdateTime(appJob.getSubmittedTime());
+        GFacUtils.recordApplicationJob(jobExecutionContext, appJob);
+	}
+
 	public void dispose(JobExecutionContext jobExecutionContext)
 			throws GFacProviderException {
 		secProperties = null;

Modified: airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/GramProvider.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/GramProvider.java?rev=1491570&r1=1491569&r2=1491570&view=diff
==============================================================================
--- airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/GramProvider.java (original)
+++ airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/GramProvider.java Mon Jun 10 19:21:49 2013
@@ -23,7 +23,6 @@ package org.apache.airavata.gfac.provide
 import java.util.Calendar;
 import java.util.Map;
 
-import org.apache.airavata.client.api.exception.AiravataAPIInvocationException;
 import org.apache.airavata.gfac.GFacException;
 import org.apache.airavata.gfac.JobSubmissionFault;
 import org.apache.airavata.gfac.context.JobExecutionContext;
@@ -92,21 +91,9 @@ public class GramProvider implements GFa
            
             //WorkflowNodeGramData workflowNodeGramData = new WorkflowNodeGramData(experimentID, nodeID, job.getRSL(),hostName , job.getIDAsString());;
             
-            try {
-            	// for provider test
-            	if(jobExecutionContext.getGFacConfiguration().getAiravataAPI() != null){
-            		ApplicationJob appJob = GFacUtils.createApplicationJob(jobExecutionContext);
-                    appJob.setJobId(job.getIDAsString());
-                    appJob.setJobData(job.getRSL());
-                    appJob.setSubmittedTime(Calendar.getInstance().getTime());
-                    appJob.setJobStatus(ApplicationJobStatus.SUBMITTED);
-                    appJob.setStatusUpdateTime(appJob.getSubmittedTime());
-                    jobExecutionContext.getGFacConfiguration().getAiravataAPI().getProvenanceManager().addApplicationJob(appJob);
-            	}
-                //jobExecutionContext.getGFacConfiguration().getAiravataAPI().getProvenanceManager().updateWorkflowNodeGramData(workflowNodeGramData);
-            } catch (AiravataAPIInvocationException e) {
-                throw new GFacProviderException(e.getMessage(), e, jobExecutionContext);
-            }
+        	// for provider test
+    		saveApplicationJob(jobExecutionContext);
+    		
             /*
             * Wait until job is done
             */
@@ -145,6 +132,16 @@ public class GramProvider implements GFa
         }
 
     }
+
+	private void saveApplicationJob(JobExecutionContext jobExecutionContext) {
+		ApplicationJob appJob = GFacUtils.createApplicationJob(jobExecutionContext);
+		appJob.setJobId(job.getIDAsString());
+		appJob.setJobData(job.getRSL());
+		appJob.setSubmittedTime(Calendar.getInstance().getTime());
+		appJob.setJobStatus(ApplicationJobStatus.SUBMITTED);
+		appJob.setStatusUpdateTime(appJob.getSubmittedTime());
+		GFacUtils.recordApplicationJob(jobExecutionContext, appJob);
+	}
 	
     public void dispose(JobExecutionContext jobExecutionContext) throws GFacProviderException {
     }

Modified: airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/LocalProvider.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/LocalProvider.java?rev=1491570&r1=1491569&r2=1491570&view=diff
==============================================================================
--- airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/LocalProvider.java (original)
+++ airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/LocalProvider.java Mon Jun 10 19:21:49 2013
@@ -30,7 +30,6 @@ import java.util.Map;
 
 import javax.xml.bind.JAXB;
 
-import org.apache.airavata.client.api.exception.AiravataAPIInvocationException;
 import org.apache.airavata.gfac.Constants;
 import org.apache.airavata.gfac.GFacException;
 import org.apache.airavata.gfac.context.JobExecutionContext;
@@ -129,33 +128,9 @@ public class LocalProvider implements GF
             Process process = builder.start();
             jobId="Local_"+Calendar.getInstance().getTimeInMillis();
             if(jobExecutionContext.getGFacConfiguration().getAiravataAPI() != null){
-        		ApplicationJob appJob = GFacUtils.createApplicationJob(jobExecutionContext);
-                appJob.setJobId(jobId);
-                LocalProviderJobData data = new LocalProviderJobData();
-                data.setApplicationName(app.getExecutableLocation());
-                data.setInputDir(app.getInputDataDirectory());
-                data.setOutputDir(app.getOutputDataDirectory());
-                data.setWorkingDir(builder.directory().toString());
-                data.setInputParameters(ProviderUtils.getInputParameters(jobExecutionContext));
-                ByteArrayOutputStream stream = new ByteArrayOutputStream();
-                JAXB.marshal(data, stream);
-                appJob.setJobData(stream.toString());
-                appJob.setSubmittedTime(Calendar.getInstance().getTime());
-                appJob.setJobStatus(ApplicationJobStatus.SUBMITTED);
-                appJob.setStatusUpdateTime(appJob.getSubmittedTime());
-                try {
-					jobExecutionContext.getGFacConfiguration().getAiravataAPI().getProvenanceManager().addApplicationJob(appJob);
-				} catch (AiravataAPIInvocationException e) {
-					e.printStackTrace();
-				}
-        	}
-            if(jobExecutionContext.getGFacConfiguration().getAiravataAPI() != null){
-                try {
-					jobExecutionContext.getGFacConfiguration().getAiravataAPI().getProvenanceManager().updateApplicationJobStatus(jobId, ApplicationJobStatus.INITIALIZE, Calendar.getInstance().getTime());
-				} catch (AiravataAPIInvocationException e) {
-					e.printStackTrace();
-				}
+        		saveApplicationJob(jobExecutionContext);
         	}
+            GFacUtils.updateApplicationJobStatus(jobExecutionContext,jobId, ApplicationJobStatus.INITIALIZE);
             Thread standardOutWriter = new InputStreamToFileWriter(process.getInputStream(), app.getStandardOutput());
             Thread standardErrorWriter = new InputStreamToFileWriter(process.getErrorStream(), app.getStandardError());
 
@@ -164,23 +139,10 @@ public class LocalProvider implements GF
             standardErrorWriter.setDaemon(true);
             standardOutWriter.start();
             standardErrorWriter.start();
-            if(jobExecutionContext.getGFacConfiguration().getAiravataAPI() != null){
-                try {
-					jobExecutionContext.getGFacConfiguration().getAiravataAPI().getProvenanceManager().updateApplicationJobStatus(jobId, ApplicationJobStatus.EXECUTING, Calendar.getInstance().getTime());
-				} catch (AiravataAPIInvocationException e) {
-					e.printStackTrace();
-				}
-        	}
+            GFacUtils.updateApplicationJobStatus(jobExecutionContext,jobId, ApplicationJobStatus.EXECUTING);
             // wait for the process (application) to finish executing
             int returnValue = process.waitFor();
-
-        	if(jobExecutionContext.getGFacConfiguration().getAiravataAPI() != null){
-                try {
-					jobExecutionContext.getGFacConfiguration().getAiravataAPI().getProvenanceManager().updateApplicationJobStatus(jobId, ApplicationJobStatus.FINALIZE, Calendar.getInstance().getTime());
-				} catch (AiravataAPIInvocationException e) {
-					e.printStackTrace();
-				}
-        	}
+            GFacUtils.updateApplicationJobStatus(jobExecutionContext,jobId, ApplicationJobStatus.FINALIZE);
 
             // make sure other two threads are done
             standardOutWriter.join();
@@ -191,22 +153,10 @@ public class LocalProvider implements GF
              * just provide warning in the log messages
              */
             if (returnValue != 0) {
-            	if(jobExecutionContext.getGFacConfiguration().getAiravataAPI() != null){
-                    try {
-    					jobExecutionContext.getGFacConfiguration().getAiravataAPI().getProvenanceManager().updateApplicationJobStatus(jobId, ApplicationJobStatus.FAILED, Calendar.getInstance().getTime());
-    				} catch (AiravataAPIInvocationException e) {
-    					e.printStackTrace();
-    				}
-            	}
+            	GFacUtils.updateApplicationJobStatus(jobExecutionContext,jobId, ApplicationJobStatus.FAILED);
                 log.error("Process finished with non zero return value. Process may have failed");
             } else {
-            	if(jobExecutionContext.getGFacConfiguration().getAiravataAPI() != null){
-                    try {
-    					jobExecutionContext.getGFacConfiguration().getAiravataAPI().getProvenanceManager().updateApplicationJobStatus(jobId, ApplicationJobStatus.FINISHED, Calendar.getInstance().getTime());
-    				} catch (AiravataAPIInvocationException e) {
-    					e.printStackTrace();
-    				}
-            	}
+            	GFacUtils.updateApplicationJobStatus(jobExecutionContext,jobId, ApplicationJobStatus.FINISHED);
                 log.info("Process finished with return value of zero.");
             }
 
@@ -225,6 +175,27 @@ public class LocalProvider implements GF
         }
     }
 
+	private void saveApplicationJob(JobExecutionContext jobExecutionContext)
+			throws GFacProviderException {
+		ApplicationDeploymentDescriptionType app = jobExecutionContext.
+                getApplicationContext().getApplicationDeploymentDescription().getType();
+		ApplicationJob appJob = GFacUtils.createApplicationJob(jobExecutionContext);
+		appJob.setJobId(jobId);
+		LocalProviderJobData data = new LocalProviderJobData();
+		data.setApplicationName(app.getExecutableLocation());
+		data.setInputDir(app.getInputDataDirectory());
+		data.setOutputDir(app.getOutputDataDirectory());
+		data.setWorkingDir(builder.directory().toString());
+		data.setInputParameters(ProviderUtils.getInputParameters(jobExecutionContext));
+		ByteArrayOutputStream stream = new ByteArrayOutputStream();
+		JAXB.marshal(data, stream);
+		appJob.setJobData(stream.toString());
+		appJob.setSubmittedTime(Calendar.getInstance().getTime());
+		appJob.setJobStatus(ApplicationJobStatus.SUBMITTED);
+		appJob.setStatusUpdateTime(appJob.getSubmittedTime());
+		GFacUtils.recordApplicationJob(jobExecutionContext, appJob);
+	}
+
     public void dispose(JobExecutionContext jobExecutionContext) throws GFacProviderException {
         ApplicationDeploymentDescriptionType app = jobExecutionContext.getApplicationContext().getApplicationDeploymentDescription().getType();
 

Modified: airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/utils/GFacUtils.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/utils/GFacUtils.java?rev=1491570&r1=1491569&r2=1491570&view=diff
==============================================================================
--- airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/utils/GFacUtils.java (original)
+++ airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/utils/GFacUtils.java Mon Jun 10 19:21:49 2013
@@ -20,11 +20,14 @@
 */
 package org.apache.airavata.gfac.utils;
 
+import org.apache.airavata.client.api.AiravataAPI;
+import org.apache.airavata.client.api.exception.AiravataAPIInvocationException;
 import org.apache.airavata.commons.gfac.type.ActualParameter;
 import org.apache.airavata.gfac.Constants;
 import org.apache.airavata.gfac.context.JobExecutionContext;
 import org.apache.airavata.gfac.deployment.classloaders.JarFileClassLoader;
 import org.apache.airavata.registry.api.workflow.ApplicationJob;
+import org.apache.airavata.registry.api.workflow.ApplicationJob.ApplicationJobStatus;
 import org.apache.airavata.schemas.gfac.*;
 import org.apache.axiom.om.OMElement;
 import org.apache.axis2.deployment.DeploymentException;
@@ -415,4 +418,41 @@ public class GFacUtils {
 		appJob.setApplicationDescriptionId(jobExecutionContext.getApplicationContext().getApplicationDeploymentDescription().getType().getApplicationName().getStringValue());
 		return appJob;
 	}
+	
+	public static void updateApplicationJobStatusUpdateTime(JobExecutionContext context, String jobId, Date statusUpdateTime){
+        AiravataAPI airavataAPI = context.getGFacConfiguration().getAiravataAPI();
+		if(airavataAPI != null){
+			try {
+				airavataAPI.getProvenanceManager().updateApplicationJobStatusUpdateTime(jobId, statusUpdateTime);
+			} catch (AiravataAPIInvocationException e) {
+				log.error("Error in updating application job status time "+statusUpdateTime.toString()+" for job Id "+jobId+"!!!", e);
+			}
+        }
+	}
+	
+	public static void updateApplicationJobStatus(JobExecutionContext context, String jobId, ApplicationJobStatus status, Date statusUpdateTime){
+        AiravataAPI airavataAPI = context.getGFacConfiguration().getAiravataAPI();
+		if(airavataAPI != null){
+			try {
+				airavataAPI.getProvenanceManager().updateApplicationJobStatus(jobId, status, statusUpdateTime);
+			} catch (AiravataAPIInvocationException e) {
+				log.error("Error in updating application job status "+status.toString()+" for job Id "+jobId+"!!!", e);
+			}
+        }
+	}
+	
+	public static void recordApplicationJob(JobExecutionContext context, ApplicationJob job){
+        AiravataAPI airavataAPI = context.getGFacConfiguration().getAiravataAPI();
+		if(airavataAPI != null){
+			try {
+				airavataAPI.getProvenanceManager().addApplicationJob(job);
+			} catch (AiravataAPIInvocationException e) {
+				log.error("Error in persisting application job data for application job "+job.getJobId()+"!!!", e);
+			}
+        }
+	}
+	
+	public static void updateApplicationJobStatus(JobExecutionContext context, String jobId, ApplicationJobStatus status){
+		updateApplicationJobStatus(context, jobId, status, Calendar.getInstance().getTime());
+	}
 }

Modified: airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/utils/GramJobSubmissionListener.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/utils/GramJobSubmissionListener.java?rev=1491570&r1=1491569&r2=1491570&view=diff
==============================================================================
--- airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/utils/GramJobSubmissionListener.java (original)
+++ airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/utils/GramJobSubmissionListener.java Mon Jun 10 19:21:49 2013
@@ -22,7 +22,6 @@ package org.apache.airavata.gfac.utils;
 
 import java.util.Calendar;
 
-import org.apache.airavata.client.api.exception.AiravataAPIInvocationException;
 import org.apache.airavata.gfac.GFacException;
 import org.apache.airavata.gfac.context.JobExecutionContext;
 import org.apache.airavata.gfac.context.security.GSISecurityContext;
@@ -83,13 +82,7 @@ public class GramJobSubmissionListener i
                             break;
                         }
                     } else {
-                    	try {
-                			if (context.getGFacConfiguration().getAiravataAPI()!=null){
-                				context.getGFacConfiguration().getAiravataAPI().getProvenanceManager().updateApplicationJobStatusUpdateTime(job.getIDAsString(), Calendar.getInstance().getTime());
-                			}
-                		} catch (AiravataAPIInvocationException e) {
-                			e.printStackTrace();
-                		}
+                    	GFacUtils.updateApplicationJobStatusUpdateTime(context, job.getIDAsString(), Calendar.getInstance().getTime());
                         log.info("job " + job.getIDAsString() + " have same status: "
                                 + GramJob.getStatusAsString(status));
                     }
@@ -128,13 +121,7 @@ public class GramJobSubmissionListener i
     }
 
     private synchronized boolean setStatus(int status, int error) {
-    	try {
-			if (context.getGFacConfiguration().getAiravataAPI()!=null){
-				context.getGFacConfiguration().getAiravataAPI().getProvenanceManager().updateApplicationJobStatus(job.getIDAsString(), getApplicationJobStatus(status), Calendar.getInstance().getTime());
-			}
-		} catch (AiravataAPIInvocationException e) {
-			e.printStackTrace();
-		}
+		GFacUtils.updateApplicationJobStatus(context,job.getIDAsString(), getApplicationJobStatus(status));
         this.status = status;
         this.error = error;
 

Modified: airavata/trunk/modules/registry/registry-api/src/main/java/org/apache/airavata/registry/api/ProvenanceRegistry.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/registry/registry-api/src/main/java/org/apache/airavata/registry/api/ProvenanceRegistry.java?rev=1491570&r1=1491569&r2=1491570&view=diff
==============================================================================
--- airavata/trunk/modules/registry/registry-api/src/main/java/org/apache/airavata/registry/api/ProvenanceRegistry.java (original)
+++ airavata/trunk/modules/registry/registry-api/src/main/java/org/apache/airavata/registry/api/ProvenanceRegistry.java Mon Jun 10 19:21:49 2013
@@ -453,7 +453,7 @@ public interface ProvenanceRegistry exte
      * @throws RegistryException
      */
     public void updateApplicationJobStatus(String jobId, ApplicationJobStatus status, Date statusUpdateTime) throws RegistryException;
-    
+   
     /**
      * Update the job data. GFacProvider implementation should decide the job data. Typically it'll 
      * be a serialization of the submitted job query (eg: rsl for a GRAM job) 

Modified: airavata/trunk/modules/registry/registry-api/src/main/java/org/apache/airavata/registry/api/workflow/ApplicationJob.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/registry/registry-api/src/main/java/org/apache/airavata/registry/api/workflow/ApplicationJob.java?rev=1491570&r1=1491569&r2=1491570&view=diff
==============================================================================
--- airavata/trunk/modules/registry/registry-api/src/main/java/org/apache/airavata/registry/api/workflow/ApplicationJob.java (original)
+++ airavata/trunk/modules/registry/registry-api/src/main/java/org/apache/airavata/registry/api/workflow/ApplicationJob.java Mon Jun 10 19:21:49 2013
@@ -29,19 +29,75 @@ import java.util.Date;
 @XmlRootElement
 @XmlAccessorType(XmlAccessType.FIELD)
 public class ApplicationJob {
+	/**
+	 * Represents the status of the application job execution life cycle.<br /> 
+	 * <em><strong>Note</strong> : The applicable <code>ApplicationJobStatus</code> values and the 
+	 * particular actions that define or lead to those <code>ApplicationJobStatus</code> values is 
+	 * based on type of application (eg: GRAM, EC2) being executed</em>.   
+	 */
 	public static enum ApplicationJobStatus{
-		AUTHENTICATE, //authenticating
-		SUBMITTED, //job is submitted, possibly waiting to start executing
-		INITIALIZE, //job is being initialized 
-		PENDING, //job is pending to be started
-		EXECUTING, //submitted job is being executed
-		SUSPENDED, //job was paused
-		WAITING_FOR_DATA, // job is waiting for data to continue executing
-		FINALIZE, //job is being initialized 
-		FINISHED, // job completed successfully
-		FAILED, // error occurred while job was executing and the job stopped
-		CANCELLED, //job was cancelled
-		UNKNOWN // unknown status. lookup the metadata for more details.
+		/**
+		 * Input data/files is being staged for the application job.
+		 */
+		STAGING,
+		/**
+		 * Authenticating
+		 */
+		AUTHENTICATE,
+		/**
+		 * Application job is submitted, possibly waiting to start executing.
+		 */
+		SUBMITTED,
+		/**
+		 * Application job is being initialized.
+		 */
+		INITIALIZE, 
+		/**
+		 * Application job is waiting to start/continue its executing.
+		 */
+		PENDING,
+		/**
+		 * Application job is being executed.
+		 */
+		EXECUTING, 
+		/**
+		 * Application job is paused/suspended
+		 */
+		SUSPENDED,
+		/**
+		 * Application job is waiting for data or a trigger to continue its execution.
+		 */
+		WAITING_FOR_DATA,
+		/**
+		 * Finalizing the execution of the application job.
+		 */
+		FINALIZE,
+		/**
+		 * Results of the application job execution are being generated.
+		 */
+		RESULTS_GEN,
+		/**
+		 * Generated results from the application job execution is being retrieved.
+		 */
+		RESULTS_RETRIEVE,
+		/**
+		 * Application job completed successfully.
+		 */
+		FINISHED,
+		/**
+		 * Error occurred during the application job execution and the job was terminated.
+		 */
+		FAILED, 
+		/**
+		 * Execution of the application job was cancelled.
+		 */
+		CANCELLED,
+		/**
+		 * Unable to determine the current status of the application job. <br />
+		 * <em><strong>Note: </strong>More information may be available on the application job 
+		 * </em><code>metadata</code>.
+		 */
+		UNKNOWN 
 	}
 	
 	private String experimentId;
@@ -61,6 +117,10 @@ public class ApplicationJob {
 	
 	private String metadata;
 
+	/**
+	 * The id of the experiment which this application job corresponds to
+	 * @return
+	 */
 	public String getExperimentId() {
 		return experimentId;
 	}
@@ -69,6 +129,9 @@ public class ApplicationJob {
 		this.experimentId = experimentId;
 	}
 
+	/**
+	 * The id of the workflow instance execution which this application job corresponds to
+	 */
 	public String getWorkflowExecutionId() {
 		return workflowExecutionId;
 	}
@@ -77,6 +140,9 @@ public class ApplicationJob {
 		this.workflowExecutionId = workflowExecutionId;
 	}
 
+	/**
+	 * The id of the node which this application job corresponds to
+	 */
 	public String getNodeId() {
 		return nodeId;
 	}
@@ -85,6 +151,9 @@ public class ApplicationJob {
 		this.nodeId = nodeId;
 	}
 
+	/**
+	 * The id of the service description which this application job corresponds to
+	 */
 	public String getServiceDescriptionId() {
 		return serviceDescriptionId;
 	}
@@ -92,7 +161,12 @@ public class ApplicationJob {
 	public void setServiceDescriptionId(String serviceDescriptionId) {
 		this.serviceDescriptionId = serviceDescriptionId;
 	}
-
+	
+	/**
+	 * The id of the host description which this application job corresponds to <br />
+	 * <em><strong>Note: </strong>For data saved using the deprecated API function 
+	 * {@code updateWorkflowNodeGramData(...)} this will be the address of the host</em>
+	 */
 	public String getHostDescriptionId() {
 		return hostDescriptionId;
 	}
@@ -101,6 +175,9 @@ public class ApplicationJob {
 		this.hostDescriptionId = hostDescriptionId;
 	}
 
+	/**
+	 * The id of the application description which this application job corresponds to 
+	 */
 	public String getApplicationDescriptionId() {
 		return applicationDescriptionId;
 	}
@@ -109,22 +186,47 @@ public class ApplicationJob {
 		this.applicationDescriptionId = applicationDescriptionId;
 	}
 
+	/**
+	 * id representing the application job uniquely identified in the Airavata system <br />
+	 * <em><strong>Note: </strong>This id may or may not correspond to an id that can identify a 
+	 * resource execution in the computational middleware</em>
+	 */
 	public String getJobId() {
 		return jobId;
 	}
 
+	/**
+	 * Set a unique id which represents this job in the Airavata system. 
+	 */
 	public void setJobId(String jobId) {
 		this.jobId = jobId;
 	}
 
+	/**
+	 * Configuration, execution and input data relating to the execution of the application job. <br /> 
+	 * <em><strong>Note: </strong>The structure of the data is determined by the type of application 
+	 * <code>(eg: GRAM, EC2) being executed.</code></em> 
+	 */
 	public String getJobData() {
 		return jobData;
 	}
 
+	/**
+	 * Set the configuration, execution and input data relating to the execution of the application. 
+	 * job. <br /> 
+	 * <em><strong>Note: </strong>The structure of the data is up to the Provider implementation 
+	 * <code>(eg: GRAMProvider, EC2Provider)</code>. It is strongly encouraged to include in this 
+	 * field all the information (excluding descriptor data & any sensitive data such as password 
+	 * credentials) necessary for a 3rd party to repeat the execution of application job if 
+	 * necessary.</em> 
+	 */
 	public void setJobData(String jobData) {
 		this.jobData = jobData;
 	}
 
+	/**
+	 * When was this application job was submitted.
+	 */
 	public Date getSubmittedTime() {
 		return submittedTime;
 	}
@@ -133,6 +235,10 @@ public class ApplicationJob {
 		this.submittedTime = submittedTime;
 	}
 
+	/**
+	 * When was the status of this application job was last updated.
+	 * @return
+	 */
 	public Date getStatusUpdateTime() {
 		return statusUpdateTime;
 	}
@@ -141,6 +247,10 @@ public class ApplicationJob {
 		this.statusUpdateTime = statusUpdateTime;
 	}
 
+	/**
+	 * Get the currently recorded status of the application job. 
+	 * @return
+	 */
 	public ApplicationJobStatus getJobStatus() {
 		return jobStatus;
 	}
@@ -149,6 +259,11 @@ public class ApplicationJob {
 		this.jobStatus = jobStatus;
 	}
 
+	/**
+	 * Custom metadata maintained for the application job containing that may contain any additional 
+	 * information relating to the execution.
+	 * @return
+	 */
 	public String getMetadata() {
 		return metadata;
 	}