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/05/27 01:31:55 UTC

svn commit: r1486491 - in /airavata/trunk/modules: gfac-core/src/main/java/org/apache/airavata/gfac/external/ gfac-core/src/main/java/org/apache/airavata/gfac/phoebus/ gfac-core/src/main/java/org/apache/airavata/gfac/utils/ registry/airavata-jpa-regist...

Author: samindaw
Date: Sun May 26 23:31:55 2013
New Revision: 1486491

URL: http://svn.apache.org/r1486491
Log:
adding gfac job authoring impl + updating gridftp conf handler interface

Modified:
    airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/external/GridFtp.java
    airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/phoebus/PhoebusGridConfigurationHandler.java
    airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/utils/GridConfigurationHandler.java
    airavata/trunk/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/impl/AiravataJPARegistry.java
    airavata/trunk/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/NodeDataResource.java
    airavata/trunk/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/WorkerResource.java

Modified: airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/external/GridFtp.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/external/GridFtp.java?rev=1486491&r1=1486490&r2=1486491&view=diff
==============================================================================
--- airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/external/GridFtp.java (original)
+++ airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/external/GridFtp.java Sun May 26 23:31:55 2013
@@ -492,7 +492,7 @@ public class GridFtp {
 				srcClient.setDataChannelAuthentication(DataChannelAuthentication.SELF);
 				srcClient.setType(Session.TYPE_ASCII);
 				srcClient.changeDir(dirURI.getPath());
-				makelistDirExternalConfigurations(srcClient);
+				makelistDirExternalConfigurations(srcClient, srcClient.getCurrentDir());
 				
 				Vector<Object> fileInfo = null;
 				try {
@@ -605,11 +605,11 @@ public class GridFtp {
      * @param client
      * @param source
      */
-	private void makelistDirExternalConfigurations(GridFTPClient client) {
+	private void makelistDirExternalConfigurations(GridFTPClient client, String dirPath) {
 		GridConfigurationHandler[] handlers = GFacConfiguration.getGridConfigurationHandlers();
 		for(GridConfigurationHandler handler:handlers){
 			try {
-				handler.handleListDirFTPClientConfigurations(client);
+				handler.handleListDirFTPClientConfigurations(client, dirPath);
 			} catch (Exception e) {
 				//TODO Right now we are just catching & ignoring the exception. But later on we need
 				//to throw this exception to notify the user of configuration errors of their

Modified: airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/phoebus/PhoebusGridConfigurationHandler.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/phoebus/PhoebusGridConfigurationHandler.java?rev=1486491&r1=1486490&r2=1486491&view=diff
==============================================================================
--- airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/phoebus/PhoebusGridConfigurationHandler.java (original)
+++ airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/phoebus/PhoebusGridConfigurationHandler.java Sun May 26 23:31:55 2013
@@ -40,7 +40,7 @@ public class PhoebusGridConfigurationHan
     }
 
 	@Override
-	public void handleListDirFTPClientConfigurations(GridFTPClient client)
+	public void handleListDirFTPClientConfigurations(GridFTPClient client, String dirPath)
 			throws Exception {
     	//nothing to do
 	}

Modified: airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/utils/GridConfigurationHandler.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/utils/GridConfigurationHandler.java?rev=1486491&r1=1486490&r2=1486491&view=diff
==============================================================================
--- airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/utils/GridConfigurationHandler.java (original)
+++ airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/utils/GridConfigurationHandler.java Sun May 26 23:31:55 2013
@@ -50,8 +50,9 @@ public interface GridConfigurationHandle
 	/**
 	 * Do the configurations required for the GridFTPClient object which is going to list a directory
 	 * @param client
+	 * @param dirPath
 	 * @throws Exception
 	 */
-	public void handleListDirFTPClientConfigurations(GridFTPClient client) throws Exception;
+	public void handleListDirFTPClientConfigurations(GridFTPClient client, String dirPath) throws Exception;
 }
 

Modified: airavata/trunk/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/impl/AiravataJPARegistry.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/impl/AiravataJPARegistry.java?rev=1486491&r1=1486490&r2=1486491&view=diff
==============================================================================
--- airavata/trunk/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/impl/AiravataJPARegistry.java (original)
+++ airavata/trunk/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/impl/AiravataJPARegistry.java Sun May 26 23:31:55 2013
@@ -23,7 +23,13 @@ package org.apache.airavata.persistance.
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.sql.Timestamp;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 import java.util.regex.Pattern;
 
 import org.apache.airavata.common.exception.AiravataConfigurationException;
@@ -32,6 +38,7 @@ import org.apache.airavata.commons.gfac.
 import org.apache.airavata.commons.gfac.type.HostDescription;
 import org.apache.airavata.commons.gfac.type.ServiceDescription;
 import org.apache.airavata.persistance.registry.jpa.JPAResourceAccessor;
+import org.apache.airavata.persistance.registry.jpa.Resource;
 import org.apache.airavata.persistance.registry.jpa.ResourceUtils;
 import org.apache.airavata.persistance.registry.jpa.resources.ApplicationDescriptorResource;
 import org.apache.airavata.persistance.registry.jpa.resources.ConfigurationResource;
@@ -40,6 +47,7 @@ import org.apache.airavata.persistance.r
 import org.apache.airavata.persistance.registry.jpa.resources.ExperimentDataRetriever;
 import org.apache.airavata.persistance.registry.jpa.resources.ExperimentMetadataResource;
 import org.apache.airavata.persistance.registry.jpa.resources.ExperimentResource;
+import org.apache.airavata.persistance.registry.jpa.resources.GFacJobDataResource;
 import org.apache.airavata.persistance.registry.jpa.resources.GatewayResource;
 import org.apache.airavata.persistance.registry.jpa.resources.GramDataResource;
 import org.apache.airavata.persistance.registry.jpa.resources.HostDescriptorResource;
@@ -50,21 +58,69 @@ import org.apache.airavata.persistance.r
 import org.apache.airavata.persistance.registry.jpa.resources.UserWorkflowResource;
 import org.apache.airavata.persistance.registry.jpa.resources.WorkerResource;
 import org.apache.airavata.persistance.registry.jpa.resources.WorkflowDataResource;
-import org.apache.airavata.registry.api.*;
+import org.apache.airavata.registry.api.AiravataExperiment;
+import org.apache.airavata.registry.api.AiravataRegistry2;
+import org.apache.airavata.registry.api.AiravataRegistryFactory;
+import org.apache.airavata.registry.api.AiravataSubRegistry;
+import org.apache.airavata.registry.api.AiravataUser;
+import org.apache.airavata.registry.api.ConfigurationRegistry;
+import org.apache.airavata.registry.api.DescriptorRegistry;
+import org.apache.airavata.registry.api.ExecutionErrors;
 import org.apache.airavata.registry.api.ExecutionErrors.Source;
-import org.apache.airavata.registry.api.exception.*;
+import org.apache.airavata.registry.api.Gateway;
+import org.apache.airavata.registry.api.PasswordCallback;
+import org.apache.airavata.registry.api.ProjectsRegistry;
+import org.apache.airavata.registry.api.ProvenanceRegistry;
+import org.apache.airavata.registry.api.PublishedWorkflowRegistry;
+import org.apache.airavata.registry.api.ResourceMetadata;
+import org.apache.airavata.registry.api.UserWorkflowRegistry;
+import org.apache.airavata.registry.api.WorkspaceProject;
+import org.apache.airavata.registry.api.exception.RegistryAPIVersionIncompatibleException;
+import org.apache.airavata.registry.api.exception.RegistryAccessorInstantiateException;
+import org.apache.airavata.registry.api.exception.RegistryAccessorNotFoundException;
+import org.apache.airavata.registry.api.exception.RegistryAccessorUndefinedException;
+import org.apache.airavata.registry.api.exception.RegistryException;
+import org.apache.airavata.registry.api.exception.UnimplementedRegistryOperationException;
 import org.apache.airavata.registry.api.exception.gateway.DescriptorAlreadyExistsException;
 import org.apache.airavata.registry.api.exception.gateway.DescriptorDoesNotExistsException;
 import org.apache.airavata.registry.api.exception.gateway.InsufficientDataException;
 import org.apache.airavata.registry.api.exception.gateway.MalformedDescriptorException;
 import org.apache.airavata.registry.api.exception.gateway.PublishedWorkflowAlreadyExistsException;
 import org.apache.airavata.registry.api.exception.gateway.PublishedWorkflowDoesNotExistsException;
-import org.apache.airavata.registry.api.exception.worker.*;
+import org.apache.airavata.registry.api.exception.worker.ExperimentDoesNotExistsException;
+import org.apache.airavata.registry.api.exception.worker.ExperimentLazyLoadedException;
+import org.apache.airavata.registry.api.exception.worker.GFacJobAlreadyExistsException;
+import org.apache.airavata.registry.api.exception.worker.GFacJobDoesNotExistsException;
+import org.apache.airavata.registry.api.exception.worker.InvalidGFacJobIDException;
+import org.apache.airavata.registry.api.exception.worker.UserWorkflowAlreadyExistsException;
+import org.apache.airavata.registry.api.exception.worker.UserWorkflowDoesNotExistsException;
+import org.apache.airavata.registry.api.exception.worker.WorkflowInstanceAlreadyExistsException;
+import org.apache.airavata.registry.api.exception.worker.WorkflowInstanceDoesNotExistsException;
+import org.apache.airavata.registry.api.exception.worker.WorkflowInstanceNodeAlreadyExistsException;
+import org.apache.airavata.registry.api.exception.worker.WorkflowInstanceNodeDoesNotExistsException;
+import org.apache.airavata.registry.api.exception.worker.WorkspaceProjectAlreadyExistsException;
+import org.apache.airavata.registry.api.exception.worker.WorkspaceProjectDoesNotExistsException;
 import org.apache.airavata.registry.api.impl.WorkflowExecutionDataImpl;
 import org.apache.airavata.registry.api.util.RegistryConstants;
-import org.apache.airavata.registry.api.workflow.*;
+import org.apache.airavata.registry.api.workflow.ExecutionError;
+import org.apache.airavata.registry.api.workflow.ExperimentData;
+import org.apache.airavata.registry.api.workflow.ExperimentExecutionError;
+import org.apache.airavata.registry.api.workflow.GFacJob;
 import org.apache.airavata.registry.api.workflow.GFacJob.GFacJobStatus;
+import org.apache.airavata.registry.api.workflow.GFacJobExecutionError;
+import org.apache.airavata.registry.api.workflow.NodeExecutionData;
+import org.apache.airavata.registry.api.workflow.NodeExecutionError;
+import org.apache.airavata.registry.api.workflow.NodeExecutionStatus;
+import org.apache.airavata.registry.api.workflow.WorkflowExecution;
+import org.apache.airavata.registry.api.workflow.WorkflowExecutionData;
+import org.apache.airavata.registry.api.workflow.WorkflowExecutionError;
+import org.apache.airavata.registry.api.workflow.WorkflowExecutionStatus;
 import org.apache.airavata.registry.api.workflow.WorkflowExecutionStatus.State;
+import org.apache.airavata.registry.api.workflow.WorkflowIOData;
+import org.apache.airavata.registry.api.workflow.WorkflowInstanceNode;
+import org.apache.airavata.registry.api.workflow.WorkflowNodeGramData;
+import org.apache.airavata.registry.api.workflow.WorkflowNodeIOData;
+import org.apache.airavata.registry.api.workflow.WorkflowNodeType;
 import org.apache.xmlbeans.XmlException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -2192,76 +2248,154 @@ public class AiravataJPARegistry extends
 
 	@Override
 	public void addGFacJob(GFacJob job) throws RegistryException {
-		// TODO Auto-generated method stub
-		
+		if (provenanceRegistry != null){
+            provenanceRegistry.addGFacJob(job);
+        }
+		if (job.getJobId()==null || job.getJobId().equals("")){
+			throw new InvalidGFacJobIDException();
+		}
+		if (isGFacJobExists(job.getJobId())){
+			throw new GFacJobAlreadyExistsException(job.getJobId());
+		}
+		if (!isWorkflowInstanceNodePresent(job.getWorkflowExecutionId(), job.getNodeId())){
+			throw new WorkflowInstanceNodeDoesNotExistsException(job.getWorkflowExecutionId(), job.getNodeId());
+		}
+		ExperimentDataResource expData = jpa.getWorker().getExperiment(job.getExperimentId()).getData();
+		GFacJobDataResource gfacJob = expData.createGFacJob(job.getJobId());
+		gfacJob.setExperimentDataResource(expData);
+		gfacJob.setWorkflowDataResource(expData.getWorkflowInstance(job.getWorkflowExecutionId()));
+		gfacJob.setNodeID(job.getNodeId());
+		setupValues(job, gfacJob);
+		gfacJob.save();
+	}
+
+	private void setupValues(GFacJob job, GFacJobDataResource gfacJob) {
+		gfacJob.setApplicationDescID(job.getApplicationDescriptionId());
+		gfacJob.setCompletedTime(new Timestamp(job.getCompletedTime().getTime()));
+		gfacJob.setHostDescID(job.getHostDescriptionId());
+		gfacJob.setJobData(job.getJobData());
+		gfacJob.setMetadata(job.getMetadata());
+		gfacJob.setServiceDescID(job.getServiceDescriptionId());
+		gfacJob.setStatus(job.getJobStatus().toString());
+		gfacJob.setSubmittedTime(new Timestamp(job.getSubmittedTime().getTime()));
 	}
 
 	@Override
 	public void updateGFacJob(GFacJob job) throws RegistryException {
-		// TODO Auto-generated method stub
-		
+		GFacJobDataResource gFacJob = validateAndGetGFacJob(job.getJobId());
+		setupValues(job, gFacJob);
+		gFacJob.save();
+	}
+
+	private GFacJobDataResource validateAndGetGFacJob(String jobId)
+			throws InvalidGFacJobIDException, RegistryException,
+			GFacJobDoesNotExistsException {
+		if (jobId==null || jobId.equals("")){
+			throw new InvalidGFacJobIDException();
+		}
+		if (!isGFacJobExists(jobId)){
+			throw new GFacJobDoesNotExistsException(jobId);
+		}
+		GFacJobDataResource gFacJob = jpa.getWorker().getGFacJob(jobId);
+		return gFacJob;
 	}
 
 	@Override
 	public void updateGFacJobStatus(String gfacJobId, GFacJobStatus status)
 			throws RegistryException {
-		// TODO Auto-generated method stub
-		
+		GFacJobDataResource gFacJob = validateAndGetGFacJob(gfacJobId);
+		gFacJob.setStatus(status.toString());
+		gFacJob.save();
 	}
 
 	@Override
 	public void updateGFacJobData(String gfacJobId, String jobdata)
 			throws RegistryException {
-		// TODO Auto-generated method stub
-		
+		GFacJobDataResource gFacJob = validateAndGetGFacJob(gfacJobId);
+		gFacJob.setJobData(jobdata);
+		gFacJob.save();
 	}
 
 	@Override
 	public void updateGFacJobSubmittedTime(String gfacJobId, Date submitted)
 			throws RegistryException {
-		// TODO Auto-generated method stub
-		
+		GFacJobDataResource gFacJob = validateAndGetGFacJob(gfacJobId);
+		gFacJob.setSubmittedTime(new Timestamp(submitted.getTime()));
+		gFacJob.save();
 	}
 
 	@Override
 	public void updateGFacJobCompletedTime(String gfacJobId, Date completed)
 			throws RegistryException {
-		// TODO Auto-generated method stub
-		
+		GFacJobDataResource gFacJob = validateAndGetGFacJob(gfacJobId);
+		gFacJob.setCompletedTime(new Timestamp(completed.getTime()));
+		gFacJob.save();
 	}
 
 	@Override
 	public void updateGFacJobMetadata(String gfacJobId, String metadata)
 			throws RegistryException {
-		// TODO Auto-generated method stub
-		
+		GFacJobDataResource gFacJob = validateAndGetGFacJob(gfacJobId);
+		gFacJob.setMetadata(metadata);
+		gFacJob.save();
 	}
 
 	@Override
 	public GFacJob getGFacJob(String gfacJobId) throws RegistryException {
-		// TODO Auto-generated method stub
-		return null;
+		GFacJobDataResource gfacJob = validateAndGetGFacJob(gfacJobId);
+		GFacJob job = new GFacJob();
+		setupValues(gfacJob, job);
+		return job;
+	}
+
+	private void setupValues(GFacJobDataResource gfacJob, GFacJob job) {
+		job.setApplicationDescriptionId(gfacJob.getApplicationDescID());
+		job.setCompletedTime(gfacJob.getCompletedTime());
+		job.setExperimentId(gfacJob.getExperimentDataResource().getExperimentID());
+		job.setHostDescriptionId(gfacJob.getHostDescID());
+		job.setJobData(gfacJob.getJobData());
+		job.setJobId(gfacJob.getLocalJobID());
+		job.setJobStatus(GFacJobStatus.valueOf(gfacJob.getStatus()));
+		job.setMetadata(gfacJob.getMetadata());
+		job.setNodeId(gfacJob.getNodeID());
+		job.setServiceDescriptionId(gfacJob.getServiceDescID());
+		job.setSubmittedTime(gfacJob.getSubmittedTime());
+		job.setWorkflowExecutionId(gfacJob.getWorkflowDataResource().getWorkflowInstanceID());
 	}
 
 	@Override
 	public List<GFacJob> getGFacJobsForDescriptors(String serviceDescriptionId,
 			String hostDescriptionId, String applicationDescriptionId)
 			throws RegistryException {
-		// TODO Auto-generated method stub
-		return null;
+		List<GFacJob> jobs=new ArrayList<GFacJob>();
+		List<GFacJobDataResource> gFacJobs = jpa.getWorker().getGFacJobs(serviceDescriptionId,hostDescriptionId,applicationDescriptionId);
+		for (GFacJobDataResource resource : gFacJobs) {
+			GFacJob job = new GFacJob();
+			setupValues(resource, job);
+			jobs.add(job);
+		}
+		return jobs;
 	}
 
 	@Override
 	public List<GFacJob> getGFacJobs(String experimentId,
 			String workflowExecutionId, String nodeId) throws RegistryException {
-		// TODO Auto-generated method stub
-		return null;
+		if (!isWorkflowInstanceNodePresent(workflowExecutionId, nodeId)){
+			throw new WorkflowInstanceNodeDoesNotExistsException(workflowExecutionId, nodeId);
+		}
+		List<GFacJob> jobs=new ArrayList<GFacJob>();
+		List<Resource> gFacJobs = jpa.getWorker().getExperiment(experimentId).getData().getWorkflowInstance(workflowExecutionId).getNodeData(nodeId).getGFacJobs();
+		for (Resource resource : gFacJobs) {
+			GFacJob job = new GFacJob();
+			setupValues((GFacJobDataResource)resource, job);
+			jobs.add(job);
+		}
+		return jobs;
 	}
 
 	@Override
 	public boolean isGFacJobExists(String gfacJobId) throws RegistryException {
-		// TODO Auto-generated method stub
-		return false;
+		return jpa.getWorker().isGFacJobExists(gfacJobId);
 	}
 
 }

Modified: airavata/trunk/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/NodeDataResource.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/NodeDataResource.java?rev=1486491&r1=1486490&r2=1486491&view=diff
==============================================================================
--- airavata/trunk/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/NodeDataResource.java (original)
+++ airavata/trunk/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/NodeDataResource.java Sun May 26 23:31:55 2013
@@ -168,6 +168,9 @@ public class NodeDataResource extends Ab
         }
     }
 
+    public List<Resource> getGFacJobs(){
+    	return get(ResourceType.GFAC_JOB_DATA);
+    }
     public List<Resource> get(ResourceType type) {
         List<Resource> resourceList = new ArrayList<Resource>();
         EntityManager em = ResourceUtils.getEntityManager();
@@ -191,6 +194,8 @@ public class NodeDataResource extends Ab
                 break;
             case GFAC_JOB_DATA:
                 generator = new QueryGenerator(GFAC_JOB_DATA);
+                generator.setParameter(GFacJobDataConstants.EXPERIMENT_ID, workflowDataResource.getExperimentID());
+                generator.setParameter(GFacJobDataConstants.WORKFLOW_INSTANCE_ID, workflowDataResource.getWorkflowInstanceID());
                 generator.setParameter(GFacJobDataConstants.NODE_ID, nodeID);
                 q = generator.selectQuery(em);
                 results = q.getResultList();

Modified: airavata/trunk/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/WorkerResource.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/WorkerResource.java?rev=1486491&r1=1486490&r2=1486491&view=diff
==============================================================================
--- airavata/trunk/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/WorkerResource.java (original)
+++ airavata/trunk/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/WorkerResource.java Sun May 26 23:31:55 2013
@@ -198,6 +198,26 @@ public class WorkerResource extends Abst
         em.close();
 		return result;
 	}
+	
+	public List<GFacJobDataResource> getGFacJobs(String serviceDescriptionId, String hostDescriptionId, String applicationDescriptionId){
+		List<GFacJobDataResource> result = new ArrayList<GFacJobDataResource>();
+        EntityManager em = ResourceUtils.getEntityManager();
+        em.getTransaction().begin();
+        QueryGenerator generator;
+        Query q;
+        generator = new QueryGenerator(GFAC_JOB_DATA);
+        generator.setParameter(GFacJobDataConstants.SERVICE_DESC_ID, serviceDescriptionId);
+        generator.setParameter(GFacJobDataConstants.HOST_DESC_ID, hostDescriptionId);
+        generator.setParameter(GFacJobDataConstants.APP_DESC_ID, applicationDescriptionId);
+        q = generator.selectQuery(em);
+        for (Object o : q.getResultList()) {
+            GFac_Job_Data gFacJobData = (GFac_Job_Data)o;
+            result.add((GFacJobDataResource)Utils.getResource(ResourceType.GFAC_JOB_DATA, gFacJobData));
+        }
+        em.getTransaction().commit();
+        em.close();
+		return result;
+	}
 
     /**
      *
@@ -424,6 +444,15 @@ public class WorkerResource extends Abst
 	public boolean isExperimentExists(String name){
 		return isExists(ResourceType.EXPERIMENT, name);
 	}
+	
+	/**
+	 * Returns of the gfac job record is present for the job id
+	 * @param jobId
+	 * @return
+	 */
+	public boolean isGFacJobExists(String jobId){
+		return isExists(ResourceType.GFAC_JOB_DATA, jobId);
+	}
 
     /**
      *
@@ -433,6 +462,10 @@ public class WorkerResource extends Abst
     public ExperimentResource getExperiment(String name){
 		return (ExperimentResource)get(ResourceType.EXPERIMENT, name);
 	}
+    
+    public GFacJobDataResource getGFacJob(String jobId){
+    	return (GFacJobDataResource)get(ResourceType.GFAC_JOB_DATA,jobId);
+    }
 
     /**
      *