You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by ch...@apache.org on 2015/06/02 04:07:12 UTC

[1/4] airavata git commit: some improvements to experiment-catalog

Repository: airavata
Updated Branches:
  refs/heads/master b67b53216 -> 4476dfc1e


http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/registry/airavata-jpa-registry/src/test/java/org/apache/airavata/persistance/registry/jpa/ComputationalSchedulingTest.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/test/java/org/apache/airavata/persistance/registry/jpa/ComputationalSchedulingTest.java b/modules/registry/airavata-jpa-registry/src/test/java/org/apache/airavata/persistance/registry/jpa/ComputationalSchedulingTest.java
index 0240daf..645b192 100644
--- a/modules/registry/airavata-jpa-registry/src/test/java/org/apache/airavata/persistance/registry/jpa/ComputationalSchedulingTest.java
+++ b/modules/registry/airavata-jpa-registry/src/test/java/org/apache/airavata/persistance/registry/jpa/ComputationalSchedulingTest.java
@@ -46,7 +46,7 @@ public class ComputationalSchedulingTest extends AbstractResourceTest {
         experimentResource = (ExperimentResource) getGatewayResource().create(ResourceType.EXPERIMENT);
         experimentResource.setExpID(experimentID);
         experimentResource.setExecutionUser(getWorkerResource().getUser());
-        experimentResource.setProject(getProjectResource());
+        experimentResource.setProjectId(getProjectResource().getId());
         Timestamp currentDate = new Timestamp(new Date().getTime());
         experimentResource.setCreationTime(currentDate);
         experimentResource.setApplicationId("testApplication");

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/registry/airavata-jpa-registry/src/test/java/org/apache/airavata/persistance/registry/jpa/ExperimentInputResourceTest.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/test/java/org/apache/airavata/persistance/registry/jpa/ExperimentInputResourceTest.java b/modules/registry/airavata-jpa-registry/src/test/java/org/apache/airavata/persistance/registry/jpa/ExperimentInputResourceTest.java
index a46e196..9e8d926 100644
--- a/modules/registry/airavata-jpa-registry/src/test/java/org/apache/airavata/persistance/registry/jpa/ExperimentInputResourceTest.java
+++ b/modules/registry/airavata-jpa-registry/src/test/java/org/apache/airavata/persistance/registry/jpa/ExperimentInputResourceTest.java
@@ -41,7 +41,7 @@ public class ExperimentInputResourceTest extends AbstractResourceTest  {
         experimentResource = (ExperimentResource) getGatewayResource().create(ResourceType.EXPERIMENT);
         experimentResource.setExpID(experimentID);
         experimentResource.setExecutionUser(getWorkerResource().getUser());
-        experimentResource.setProject(getProjectResource());
+        experimentResource.setProjectId(getProjectResource().getId());
         experimentResource.setCreationTime(getCurrentTimestamp());
         experimentResource.setApplicationId("testApplication");
         experimentResource.setApplicationVersion("1.0");
@@ -50,7 +50,7 @@ public class ExperimentInputResourceTest extends AbstractResourceTest  {
         experimentResource.save();
 
         experimentInputResource = (ExperimentInputResource)experimentResource.create(ResourceType.EXPERIMENT_INPUT);
-        experimentInputResource.setExperimentResource(experimentResource);
+        experimentInputResource.setExperimentId(experimentID);
         experimentInputResource.setExperimentKey("testKey");
         experimentInputResource.setValue("testValue");
         experimentInputResource.setDataType("string");

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/registry/airavata-jpa-registry/src/test/java/org/apache/airavata/persistance/registry/jpa/ExperimentOutputResourceTest.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/test/java/org/apache/airavata/persistance/registry/jpa/ExperimentOutputResourceTest.java b/modules/registry/airavata-jpa-registry/src/test/java/org/apache/airavata/persistance/registry/jpa/ExperimentOutputResourceTest.java
index 696db36..bfd3d57 100644
--- a/modules/registry/airavata-jpa-registry/src/test/java/org/apache/airavata/persistance/registry/jpa/ExperimentOutputResourceTest.java
+++ b/modules/registry/airavata-jpa-registry/src/test/java/org/apache/airavata/persistance/registry/jpa/ExperimentOutputResourceTest.java
@@ -42,7 +42,7 @@ public class ExperimentOutputResourceTest extends AbstractResourceTest  {
         experimentResource = (ExperimentResource) getGatewayResource().create(ResourceType.EXPERIMENT);
         experimentResource.setExpID(experimentID);
         experimentResource.setExecutionUser(getWorkerResource().getUser());
-        experimentResource.setProject(getProjectResource());
+        experimentResource.setProjectId(getProjectResource().getId());
         experimentResource.setCreationTime(getCurrentTimestamp());
         experimentResource.setApplicationId("testApplication");
         experimentResource.setApplicationVersion("1.0");
@@ -51,7 +51,7 @@ public class ExperimentOutputResourceTest extends AbstractResourceTest  {
         experimentResource.save();
 
         outputResource = (ExperimentOutputResource)experimentResource.create(ResourceType.EXPERIMENT_OUTPUT);
-        outputResource.setExperimentResource(experimentResource);
+        outputResource.setExperimentId(experimentResource.getExpID());
         outputResource.setExperimentKey("testKey");
         outputResource.setValue("testValue");
         outputResource.setDataType("string");

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/registry/airavata-jpa-registry/src/test/java/org/apache/airavata/persistance/registry/jpa/ExperimentResourceTest.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/test/java/org/apache/airavata/persistance/registry/jpa/ExperimentResourceTest.java b/modules/registry/airavata-jpa-registry/src/test/java/org/apache/airavata/persistance/registry/jpa/ExperimentResourceTest.java
index eb620e9..477db6b 100644
--- a/modules/registry/airavata-jpa-registry/src/test/java/org/apache/airavata/persistance/registry/jpa/ExperimentResourceTest.java
+++ b/modules/registry/airavata-jpa-registry/src/test/java/org/apache/airavata/persistance/registry/jpa/ExperimentResourceTest.java
@@ -41,7 +41,7 @@ public class ExperimentResourceTest extends AbstractResourceTest {
         experimentResource = (ExperimentResource) getGatewayResource().create(ResourceType.EXPERIMENT);
         experimentResource.setExpID(experimentID);
         experimentResource.setExecutionUser(getWorkerResource().getUser());
-        experimentResource.setProject(getProjectResource());
+        experimentResource.setProjectId(getProjectResource().getId());
         Timestamp currentDate = new Timestamp(new Date().getTime());
         experimentResource.setCreationTime(currentDate);
         experimentResource.setApplicationId("testApplication");

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/registry/airavata-jpa-registry/src/test/java/org/apache/airavata/persistance/registry/jpa/GatewayResourceTest.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/test/java/org/apache/airavata/persistance/registry/jpa/GatewayResourceTest.java b/modules/registry/airavata-jpa-registry/src/test/java/org/apache/airavata/persistance/registry/jpa/GatewayResourceTest.java
index 022b197..1c65a62 100644
--- a/modules/registry/airavata-jpa-registry/src/test/java/org/apache/airavata/persistance/registry/jpa/GatewayResourceTest.java
+++ b/modules/registry/airavata-jpa-registry/src/test/java/org/apache/airavata/persistance/registry/jpa/GatewayResourceTest.java
@@ -61,7 +61,7 @@ public class GatewayResourceTest extends AbstractResourceTest {
 
         experimentResource.setExpID("testExpID");
         experimentResource.setExecutionUser(getWorkerResource().getUser());
-        experimentResource.setProject(getProjectResource());
+        experimentResource.setProjectId(getProjectResource().getId());
         experimentResource.setCreationTime(currentDate);
         experimentResource.setApplicationId("testApplication");
         experimentResource.setApplicationVersion("1.0");

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/registry/airavata-jpa-registry/src/test/java/org/apache/airavata/persistance/registry/jpa/TaskDetailResourceTest.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/test/java/org/apache/airavata/persistance/registry/jpa/TaskDetailResourceTest.java b/modules/registry/airavata-jpa-registry/src/test/java/org/apache/airavata/persistance/registry/jpa/TaskDetailResourceTest.java
index 43c060c..f971838 100644
--- a/modules/registry/airavata-jpa-registry/src/test/java/org/apache/airavata/persistance/registry/jpa/TaskDetailResourceTest.java
+++ b/modules/registry/airavata-jpa-registry/src/test/java/org/apache/airavata/persistance/registry/jpa/TaskDetailResourceTest.java
@@ -49,19 +49,19 @@ public class TaskDetailResourceTest extends AbstractResourceTest{
 	    experimentResource = (ExperimentResource) getGatewayResource().create(ResourceType.EXPERIMENT);
         experimentResource.setExpID(experimentID);
         experimentResource.setExecutionUser(getWorkerResource().getUser());
-        experimentResource.setProject(getProjectResource());
+        experimentResource.setProjectId(getProjectResource().getId());
         experimentResource.setCreationTime(creationTime);
         experimentResource.save();
         
         nodeDetailResource = (WorkflowNodeDetailResource) experimentResource.create(ResourceType.WORKFLOW_NODE_DETAIL);
-        nodeDetailResource.setExperimentResource(experimentResource);
+        nodeDetailResource.setExperimentId(experimentResource.getExpID());
         nodeDetailResource.setNodeInstanceId(nodeID);
         nodeDetailResource.setNodeName(nodeID);
         nodeDetailResource.setCreationTime(creationTime);
         nodeDetailResource.save();
         
         taskDetailResource = (TaskDetailResource)nodeDetailResource.create(ResourceType.TASK_DETAIL);
-        taskDetailResource.setWorkflowNodeDetailResource(nodeDetailResource);
+        taskDetailResource.setNodeId(nodeDetailResource.getNodeInstanceId());
         taskDetailResource.setTaskId(taskID);
         taskDetailResource.setApplicationId(applicationID);
         taskDetailResource.setApplicationVersion("1.0");

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/registry/airavata-jpa-registry/src/test/java/org/apache/airavata/persistance/registry/jpa/WorkflowNodeDetailResourceTest.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/test/java/org/apache/airavata/persistance/registry/jpa/WorkflowNodeDetailResourceTest.java b/modules/registry/airavata-jpa-registry/src/test/java/org/apache/airavata/persistance/registry/jpa/WorkflowNodeDetailResourceTest.java
index aa3dde6..19590e6 100644
--- a/modules/registry/airavata-jpa-registry/src/test/java/org/apache/airavata/persistance/registry/jpa/WorkflowNodeDetailResourceTest.java
+++ b/modules/registry/airavata-jpa-registry/src/test/java/org/apache/airavata/persistance/registry/jpa/WorkflowNodeDetailResourceTest.java
@@ -47,13 +47,13 @@ public class WorkflowNodeDetailResourceTest extends AbstractResourceTest {
 		experimentResource = (ExperimentResource) getGatewayResource().create(ResourceType.EXPERIMENT);
 		experimentResource.setExpID(experimentID);
 		experimentResource.setExecutionUser(getWorkerResource().getUser());
-		experimentResource.setProject(getProjectResource());
+		experimentResource.setProjectId(getProjectResource().getId());
 		experimentResource.setCreationTime(creationTime);
 		experimentResource.setApplicationId(applicationID);
 		experimentResource.save();
 
 		nodeDetailResource = (WorkflowNodeDetailResource) experimentResource.create(ResourceType.WORKFLOW_NODE_DETAIL);
-		nodeDetailResource.setExperimentResource(experimentResource);
+		nodeDetailResource.setExperimentId(experimentResource.getExpID());
 		nodeDetailResource.setNodeInstanceId(nodeID);
 		nodeDetailResource.setNodeName(nodeID);
 		nodeDetailResource.setCreationTime(creationTime);

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/registry/airavata-jpa-registry/src/test/java/org/apache/airavata/persistance/registry/jpa/util/Initialize.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/test/java/org/apache/airavata/persistance/registry/jpa/util/Initialize.java b/modules/registry/airavata-jpa-registry/src/test/java/org/apache/airavata/persistance/registry/jpa/util/Initialize.java
index 6bb5a5e..6ebf1d9 100644
--- a/modules/registry/airavata-jpa-registry/src/test/java/org/apache/airavata/persistance/registry/jpa/util/Initialize.java
+++ b/modules/registry/airavata-jpa-registry/src/test/java/org/apache/airavata/persistance/registry/jpa/util/Initialize.java
@@ -156,7 +156,7 @@ public class Initialize {
             workerResource.save();
             
             ProjectResource projectResource = (ProjectResource)workerResource.create(ResourceType.PROJECT);
-            projectResource.setGateway(gatewayResource);
+            projectResource.setGatewayId(gatewayResource.getGatewayId());
             projectResource.setId("default");
             projectResource.setName("default");
             projectResource.setWorker(workerResource);


[3/4] airavata git commit: some improvements to experiment-catalog

Posted by ch...@apache.org.
http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/Experiment.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/Experiment.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/Experiment.java
index 35416b5..5b94e82 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/Experiment.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/Experiment.java
@@ -22,11 +22,13 @@
 package org.apache.airavata.persistance.registry.jpa.model;
 
 import org.apache.openjpa.persistence.DataCache;
+import org.apache.openjpa.persistence.jdbc.ElementJoinColumn;
 
 import javax.persistence.*;
 import java.io.Serializable;
 import java.sql.Timestamp;
 import java.util.Collection;
+import java.util.List;
 
 @Entity
 @Table(name = "EXPERIMENT")
@@ -74,8 +76,32 @@ public class Experiment implements Serializable {
     @JoinColumn(name = "EXECUTION_USER", referencedColumnName = "USER_NAME")
     private Users user;
 
-    @OneToMany(fetch=FetchType.LAZY, mappedBy = "experiment")
-    private Collection<ErrorDetail> errorDetails;
+    @OneToMany (fetch = FetchType.LAZY, mappedBy = "experiment")
+    private List<Experiment_Output> experimentOutputs;
+
+    @OneToMany (fetch = FetchType.LAZY, mappedBy = "experiment")
+    private List<Experiment_Input> experimentInputs;
+
+    @OneToOne (fetch = FetchType.LAZY, mappedBy = "experiment")
+    private Computational_Resource_Scheduling resourceScheduling;
+
+    @OneToOne (fetch = FetchType.LAZY, mappedBy = "experiment")
+    private ExperimentConfigData userConfigurationData;
+
+    @OneToMany (fetch = FetchType.LAZY, mappedBy = "experiment")
+    private List<WorkflowNodeDetail> workflowNodeDetails;
+
+    @OneToMany (fetch = FetchType.LAZY, mappedBy = "experiment")
+    private List<Status> stateChangeList;
+
+    @OneToMany (fetch = FetchType.LAZY, mappedBy = "experiment")
+    private List<ErrorDetail> errorDetails;
+
+    @OneToOne (fetch = FetchType.LAZY, mappedBy = "experiment")
+    private Status experimentStatus;
+
+    @OneToMany (fetch = FetchType.LAZY, mappedBy = "experiment")
+    private List<Notification_Email> notificationEmails;
 
     @OneToMany(fetch=FetchType.LAZY, mappedBy = "experiment")
     private Collection<Status> statuses;
@@ -104,14 +130,6 @@ public class Experiment implements Serializable {
         this.executionUser = executionUser;
     }
 
-    public String getProjectId() {
-        return projectID;
-    }
-
-    public void setProjectId(String projectId) {
-        this.projectID = projectId;
-    }
-
     public Timestamp getCreationTime() {
         return creationTime;
     }
@@ -176,40 +194,96 @@ public class Experiment implements Serializable {
         this.workflowExecutionId = workflowExecutionId;
     }
 
-    public Gateway getGateway() {
-        return gateway;
+    public boolean isAllowNotification() {
+        return allowNotification;
+    }
+
+    public void setAllowNotification(boolean allowNotification) {
+        this.allowNotification = allowNotification;
     }
 
-    public void setGateway(Gateway gateway) {
-        this.gateway = gateway;
+    public String getGatewayExecutionId() {
+        return gatewayExecutionId;
     }
 
-    public Project getProject() {
-        return project;
+    public String getProjectID() {
+        return projectID;
     }
 
-    public void setProject(Project project) {
-        this.project = project;
+    public void setProjectID(String projectID) {
+        this.projectID = projectID;
     }
 
-    public Users getUser() {
-        return user;
+    public List<Experiment_Output> getExperimentOutputs() {
+        return experimentOutputs;
     }
 
-    public void setUser(Users user) {
-        this.user = user;
+    public void setExperimentOutputs(List<Experiment_Output> experimentOutputs) {
+        this.experimentOutputs = experimentOutputs;
     }
 
-    public boolean isAllowNotification() {
-        return allowNotification;
+    public List<Experiment_Input> getExperimentInputs() {
+        return experimentInputs;
     }
 
-    public void setAllowNotification(boolean allowNotification) {
-        this.allowNotification = allowNotification;
+    public void setExperimentInputs(List<Experiment_Input> experimentInputs) {
+        this.experimentInputs = experimentInputs;
     }
 
-    public String getGatewayExecutionId() {
-        return gatewayExecutionId;
+    public Computational_Resource_Scheduling getResourceScheduling() {
+        return resourceScheduling;
+    }
+
+    public void setResourceScheduling(Computational_Resource_Scheduling resourceScheduling) {
+        this.resourceScheduling = resourceScheduling;
+    }
+
+    public List<ErrorDetail> getErrorDetails() {
+        return errorDetails;
+    }
+
+    public ExperimentConfigData getUserConfigurationData() {
+        return userConfigurationData;
+    }
+
+    public void setUserConfigurationData(ExperimentConfigData userConfigurationData) {
+        this.userConfigurationData = userConfigurationData;
+    }
+
+    public List<WorkflowNodeDetail> getWorkflowNodeDetails() {
+        return workflowNodeDetails;
+    }
+
+    public void setWorkflowNodeDetails(List<WorkflowNodeDetail> workflowNodeDetails) {
+        this.workflowNodeDetails = workflowNodeDetails;
+    }
+
+    public List<Status> getStateChangeList() {
+        return stateChangeList;
+    }
+
+    public void setStateChangeList(List<Status> stateChangeList) {
+        this.stateChangeList = stateChangeList;
+    }
+
+    public void setErrorDetails(List<ErrorDetail> errorDetails) {
+        this.errorDetails = errorDetails;
+    }
+
+    public Status getExperimentStatus() {
+        return experimentStatus;
+    }
+
+    public void setExperimentStatus(Status experimentStatus) {
+        this.experimentStatus = experimentStatus;
+    }
+
+    public List<Notification_Email> getNotificationEmails() {
+        return notificationEmails;
+    }
+
+    public void setNotificationEmails(List<Notification_Email> notificationEmails) {
+        this.notificationEmails = notificationEmails;
     }
 
     public void setGatewayExecutionId(String gatewayExecutionId) {
@@ -223,12 +297,4 @@ public class Experiment implements Serializable {
     public void setStatuses(Collection<Status> statuses) {
         this.statuses = statuses;
     }
-
-    public Collection<ErrorDetail> getErrorDetails() {
-        return errorDetails;
-    }
-
-    public void setErrorDetails(Collection<ErrorDetail> errorDetails) {
-        this.errorDetails = errorDetails;
-    }
 }

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/ExperimentConfigData.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/ExperimentConfigData.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/ExperimentConfigData.java
index 63e91ad..a7c6e32 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/ExperimentConfigData.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/ExperimentConfigData.java
@@ -22,6 +22,7 @@
 package org.apache.airavata.persistance.registry.jpa.model;
 
 import org.apache.openjpa.persistence.DataCache;
+import org.apache.openjpa.persistence.jdbc.ElementJoinColumn;
 
 import javax.persistence.*;
 import java.io.Serializable;
@@ -48,6 +49,18 @@ public class ExperimentConfigData implements Serializable {
     @JoinColumn(name = "EXPERIMENT_ID")
     private Experiment experiment;
 
+    @OneToOne (fetch = FetchType.LAZY, mappedBy = "experiment")
+    private Computational_Resource_Scheduling resourceScheduling;
+
+    @OneToOne (fetch = FetchType.LAZY, mappedBy = "experiment")
+    private AdvancedInputDataHandling inputDataHandling;
+
+    @OneToOne (fetch = FetchType.LAZY, mappedBy = "experiment")
+    private AdvancedOutputDataHandling outputDataHandling;
+
+    @OneToOne (fetch = FetchType.LAZY, mappedBy = "experiment")
+    private QosParam qosParam;
+
     public String getExpId() {
         return expId;
     }
@@ -80,14 +93,6 @@ public class ExperimentConfigData implements Serializable {
         this.shareExp = shareExp;
     }
 
-    public Experiment getExperiment() {
-        return experiment;
-    }
-
-    public void setExperiment(Experiment experiment) {
-        this.experiment = experiment;
-    }
-
     public String getUserDn() {
         return userDn;
     }
@@ -103,4 +108,36 @@ public class ExperimentConfigData implements Serializable {
     public void setGenerateCert(boolean generateCert) {
         this.generateCert = generateCert;
     }
+
+    public AdvancedInputDataHandling getInputDataHandling() {
+        return inputDataHandling;
+    }
+
+    public void setInputDataHandling(AdvancedInputDataHandling inputDataHandling) {
+        this.inputDataHandling = inputDataHandling;
+    }
+
+    public AdvancedOutputDataHandling getOutputDataHandling() {
+        return outputDataHandling;
+    }
+
+    public void setOutputDataHandling(AdvancedOutputDataHandling outputDataHandling) {
+        this.outputDataHandling = outputDataHandling;
+    }
+
+    public QosParam getQosParam() {
+        return qosParam;
+    }
+
+    public void setQosParam(QosParam qosParam) {
+        this.qosParam = qosParam;
+    }
+
+    public Computational_Resource_Scheduling getResourceScheduling() {
+        return resourceScheduling;
+    }
+
+    public void setResourceScheduling(Computational_Resource_Scheduling resourceScheduling) {
+        this.resourceScheduling = resourceScheduling;
+    }
 }

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/Experiment_Input.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/Experiment_Input.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/Experiment_Input.java
index e8c5087..6a063f4 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/Experiment_Input.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/Experiment_Input.java
@@ -120,14 +120,6 @@ public class Experiment_Input implements Serializable {
         this.metadata = metadata;
     }
 
-    public Experiment getExperiment() {
-        return experiment;
-    }
-
-    public void setExperiment(Experiment experiment) {
-        this.experiment = experiment;
-    }
-
     public String getAppArgument() {
         return appArgument;
     }

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/Experiment_Output.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/Experiment_Output.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/Experiment_Output.java
index ece544e..689749b 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/Experiment_Output.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/Experiment_Output.java
@@ -93,14 +93,6 @@ public class Experiment_Output  implements Serializable {
         this.dataType = dataType;
     }
 
-    public Experiment getExperiment() {
-        return experiment;
-    }
-
-    public void setExperiment(Experiment experiment) {
-        this.experiment = experiment;
-    }
-
     public boolean isRequired() {
         return isRequired;
     }

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/JobDetail.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/JobDetail.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/JobDetail.java
index 36f12f8..bac9308 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/JobDetail.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/JobDetail.java
@@ -22,10 +22,12 @@
 package org.apache.airavata.persistance.registry.jpa.model;
 
 import org.apache.openjpa.persistence.DataCache;
+import org.apache.openjpa.persistence.jdbc.ElementJoinColumn;
 
 import javax.persistence.*;
 import java.io.Serializable;
 import java.sql.Timestamp;
+import java.util.List;
 
 @DataCache
 @Entity
@@ -54,6 +56,20 @@ public class JobDetail implements Serializable {
     @JoinColumn(name = "TASK_ID")
     private TaskDetail task;
 
+    @OneToOne (fetch = FetchType.LAZY, mappedBy = "jobDetail")
+    private Status jobStatus;
+
+    @OneToMany (fetch = FetchType.LAZY,  mappedBy = "jobDetail")
+    private List<ErrorDetail> errorDetails;
+
+    public List<ErrorDetail> getErrorDetails() {
+        return errorDetails;
+    }
+
+    public void setErrorDetails(List<ErrorDetail> errorDetails) {
+        this.errorDetails = errorDetails;
+    }
+
     public String getJobId() {
         return jobId;
     }
@@ -86,14 +102,6 @@ public class JobDetail implements Serializable {
         this.creationTime = creationTime;
     }
 
-    public TaskDetail getTask() {
-        return task;
-    }
-
-    public void setTask(TaskDetail task) {
-        this.task = task;
-    }
-
     public String getComputeResourceConsumed() {
         return computeResourceConsumed;
     }
@@ -117,4 +125,12 @@ public class JobDetail implements Serializable {
     public void setWorkingDir(String workingDir) {
         this.workingDir = workingDir;
     }
+
+    public Status getJobStatus() {
+        return jobStatus;
+    }
+
+    public void setJobStatus(Status jobStatus) {
+        this.jobStatus = jobStatus;
+    }
 }

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/NodeInput.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/NodeInput.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/NodeInput.java
index 7e48cbf..9957369 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/NodeInput.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/NodeInput.java
@@ -63,7 +63,7 @@ public class NodeInput implements Serializable {
 
     @ManyToOne(cascade= CascadeType.MERGE)
     @JoinColumn(name = "NODE_INSTANCE_ID")
-    private WorkflowNodeDetail nodeDetails;
+    private WorkflowNodeDetail nodeDetail;
 
     public String getInputKey() {
         return inputKey;
@@ -105,14 +105,6 @@ public class NodeInput implements Serializable {
         this.nodeId = nodeId;
     }
 
-    public WorkflowNodeDetail getNodeDetails() {
-        return nodeDetails;
-    }
-
-    public void setNodeDetails(WorkflowNodeDetail nodeDetails) {
-        this.nodeDetails = nodeDetails;
-    }
-
     public String getAppArgument() {
         return appArgument;
     }

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/NodeOutput.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/NodeOutput.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/NodeOutput.java
index 9281ee8..9753901 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/NodeOutput.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/NodeOutput.java
@@ -56,7 +56,7 @@ public class NodeOutput implements Serializable {
 
     @ManyToOne(cascade= CascadeType.MERGE)
     @JoinColumn(name = "NODE_INSTANCE_ID")
-    private WorkflowNodeDetail node;
+    private WorkflowNodeDetail nodeDetail;
 
     public String getNodeId() {
         return nodeId;
@@ -74,14 +74,6 @@ public class NodeOutput implements Serializable {
         this.value = value;
     }
 
-    public WorkflowNodeDetail getNode() {
-        return node;
-    }
-
-    public void setNode(WorkflowNodeDetail node) {
-        this.node = node;
-    }
-
     public String getOutputKey() {
         return outputKey;
     }

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/Notification_Email.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/Notification_Email.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/Notification_Email.java
index 524994e..e3504f6 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/Notification_Email.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/Notification_Email.java
@@ -45,7 +45,7 @@ public class Notification_Email implements Serializable {
     private Experiment experiment;
     @ManyToOne
     @JoinColumn(name = "TASK_ID")
-    private TaskDetail taskDetail;
+    private TaskDetail task;
 
     public String getExperiment_id() {
         return experiment_id;
@@ -55,14 +55,6 @@ public class Notification_Email implements Serializable {
         this.experiment_id = experiment_id;
     }
 
-    public Experiment getExperiment() {
-        return experiment;
-    }
-
-    public void setExperiment(Experiment experiment) {
-        this.experiment = experiment;
-    }
-
     public String getEmailAddress() {
         return emailAddress;
     }
@@ -79,14 +71,6 @@ public class Notification_Email implements Serializable {
         this.taskId = taskId;
     }
 
-    public TaskDetail getTaskDetail() {
-        return taskDetail;
-    }
-
-    public void setTaskDetail(TaskDetail taskDetail) {
-        this.taskDetail = taskDetail;
-    }
-
     public int getEmailId() {
         return emailId;
     }

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/QosParam.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/QosParam.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/QosParam.java
index a0dbfa0..f124588 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/QosParam.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/QosParam.java
@@ -100,20 +100,4 @@ public class QosParam implements Serializable {
     public void setNoOfRetries(int noOfRetries) {
         this.noOfRetries = noOfRetries;
     }
-
-    public Experiment getExperiment() {
-        return experiment;
-    }
-
-    public void setExperiment(Experiment experiment) {
-        this.experiment = experiment;
-    }
-
-    public TaskDetail getTask() {
-        return task;
-    }
-
-    public void setTask(TaskDetail task) {
-        this.task = task;
-    }
 }

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/Status.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/Status.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/Status.java
index e0b84a1..b3d65c0 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/Status.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/Status.java
@@ -62,12 +62,16 @@ public class Status implements Serializable {
 
     @ManyToOne(fetch = FetchType.LAZY, cascade= CascadeType.MERGE)
     @JoinColumn(name = "NODE_INSTANCE_ID")
-    private WorkflowNodeDetail node;
+    private WorkflowNodeDetail nodeDetail;
 
     @ManyToOne(fetch = FetchType.LAZY, cascade= CascadeType.MERGE)
     @JoinColumn(name = "TRANSFER_ID")
     private DataTransferDetail transferDetail;
 
+    @ManyToOne(fetch = FetchType.LAZY, cascade= CascadeType.MERGE)
+    @JoinColumn(name = "JOB_ID")
+    private JobDetail jobDetail;
+
     public int getStatusId() {
         return statusId;
     }
@@ -139,36 +143,4 @@ public class Status implements Serializable {
     public void setStatusType(String statusType) {
         this.statusType = statusType;
     }
-
-    public Experiment getExperiment() {
-        return experiment;
-    }
-
-    public void setExperiment(Experiment experiment) {
-        this.experiment = experiment;
-    }
-
-    public TaskDetail getTask() {
-        return task;
-    }
-
-    public void setTask(TaskDetail task) {
-        this.task = task;
-    }
-
-    public WorkflowNodeDetail getNode() {
-        return node;
-    }
-
-    public void setNode(WorkflowNodeDetail node) {
-        this.node = node;
-    }
-
-    public DataTransferDetail getTransferDetail() {
-        return transferDetail;
-    }
-
-    public void setTransferDetail(DataTransferDetail transferDetail) {
-        this.transferDetail = transferDetail;
-    }
 }

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/TaskDetail.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/TaskDetail.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/TaskDetail.java
index ebd7758..f455aca 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/TaskDetail.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/TaskDetail.java
@@ -22,11 +22,13 @@
 package org.apache.airavata.persistance.registry.jpa.model;
 
 import org.apache.openjpa.persistence.DataCache;
+import org.apache.openjpa.persistence.jdbc.ElementJoinColumn;
 
 import javax.persistence.*;
-
 import java.io.Serializable;
 import java.sql.Timestamp;
+import java.util.Collection;
+import java.util.List;
 
 @DataCache
 @Entity
@@ -53,6 +55,36 @@ public class TaskDetail implements Serializable {
     @JoinColumn(name = "NODE_INSTANCE_ID")
     private WorkflowNodeDetail nodeDetail;
 
+    @OneToMany (fetch = FetchType.LAZY, mappedBy = "task")
+    private List<ApplicationOutput> applicationOutputs;
+
+    @OneToMany (fetch = FetchType.LAZY, mappedBy = "task")
+    private List<ApplicationInput> applicationInputs;
+
+    @OneToOne (fetch = FetchType.LAZY, mappedBy = "task")
+    private Computational_Resource_Scheduling resourceScheduling;
+
+    @OneToOne (fetch = FetchType.LAZY, mappedBy = "task")
+    private AdvancedInputDataHandling inputDataHandling;
+
+    @OneToOne (fetch = FetchType.LAZY, mappedBy = "task")
+    private AdvancedOutputDataHandling outputDataHandling;
+
+    @OneToOne (fetch = FetchType.LAZY, mappedBy = "task")
+    private Status taskStatus;
+
+    @OneToMany (fetch = FetchType.LAZY, mappedBy = "task")
+    private List<JobDetail> jobDetails;
+
+    @OneToMany (fetch = FetchType.LAZY, mappedBy = "task")
+    private List<DataTransferDetail> dataTransferDetails;
+
+    @OneToMany (fetch = FetchType.LAZY, mappedBy = "task")
+    private List<Notification_Email> notificationEmails;
+
+    @OneToMany (fetch = FetchType.LAZY, mappedBy = "task")
+    private List<ErrorDetail> errorDetails;
+
     public String getTaskId() {
         return taskId;
     }
@@ -93,14 +125,6 @@ public class TaskDetail implements Serializable {
         this.appVersion = appVersion;
     }
 
-    public WorkflowNodeDetail getNodeDetail() {
-        return nodeDetail;
-    }
-
-    public void setNodeDetail(WorkflowNodeDetail nodeDetail) {
-        this.nodeDetail = nodeDetail;
-    }
-
 	public String getApplicationDeploymentId() {
 		return applicationDeploymentId;
 	}
@@ -116,4 +140,84 @@ public class TaskDetail implements Serializable {
     public void setAllowNotification(boolean allowNotification) {
         this.allowNotification = allowNotification;
     }
+
+    public List<ApplicationOutput> getApplicationOutputs() {
+        return applicationOutputs;
+    }
+
+    public void setApplicationOutputs(List<ApplicationOutput> applicationOutputs) {
+        this.applicationOutputs = applicationOutputs;
+    }
+
+    public List<ApplicationInput> getApplicationInputs() {
+        return applicationInputs;
+    }
+
+    public void setApplicationInputs(List<ApplicationInput> applicationInputs) {
+        this.applicationInputs = applicationInputs;
+    }
+
+    public Computational_Resource_Scheduling getResourceScheduling() {
+        return resourceScheduling;
+    }
+
+    public void setResourceScheduling(Computational_Resource_Scheduling resourceScheduling) {
+        this.resourceScheduling = resourceScheduling;
+    }
+
+    public AdvancedInputDataHandling getInputDataHandling() {
+        return inputDataHandling;
+    }
+
+    public void setInputDataHandling(AdvancedInputDataHandling inputDataHandling) {
+        this.inputDataHandling = inputDataHandling;
+    }
+
+    public AdvancedOutputDataHandling getOutputDataHandling() {
+        return outputDataHandling;
+    }
+
+    public void setOutputDataHandling(AdvancedOutputDataHandling outputDataHandling) {
+        this.outputDataHandling = outputDataHandling;
+    }
+
+    public List<JobDetail> getJobDetails() {
+        return jobDetails;
+    }
+
+    public void setJobDetails(List<JobDetail> jobDetails) {
+        this.jobDetails = jobDetails;
+    }
+
+    public List<DataTransferDetail> getDataTransferDetails() {
+        return dataTransferDetails;
+    }
+
+    public void setDataTransferDetails(List<DataTransferDetail> dataTransferDetails) {
+        this.dataTransferDetails = dataTransferDetails;
+    }
+
+    public List<Notification_Email> getNotificationEmails() {
+        return notificationEmails;
+    }
+
+    public void setNotificationEmails(List<Notification_Email> notificationEmails) {
+        this.notificationEmails = notificationEmails;
+    }
+
+    public Status getTaskStatus() {
+        return taskStatus;
+    }
+
+    public void setTaskStatus(Status taskStatus) {
+        this.taskStatus = taskStatus;
+    }
+
+    public List<ErrorDetail> getErrorDetails() {
+        return errorDetails;
+    }
+
+    public void setErrorDetails(List<ErrorDetail> errorDetails) {
+        this.errorDetails = errorDetails;
+    }
 }

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/WorkflowNodeDetail.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/WorkflowNodeDetail.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/WorkflowNodeDetail.java
index b4ae29e..fc0abf8 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/WorkflowNodeDetail.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/WorkflowNodeDetail.java
@@ -22,10 +22,13 @@
 package org.apache.airavata.persistance.registry.jpa.model;
 
 import org.apache.openjpa.persistence.DataCache;
+import org.apache.openjpa.persistence.jdbc.ElementJoinColumn;
 
 import javax.persistence.*;
 import java.io.Serializable;
 import java.sql.Timestamp;
+import java.util.Collection;
+import java.util.List;
 
 @DataCache
 @Entity
@@ -49,6 +52,21 @@ public class WorkflowNodeDetail implements Serializable {
     @JoinColumn(name = "EXPERIMENT_ID")
     private Experiment experiment;
 
+    @OneToMany (fetch = FetchType.LAZY, mappedBy = "nodeDetail")
+    private List<TaskDetail> taskDetails;
+
+    @OneToMany (fetch = FetchType.LAZY, mappedBy = "nodeDetail")
+    private List<NodeInput> nodeInputs;
+
+    @OneToMany (fetch = FetchType.LAZY, mappedBy = "nodeDetail")
+    private List<NodeOutput> nodeOutputs;
+
+    @OneToOne (fetch = FetchType.LAZY, mappedBy = "nodeDetail")
+    private Status nodeStatus;
+
+    @OneToMany (fetch = FetchType.LAZY, mappedBy = "nodeDetail")
+    private List<ErrorDetail> errorDetails;
+
     public String getExpId() {
         return expId;
     }
@@ -81,14 +99,6 @@ public class WorkflowNodeDetail implements Serializable {
         this.nodeName = nodeName;
     }
 
-    public Experiment getExperiment() {
-        return experiment;
-    }
-
-    public void setExperiment(Experiment experiment) {
-        this.experiment = experiment;
-    }
-
 	public String getExecutionUnitData() {
 		return executionUnitData;
 	}
@@ -104,4 +114,44 @@ public class WorkflowNodeDetail implements Serializable {
 	public void setExecutionUnit(String executionUnit) {
 		this.executionUnit = executionUnit;
 	}
+
+    public List<TaskDetail> getTaskDetails() {
+        return taskDetails;
+    }
+
+    public void setTaskDetails(List<TaskDetail> taskDetails) {
+        this.taskDetails = taskDetails;
+    }
+
+    public List<NodeInput> getNodeInputs() {
+        return nodeInputs;
+    }
+
+    public void setNodeInputs(List<NodeInput> nodeInputs) {
+        this.nodeInputs = nodeInputs;
+    }
+
+    public List<NodeOutput> getNodeOutputs() {
+        return nodeOutputs;
+    }
+
+    public void setNodeOutputs(List<NodeOutput> nodeOutputs) {
+        this.nodeOutputs = nodeOutputs;
+    }
+
+    public Status getNodeStatus() {
+        return nodeStatus;
+    }
+
+    public void setNodeStatus(Status nodeStatus) {
+        this.nodeStatus = nodeStatus;
+    }
+
+    public List<ErrorDetail> getErrorDetails() {
+        return errorDetails;
+    }
+
+    public void setErrorDetails(List<ErrorDetail> errorDetails) {
+        this.errorDetails = errorDetails;
+    }
 }

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/AdvanceInputDataHandlingResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/AdvanceInputDataHandlingResource.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/AdvanceInputDataHandlingResource.java
index 4ad08e4..07b1915 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/AdvanceInputDataHandlingResource.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/AdvanceInputDataHandlingResource.java
@@ -37,35 +37,35 @@ import java.util.List;
 public class AdvanceInputDataHandlingResource extends AbstractResource {
     private static final Logger logger = LoggerFactory.getLogger(AdvanceInputDataHandlingResource.class);
     private int dataHandlingId = 0;
-    private ExperimentResource experimentResource;
-    private TaskDetailResource taskDetailResource;
     private String workingDirParent;
     private String workingDir;
     private boolean stageInputFiles;
     private boolean cleanAfterJob;
+    private String experimentId;
+    private String taskId;
 
-    public int getDataHandlingId() {
-        return dataHandlingId;
+    public String getExperimentId() {
+        return experimentId;
     }
 
-    public void setDataHandlingId(int dataHandlingId) {
-        this.dataHandlingId = dataHandlingId;
+    public void setExperimentId(String experimentId) {
+        this.experimentId = experimentId;
     }
 
-    public ExperimentResource getExperimentResource() {
-        return experimentResource;
+    public String getTaskId() {
+        return taskId;
     }
 
-    public void setExperimentResource(ExperimentResource experimentResource) {
-        this.experimentResource = experimentResource;
+    public void setTaskId(String taskId) {
+        this.taskId = taskId;
     }
 
-    public TaskDetailResource getTaskDetailResource() {
-        return taskDetailResource;
+    public int getDataHandlingId() {
+        return dataHandlingId;
     }
 
-    public void setTaskDetailResource(TaskDetailResource taskDetailResource) {
-        this.taskDetailResource = taskDetailResource;
+    public void setDataHandlingId(int dataHandlingId) {
+        this.dataHandlingId = dataHandlingId;
     }
 
     public String getWorkingDirParent() {
@@ -137,18 +137,12 @@ public class AdvanceInputDataHandlingResource extends AbstractResource {
             } else {
                 dataHandling = new AdvancedInputDataHandling();
             }
-            Experiment experiment = em.find(Experiment.class, experimentResource.getExpID());
-            if (taskDetailResource != null) {
-                TaskDetail taskDetail = em.find(TaskDetail.class, taskDetailResource.getTaskId());
-                dataHandling.setTaskId(taskDetailResource.getTaskId());
-                dataHandling.setTask(taskDetail);
-            }
-            dataHandling.setExpId(experimentResource.getExpID());
-            dataHandling.setExperiment(experiment);
             dataHandling.setWorkingDir(workingDir);
             dataHandling.setParentWorkingDir(workingDirParent);
             dataHandling.setStageInputsToWorkingDir(stageInputFiles);
             dataHandling.setCleanAfterJob(cleanAfterJob);
+            dataHandling.setExpId(experimentId);
+            dataHandling.setTaskId(taskId);
             em.persist(dataHandling);
             dataHandlingId = dataHandling.getDataHandlingId();
             em.getTransaction().commit();

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/AdvancedOutputDataHandlingResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/AdvancedOutputDataHandlingResource.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/AdvancedOutputDataHandlingResource.java
index bb3cc80..2b61549 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/AdvancedOutputDataHandlingResource.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/AdvancedOutputDataHandlingResource.java
@@ -37,34 +37,34 @@ import java.util.List;
 public class AdvancedOutputDataHandlingResource extends AbstractResource {
     private static final Logger logger = LoggerFactory.getLogger(AdvancedOutputDataHandlingResource.class);
     private int outputDataHandlingId = 0;
-    private ExperimentResource experimentResource;
-    private TaskDetailResource taskDetailResource;
     private  String outputDataDir;
     private String dataRegUrl;
     private boolean persistOutputData;
+    private String experimentId;
+    private String taskId;
 
-    public int getOutputDataHandlingId() {
-        return outputDataHandlingId;
+    public String getExperimentId() {
+        return experimentId;
     }
 
-    public void setOutputDataHandlingId(int outputDataHandlingId) {
-        this.outputDataHandlingId = outputDataHandlingId;
+    public void setExperimentId(String experimentId) {
+        this.experimentId = experimentId;
     }
 
-    public ExperimentResource getExperimentResource() {
-        return experimentResource;
+    public String getTaskId() {
+        return taskId;
     }
 
-    public void setExperimentResource(ExperimentResource experimentResource) {
-        this.experimentResource = experimentResource;
+    public void setTaskId(String taskId) {
+        this.taskId = taskId;
     }
 
-    public TaskDetailResource getTaskDetailResource() {
-        return taskDetailResource;
+    public int getOutputDataHandlingId() {
+        return outputDataHandlingId;
     }
 
-    public void setTaskDetailResource(TaskDetailResource taskDetailResource) {
-        this.taskDetailResource = taskDetailResource;
+    public void setOutputDataHandlingId(int outputDataHandlingId) {
+        this.outputDataHandlingId = outputDataHandlingId;
     }
 
     public String getOutputDataDir() {
@@ -128,18 +128,11 @@ public class AdvancedOutputDataHandlingResource extends AbstractResource {
             }else {
                 dataHandling = new AdvancedOutputDataHandling();
             }
-            Experiment experiment = em.find(Experiment.class, experimentResource.getExpID());
-            if (taskDetailResource !=null){
-                TaskDetail taskDetail = em.find(TaskDetail.class, taskDetailResource.getTaskId());
-                dataHandling.setTaskId(taskDetailResource.getTaskId());
-                dataHandling.setTask(taskDetail);
-            }
-
-            dataHandling.setExpId(experimentResource.getExpID());
-            dataHandling.setExperiment(experiment);
             dataHandling.setDataRegUrl(dataRegUrl);
             dataHandling.setOutputDataDir(outputDataDir);
             dataHandling.setPersistOutputData(persistOutputData);
+            dataHandling.setExpId(experimentId);
+            dataHandling.setTaskId(taskId);
             em.persist(dataHandling);
             outputDataHandlingId = dataHandling.getOutputDataHandlingId();
             em.getTransaction().commit();

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ApplicationInputResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ApplicationInputResource.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ApplicationInputResource.java
index d04fc85..1bab796 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ApplicationInputResource.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ApplicationInputResource.java
@@ -37,7 +37,6 @@ import org.slf4j.LoggerFactory;
 
 public class ApplicationInputResource extends AbstractResource {
 	private static final Logger logger = LoggerFactory.getLogger(ApplicationInputResource.class);
-    private TaskDetailResource taskDetailResource;
     private String inputKey;
     private String dataType;
     private String metadata;
@@ -49,6 +48,15 @@ public class ApplicationInputResource extends AbstractResource {
     private boolean isRequired;
     private boolean requiredToCMD;
     private boolean dataStaged;
+    private String taskId;
+
+    public String getTaskId() {
+        return taskId;
+    }
+
+    public void setTaskId(String taskId) {
+        this.taskId = taskId;
+    }
 
     public boolean isRequired() {
         return isRequired;
@@ -138,15 +146,6 @@ public class ApplicationInputResource extends AbstractResource {
         this.value = value;
     }
 
-    public TaskDetailResource getTaskDetailResource() {
-        return taskDetailResource;
-    }
-
-    public void setTaskDetailResource(TaskDetailResource taskDetailResource) {
-        this.taskDetailResource = taskDetailResource;
-    }
-
-    
     public Resource create(ResourceType type) throws RegistryException {
         logger.error("Unsupported resource type for application input data resource.", new UnsupportedOperationException());
         throw new UnsupportedOperationException();
@@ -175,15 +174,13 @@ public class ApplicationInputResource extends AbstractResource {
         EntityManager em = null;
         try {
             em = ResourceUtils.getEntityManager();
-            ApplicationInput existingInput = em.find(ApplicationInput.class, new ApplicationInput_PK(inputKey, taskDetailResource.getTaskId()));
+            ApplicationInput existingInput = em.find(ApplicationInput.class, new ApplicationInput_PK(inputKey, taskId));
             em.close();
 
             em = ResourceUtils.getEntityManager();
             em.getTransaction().begin();
             ApplicationInput applicationInput = new ApplicationInput();
-            TaskDetail taskDetail = em.find(TaskDetail.class, taskDetailResource.getTaskId());
-            applicationInput.setTask(taskDetail);
-            applicationInput.setTaskId(taskDetail.getTaskId());
+            applicationInput.setTaskId(taskId);
             applicationInput.setInputKey(inputKey);
             applicationInput.setDataType(dataType);
             applicationInput.setAppArgument(appArgument);
@@ -193,15 +190,14 @@ public class ApplicationInputResource extends AbstractResource {
             applicationInput.setRequiredToCMD(requiredToCMD);
             applicationInput.setRequired(isRequired);
             applicationInput.setDataStaged(dataStaged);
-            if (value != null){
+            if (value != null) {
                 applicationInput.setValue(value.toCharArray());
             }
 
             applicationInput.setMetadata(metadata);
 
             if (existingInput != null) {
-                existingInput.setTask(taskDetail);
-                existingInput.setTaskId(taskDetail.getTaskId());
+                existingInput.setTaskId(taskId);
                 existingInput.setInputKey(inputKey);
                 existingInput.setDataType(dataType);
                 existingInput.setAppArgument(appArgument);
@@ -211,7 +207,7 @@ public class ApplicationInputResource extends AbstractResource {
                 existingInput.setRequiredToCMD(requiredToCMD);
                 existingInput.setRequired(isRequired);
                 existingInput.setDataStaged(dataStaged);
-                if (value != null){
+                if (value != null) {
                     existingInput.setValue(value.toCharArray());
                 }
                 existingInput.setMetadata(metadata);
@@ -224,12 +220,12 @@ public class ApplicationInputResource extends AbstractResource {
         } catch (Exception e) {
             throw new RegistryException(e.getMessage());
         } finally {
-                if (em != null && em.isOpen()) {
-                    if (em.getTransaction().isActive()){
-                        em.getTransaction().rollback();
-                    }
-                    em.close();
+            if (em != null && em.isOpen()) {
+                if (em.getTransaction().isActive()) {
+                    em.getTransaction().rollback();
                 }
+                em.close();
             }
         }
+    }
 }

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ApplicationOutputResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ApplicationOutputResource.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ApplicationOutputResource.java
index c937df3..0127cde 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ApplicationOutputResource.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ApplicationOutputResource.java
@@ -37,7 +37,7 @@ import org.slf4j.LoggerFactory;
 
 public class ApplicationOutputResource extends AbstractResource {
 	private static final Logger logger = LoggerFactory.getLogger(ApplicationOutputResource.class);
-    private TaskDetailResource taskDetailResource;
+    private String taskId;
     private String outputKey;
     private String dataType;
     private String value;
@@ -120,15 +120,14 @@ public class ApplicationOutputResource extends AbstractResource {
         this.value = value;
     }
 
-    public TaskDetailResource getTaskDetailResource() {
-        return taskDetailResource;
+    public String getTaskId() {
+        return taskId;
     }
 
-    public void setTaskDetailResource(TaskDetailResource taskDetailResource) {
-        this.taskDetailResource = taskDetailResource;
+    public void setTaskId(String taskId) {
+        this.taskId = taskId;
     }
 
-    
     public Resource create(ResourceType type) throws RegistryException {
         logger.error("Unsupported resource type for application output data resource.", new UnsupportedOperationException());
         throw new UnsupportedOperationException();
@@ -157,15 +156,13 @@ public class ApplicationOutputResource extends AbstractResource {
         EntityManager em = null;
         try {
             em = ResourceUtils.getEntityManager();
-            ApplicationOutput existingOutput = em.find(ApplicationOutput.class, new ApplicationOutput_PK(outputKey, taskDetailResource.getTaskId()));
+            ApplicationOutput existingOutput = em.find(ApplicationOutput.class, new ApplicationOutput_PK(outputKey, taskId));
             em.close();
 
             em = ResourceUtils.getEntityManager();
             em.getTransaction().begin();
             ApplicationOutput applicationOutput = new ApplicationOutput();
-            TaskDetail taskDetail = em.find(TaskDetail.class, taskDetailResource.getTaskId());
-            applicationOutput.setTask(taskDetail);
-            applicationOutput.setTaskId(taskDetail.getTaskId());
+            applicationOutput.setTaskId(taskId);
             applicationOutput.setOutputKey(outputKey);
             applicationOutput.setDataType(dataType);
             applicationOutput.setRequired(isRequired);
@@ -179,8 +176,7 @@ public class ApplicationOutputResource extends AbstractResource {
             }
 
             if (existingOutput != null) {
-                existingOutput.setTask(taskDetail);
-                existingOutput.setTaskId(taskDetail.getTaskId());
+                existingOutput.setTaskId(taskId);
                 existingOutput.setOutputKey(outputKey);
                 existingOutput.setDataType(dataType);
                 existingOutput.setRequired(isRequired);

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ComputationSchedulingResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ComputationSchedulingResource.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ComputationSchedulingResource.java
index 7c0327f..9789a82 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ComputationSchedulingResource.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ComputationSchedulingResource.java
@@ -38,8 +38,8 @@ import java.util.List;
 public class ComputationSchedulingResource extends AbstractResource {
     private static final Logger logger = LoggerFactory.getLogger(ComputationSchedulingResource.class);
     private int schedulingId = 0;
-    private ExperimentResource experimentResource;
-    private TaskDetailResource taskDetailResource;
+    private String experimentId;
+    private String taskId;
     private String resourceHostId;
     private int cpuCount;
     private int nodeCount;
@@ -67,20 +67,20 @@ public class ComputationSchedulingResource extends AbstractResource {
         this.schedulingId = schedulingId;
     }
 
-    public ExperimentResource getExperimentResource() {
-        return experimentResource;
+    public String getExperimentId() {
+        return experimentId;
     }
 
-    public void setExperimentResource(ExperimentResource experimentResource) {
-        this.experimentResource = experimentResource;
+    public void setExperimentId(String experimentId) {
+        this.experimentId = experimentId;
     }
 
-    public TaskDetailResource getTaskDetailResource() {
-        return taskDetailResource;
+    public String getTaskId() {
+        return taskId;
     }
 
-    public void setTaskDetailResource(TaskDetailResource taskDetailResource) {
-        this.taskDetailResource = taskDetailResource;
+    public void setTaskId(String taskId) {
+        this.taskId = taskId;
     }
 
     public String getResourceHostId() {
@@ -192,14 +192,8 @@ public class ComputationSchedulingResource extends AbstractResource {
             } else {
                 scheduling = new Computational_Resource_Scheduling();
             }
-            Experiment experiment = em.find(Experiment.class, experimentResource.getExpID());
-            if (taskDetailResource != null) {
-                TaskDetail taskDetail = em.find(TaskDetail.class, taskDetailResource.getTaskId());
-                scheduling.setTask(taskDetail);
-                scheduling.setTaskId(taskDetailResource.getTaskId());
-            }
-            scheduling.setExpId(experimentResource.getExpID());
-            scheduling.setExperiment(experiment);
+            scheduling.setExpId(experimentId);
+            scheduling.setTaskId(taskId);
             scheduling.setResourceHostId(resourceHostId);
             scheduling.setCpuCount(cpuCount);
             scheduling.setNodeCount(nodeCount);

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ConfigDataResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ConfigDataResource.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ConfigDataResource.java
index c45ba07..25a1c5b 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ConfigDataResource.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ConfigDataResource.java
@@ -35,12 +35,48 @@ import java.util.List;
 
 public class ConfigDataResource extends AbstractResource {
     private static final Logger logger = LoggerFactory.getLogger(ConfigDataResource.class);
-    private ExperimentResource experimentResource;
+    private String experimentId;
     private boolean airavataAutoSchedule;
     private boolean overrideManualParams;
     private boolean shareExp;
     private String userDn;
     private boolean generateCert;
+    private ComputationSchedulingResource computationSchedulingResource;
+    private AdvanceInputDataHandlingResource advanceInputDataHandlingResource;
+    private AdvancedOutputDataHandlingResource advancedOutputDataHandlingResource;
+    private QosParamResource qosParamResource;
+
+    public ComputationSchedulingResource getComputationSchedulingResource() {
+        return computationSchedulingResource;
+    }
+
+    public void setComputationSchedulingResource(ComputationSchedulingResource computationSchedulingResource) {
+        this.computationSchedulingResource = computationSchedulingResource;
+    }
+
+    public AdvanceInputDataHandlingResource getAdvanceInputDataHandlingResource() {
+        return advanceInputDataHandlingResource;
+    }
+
+    public void setAdvanceInputDataHandlingResource(AdvanceInputDataHandlingResource advanceInputDataHandlingResource) {
+        this.advanceInputDataHandlingResource = advanceInputDataHandlingResource;
+    }
+
+    public AdvancedOutputDataHandlingResource getAdvancedOutputDataHandlingResource() {
+        return advancedOutputDataHandlingResource;
+    }
+
+    public void setAdvancedOutputDataHandlingResource(AdvancedOutputDataHandlingResource advancedOutputDataHandlingResource) {
+        this.advancedOutputDataHandlingResource = advancedOutputDataHandlingResource;
+    }
+
+    public QosParamResource getQosParamResource() {
+        return qosParamResource;
+    }
+
+    public void setQosParamResource(QosParamResource qosParamResource) {
+        this.qosParamResource = qosParamResource;
+    }
 
     public String getUserDn() {
         return userDn;
@@ -58,12 +94,12 @@ public class ConfigDataResource extends AbstractResource {
         this.generateCert = generateCert;
     }
 
-    public ExperimentResource getExperimentResource() {
-        return experimentResource;
+    public String getExperimentId() {
+        return experimentId;
     }
 
-    public void setExperimentResource(ExperimentResource experimentResource) {
-        this.experimentResource = experimentResource;
+    public void setExperimentId(String experimentId) {
+        this.experimentId = experimentId;
     }
 
     public boolean isAiravataAutoSchedule() {
@@ -119,23 +155,20 @@ public class ConfigDataResource extends AbstractResource {
         EntityManager em = null;
         try {
             em = ResourceUtils.getEntityManager();
-            ExperimentConfigData existingConfig = em.find(ExperimentConfigData.class, experimentResource.getExpID());
+            ExperimentConfigData existingConfig = em.find(ExperimentConfigData.class, experimentId);
             em.close();
 
             em = ResourceUtils.getEntityManager();
             em.getTransaction().begin();
             ExperimentConfigData configData = new ExperimentConfigData();
-            Experiment experiment = em.find(Experiment.class, experimentResource.getExpID());
-            configData.setExpId(experimentResource.getExpID());
-            configData.setExperiment(experiment);
+            configData.setExpId(experimentId);
             configData.setAiravataAutoSchedule(airavataAutoSchedule);
             configData.setOverrideManualParams(overrideManualParams);
             configData.setShareExp(shareExp);
             configData.setUserDn(userDn);
             configData.setGenerateCert(generateCert);
             if (existingConfig != null) {
-                existingConfig.setExpId(experimentResource.getExpID());
-                existingConfig.setExperiment(experiment);
+                existingConfig.setExpId(experimentId);
                 existingConfig.setAiravataAutoSchedule(airavataAutoSchedule);
                 existingConfig.setOverrideManualParams(overrideManualParams);
                 existingConfig.setShareExp(shareExp);

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/DataTransferDetailResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/DataTransferDetailResource.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/DataTransferDetailResource.java
index ab1b49e..9ecfd91 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/DataTransferDetailResource.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/DataTransferDetailResource.java
@@ -26,7 +26,6 @@ import org.apache.airavata.persistance.registry.jpa.ResourceType;
 import org.apache.airavata.persistance.registry.jpa.ResourceUtils;
 import org.apache.airavata.persistance.registry.jpa.model.DataTransferDetail;
 import org.apache.airavata.persistance.registry.jpa.model.Status;
-import org.apache.airavata.persistance.registry.jpa.model.TaskDetail;
 import org.apache.airavata.persistance.registry.jpa.utils.QueryGenerator;
 import org.apache.airavata.registry.cpi.RegistryException;
 import org.apache.airavata.registry.cpi.utils.StatusType;
@@ -42,24 +41,25 @@ import java.util.List;
 public class DataTransferDetailResource extends AbstractResource {
     private static final Logger logger = LoggerFactory.getLogger(DataTransferDetailResource.class);
     private String transferId;
-    private TaskDetailResource taskDetailResource;
+    private String taskId;
     private Timestamp creationTime;
     private String transferDescription;
+    private StatusResource datatransferStatus;
 
-    public String getTransferId() {
-        return transferId;
+    public StatusResource getDatatransferStatus() {
+        return datatransferStatus;
     }
 
-    public void setTransferId(String transferId) {
-        this.transferId = transferId;
+    public void setDatatransferStatus(StatusResource datatransferStatus) {
+        this.datatransferStatus = datatransferStatus;
     }
 
-    public TaskDetailResource getTaskDetailResource() {
-        return taskDetailResource;
+    public String getTransferId() {
+        return transferId;
     }
 
-    public void setTaskDetailResource(TaskDetailResource taskDetailResource) {
-        this.taskDetailResource = taskDetailResource;
+    public void setTransferId(String transferId) {
+        this.transferId = transferId;
     }
 
     public Timestamp getCreationTime() {
@@ -78,12 +78,19 @@ public class DataTransferDetailResource extends AbstractResource {
         this.transferDescription = transferDescription;
     }
 
-    
+    public String getTaskId() {
+        return taskId;
+    }
+
+    public void setTaskId(String taskId) {
+        this.taskId = taskId;
+    }
+
     public Resource create(ResourceType type) throws RegistryException {
         switch (type){
             case STATUS:
                 StatusResource statusResource = new StatusResource();
-                statusResource.setDataTransferDetail(this);
+                statusResource.setTransferId(transferId);
                 return statusResource;
             default:
                 logger.error("Unsupported resource type for data transfer details data resource.", new UnsupportedOperationException());
@@ -221,18 +228,15 @@ public class DataTransferDetailResource extends AbstractResource {
             em = ResourceUtils.getEntityManager();
             em.getTransaction().begin();
             DataTransferDetail dataTransferDetail = new DataTransferDetail();
-            TaskDetail taskDetail = em.find(TaskDetail.class, taskDetailResource.getTaskId());
             dataTransferDetail.setTransferId(transferId);
-            dataTransferDetail.setTask(taskDetail);
-            dataTransferDetail.setTaskId(taskDetailResource.getTaskId());
+            dataTransferDetail.setTaskId(taskId);
             dataTransferDetail.setCreationTime(creationTime);
             if (transferDescription != null) {
                 dataTransferDetail.setTransferDesc(transferDescription.toCharArray());
             }
             if (existingDF != null) {
                 existingDF.setTransferId(transferId);
-                existingDF.setTask(taskDetail);
-                existingDF.setTaskId(taskDetailResource.getTaskId());
+                existingDF.setTaskId(taskId);
                 existingDF.setCreationTime(creationTime);
                 if (transferDescription != null) {
                     existingDF.setTransferDesc(transferDescription.toCharArray());

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ErrorDetailResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ErrorDetailResource.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ErrorDetailResource.java
index 9299bad..799ebcf 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ErrorDetailResource.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ErrorDetailResource.java
@@ -39,9 +39,9 @@ import java.util.List;
 public class ErrorDetailResource extends AbstractResource {
     private static final Logger logger = LoggerFactory.getLogger(ErrorDetailResource.class);
     private int errorId;
-    private ExperimentResource experimentResource;
-    private TaskDetailResource taskDetailResource;
-    private WorkflowNodeDetailResource nodeDetail;
+    private String experimentId;
+    private String taskId;
+    private String nodeId;
     private Timestamp creationTime;
     private String actualErrorMsg;
     private String userFriendlyErrorMsg;
@@ -79,6 +79,30 @@ public class ErrorDetailResource extends AbstractResource {
         return userFriendlyErrorMsg;
     }
 
+    public String getExperimentId() {
+        return experimentId;
+    }
+
+    public void setExperimentId(String experimentId) {
+        this.experimentId = experimentId;
+    }
+
+    public String getTaskId() {
+        return taskId;
+    }
+
+    public void setTaskId(String taskId) {
+        this.taskId = taskId;
+    }
+
+    public String getNodeId() {
+        return nodeId;
+    }
+
+    public void setNodeId(String nodeId) {
+        this.nodeId = nodeId;
+    }
+
     public void setUserFriendlyErrorMsg(String userFriendlyErrorMsg) {
         this.userFriendlyErrorMsg = userFriendlyErrorMsg;
     }
@@ -115,30 +139,6 @@ public class ErrorDetailResource extends AbstractResource {
         this.actionableGroup = actionableGroup;
     }
 
-    public ExperimentResource getExperimentResource() {
-        return experimentResource;
-    }
-
-    public void setExperimentResource(ExperimentResource experimentResource) {
-        this.experimentResource = experimentResource;
-    }
-
-    public TaskDetailResource getTaskDetailResource() {
-        return taskDetailResource;
-    }
-
-    public void setTaskDetailResource(TaskDetailResource taskDetailResource) {
-        this.taskDetailResource = taskDetailResource;
-    }
-
-    public WorkflowNodeDetailResource getNodeDetail() {
-        return nodeDetail;
-    }
-
-    public void setNodeDetail(WorkflowNodeDetailResource nodeDetail) {
-        this.nodeDetail = nodeDetail;
-    }
-
     public String getJobId() {
         return jobId;
     }
@@ -185,20 +185,9 @@ public class ErrorDetailResource extends AbstractResource {
                 errorDetail = new ErrorDetail();
             }
             errorDetail.setErrorID(errorId);
-            Experiment experiment = em.find(Experiment.class, experimentResource.getExpID());
-            errorDetail.setExperiment(experiment);
-            errorDetail.setExpId(experimentResource.getExpID());
-            if (taskDetailResource != null) {
-                TaskDetail taskDetail = em.find(TaskDetail.class, taskDetailResource.getTaskId());
-                errorDetail.setTask(taskDetail);
-                errorDetail.setTaskId(taskDetail.getTaskId());
-            }
-
-            if (nodeDetail != null) {
-                WorkflowNodeDetail workflowNodeDetail = em.find(WorkflowNodeDetail.class, nodeDetail.getNodeInstanceId());
-                errorDetail.setNodeDetails(workflowNodeDetail);
-                errorDetail.setNodeId(workflowNodeDetail.getNodeId());
-            }
+            errorDetail.setExpId(experimentId);
+            errorDetail.setTaskId(taskId);
+            errorDetail.setNodeId(nodeId);
             errorDetail.setCreationTime(creationTime);
             if (actualErrorMsg != null){
                 errorDetail.setActualErrorMsg(actualErrorMsg.toCharArray());

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ExperimentInputResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ExperimentInputResource.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ExperimentInputResource.java
index 1466522..c70f84a 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ExperimentInputResource.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ExperimentInputResource.java
@@ -37,7 +37,7 @@ import java.util.List;
 public class ExperimentInputResource extends AbstractResource {
     private static final Logger logger = LoggerFactory.getLogger(ExperimentInputResource.class);
 
-    private ExperimentResource experimentResource;
+    private String experimentId;
     private String experimentKey;
     private String value;
     private String metadata;
@@ -122,12 +122,12 @@ public class ExperimentInputResource extends AbstractResource {
         this.value = value;
     }
 
-    public ExperimentResource getExperimentResource() {
-        return experimentResource;
+    public String getExperimentId() {
+        return experimentId;
     }
 
-    public void setExperimentResource(ExperimentResource experimentResource) {
-        this.experimentResource = experimentResource;
+    public void setExperimentId(String experimentId) {
+        this.experimentId = experimentId;
     }
 
     public String getDataType() {
@@ -170,16 +170,14 @@ public class ExperimentInputResource extends AbstractResource {
         EntityManager em = null;
         try {
             em = ResourceUtils.getEntityManager();
-            Experiment_Input existingInput = em.find(Experiment_Input.class, new Experiment_Input_PK(experimentResource.getExpID(), experimentKey));
+            Experiment_Input existingInput = em.find(Experiment_Input.class, new Experiment_Input_PK(experimentId, experimentKey));
             em.close();
 
             em = ResourceUtils.getEntityManager();
             em.getTransaction().begin();
             Experiment_Input exInput = new Experiment_Input();
             exInput.setEx_key(experimentKey);
-            Experiment experiment = em.find(Experiment.class, experimentResource.getExpID());
-            exInput.setExperiment(experiment);
-            exInput.setExperiment_id(experiment.getExpId());
+            exInput.setExperiment_id(experimentId);
             if (value != null){
                 exInput.setValue(value.toCharArray());
             }
@@ -194,8 +192,7 @@ public class ExperimentInputResource extends AbstractResource {
             exInput.setDataStaged(dataStaged);
             if (existingInput != null) {
                 existingInput.setEx_key(experimentKey);
-                existingInput.setExperiment(experiment);
-                existingInput.setExperiment_id(experiment.getExpId());
+                existingInput.setExperiment_id(experimentId);
                 if (value != null){
                     existingInput.setValue(value.toCharArray());
                 }

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ExperimentOutputResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ExperimentOutputResource.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ExperimentOutputResource.java
index 17bd23a..01a23a7 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ExperimentOutputResource.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ExperimentOutputResource.java
@@ -37,7 +37,7 @@ import java.util.List;
 public class ExperimentOutputResource extends AbstractResource {
     private static final Logger logger = LoggerFactory.getLogger(ExperimentOutputResource.class);
 
-    private ExperimentResource experimentResource;
+    private String experimentId;
     private String experimentKey;
     private String value;
     private String dataType;
@@ -64,7 +64,6 @@ public class ExperimentOutputResource extends AbstractResource {
         this.appArgument = appArgument;
     }
 
-
     public boolean getRequiredToCMD() {
         return requiredToCMD;
     }
@@ -113,12 +112,12 @@ public class ExperimentOutputResource extends AbstractResource {
         this.value = value;
     }
 
-    public ExperimentResource getExperimentResource() {
-        return experimentResource;
+    public String getExperimentId() {
+        return experimentId;
     }
 
-    public void setExperimentResource(ExperimentResource experimentResource) {
-        this.experimentResource = experimentResource;
+    public void setExperimentId(String experimentId) {
+        this.experimentId = experimentId;
     }
 
     public String getDataType() {
@@ -153,16 +152,14 @@ public class ExperimentOutputResource extends AbstractResource {
         EntityManager em = null;
         try {
             em = ResourceUtils.getEntityManager();
-            Experiment_Output existingOutput = em.find(Experiment_Output.class, new Experiment_Output_PK(experimentResource.getExpID(), experimentKey));
+            Experiment_Output existingOutput = em.find(Experiment_Output.class, new Experiment_Output_PK(experimentId, experimentKey));
             em.close();
 
             em = ResourceUtils.getEntityManager();
             em.getTransaction().begin();
             Experiment_Output exOutput = new Experiment_Output();
             exOutput.setEx_key(experimentKey);
-            Experiment experiment = em.find(Experiment.class, experimentResource.getExpID());
-            exOutput.setExperiment(experiment);
-            exOutput.setExperiment_id(experiment.getExpId());
+            exOutput.setExperiment_id(experimentId);
             if (value != null){
                 exOutput.setValue(value.toCharArray());
             }
@@ -176,11 +173,10 @@ public class ExperimentOutputResource extends AbstractResource {
 
             if (existingOutput != null) {
                 existingOutput.setEx_key(experimentKey);
-                existingOutput.setExperiment(experiment);
+                existingOutput.setExperiment_id(experimentId);
                 if (value != null){
                     existingOutput.setValue(value.toCharArray());
                 }
-                existingOutput.setExperiment_id(experiment.getExpId());
                 existingOutput.setDataType(dataType);
                 existingOutput.setRequired(isRequired);
                 existingOutput.setRequiredToCMD(requiredToCMD);

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ExperimentResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ExperimentResource.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ExperimentResource.java
index 1d7b58c..024ab2c 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ExperimentResource.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ExperimentResource.java
@@ -43,8 +43,8 @@ public class ExperimentResource extends AbstractResource {
     private String executionUser;
     private String expID;
     private Timestamp creationTime;
-    private GatewayResource gateway;
-    private ProjectResource project;
+    private String gatewayId;
+    private String projectId;
     private String expName;
     private String description;
     private String applicationId;
@@ -54,6 +54,15 @@ public class ExperimentResource extends AbstractResource {
     private String workflowExecutionId;
     private boolean enableEmailNotifications;
     private String gatewayExecutionId;
+    private List<ExperimentInputResource> experimentInputResources;
+    private List<ExperimentOutputResource> experimentOutputputResources;
+    private ComputationSchedulingResource computationSchedulingResource;
+    private ConfigDataResource userConfigDataResource;
+    private List<WorkflowNodeDetailResource> workflowNodeDetailResourceList;
+    private List<StatusResource> stateChangeList;
+    private List<ErrorDetailResource> errorDetailList;
+    private StatusResource experimentStatus;
+    private List<NotificationEmailResource> emailResourceList;
 
     /**
      *
@@ -143,6 +152,91 @@ public class ExperimentResource extends AbstractResource {
         this.gatewayExecutionId = gatewayExecutionId;
     }
 
+    public String getGatewayId() {
+        return gatewayId;
+    }
+
+    public void setGatewayId(String gatewayId) {
+        this.gatewayId = gatewayId;
+    }
+
+    public String getProjectId() {
+        return projectId;
+    }
+
+    public void setProjectId(String projectId) {
+        this.projectId = projectId;
+    }
+
+    public List<ExperimentInputResource> getExperimentInputResources() {
+        return experimentInputResources;
+    }
+
+    public void setExperimentInputResources(List<ExperimentInputResource> experimentInputResources) {
+        this.experimentInputResources = experimentInputResources;
+    }
+
+    public List<ExperimentOutputResource> getExperimentOutputputResources() {
+        return experimentOutputputResources;
+    }
+
+    public void setExperimentOutputputResources(List<ExperimentOutputResource> experimentOutputputResources) {
+        this.experimentOutputputResources = experimentOutputputResources;
+    }
+
+    public ComputationSchedulingResource getComputationSchedulingResource() {
+        return computationSchedulingResource;
+    }
+
+    public void setComputationSchedulingResource(ComputationSchedulingResource computationSchedulingResource) {
+        this.computationSchedulingResource = computationSchedulingResource;
+    }
+
+    public ConfigDataResource getUserConfigDataResource() {
+        return userConfigDataResource;
+    }
+
+    public void setUserConfigDataResource(ConfigDataResource userConfigDataResource) {
+        this.userConfigDataResource = userConfigDataResource;
+    }
+
+    public List<WorkflowNodeDetailResource> getWorkflowNodeDetailResourceList() {
+        return workflowNodeDetailResourceList;
+    }
+
+    public void setWorkflowNodeDetailResourceList(List<WorkflowNodeDetailResource> workflowNodeDetailResourceList) {
+        this.workflowNodeDetailResourceList = workflowNodeDetailResourceList;
+    }
+
+    public List<StatusResource> getStateChangeList() {
+        return stateChangeList;
+    }
+
+    public void setStateChangeList(List<StatusResource> stateChangeList) {
+        this.stateChangeList = stateChangeList;
+    }
+
+    public List<ErrorDetailResource> getErrorDetailList() {
+        return errorDetailList;
+    }
+
+    public void setErrorDetailList(List<ErrorDetailResource> errorDetailList) {
+        this.errorDetailList = errorDetailList;
+    }
+
+    public void setExperimentStatus(StatusResource experimentStatus) {
+        this.experimentStatus = experimentStatus;
+    }
+
+    public List<NotificationEmailResource> getEmailResourceList() {
+        return emailResourceList;
+    }
+
+    public void setEmailResourceList(List<NotificationEmailResource> emailResourceList) {
+        this.emailResourceList = emailResourceList;
+    }
+
+
     /**
      * Since experiments are at the leaf level, this method is not
      * valid for an experiment
@@ -153,47 +247,47 @@ public class ExperimentResource extends AbstractResource {
     	switch (type){
 	        case EXPERIMENT_INPUT:
 	        	ExperimentInputResource inputResource = new ExperimentInputResource();
-	            inputResource.setExperimentResource(this);
+	            inputResource.setExperimentId(expID);
 	            return inputResource;
             case EXPERIMENT_OUTPUT:
                 ExperimentOutputResource experimentOutputResource = new ExperimentOutputResource();
-                experimentOutputResource.setExperimentResource(this);
+                experimentOutputResource.setExperimentId(expID);
                 return experimentOutputResource;
             case NOTIFICATION_EMAIL:
                 NotificationEmailResource emailResource = new NotificationEmailResource();
-                emailResource.setExperimentResource(this);
+                emailResource.setExperimentId(expID);
                 return emailResource;
             case WORKFLOW_NODE_DETAIL:
                 WorkflowNodeDetailResource nodeDetailResource = new WorkflowNodeDetailResource();
-                nodeDetailResource.setExperimentResource(this);
+                nodeDetailResource.setExperimentId(expID);
                 return nodeDetailResource;
             case ERROR_DETAIL:
                 ErrorDetailResource errorDetailResource = new ErrorDetailResource();
-                errorDetailResource.setExperimentResource(this);
+                errorDetailResource.setExperimentId(expID);
                 return errorDetailResource;
             case STATUS:
                 StatusResource statusResource = new StatusResource();
-                statusResource.setExperimentResource(this);
+                statusResource.setExperimentId(expID);
                 return statusResource;
             case CONFIG_DATA:
                 ConfigDataResource configDataResource = new ConfigDataResource();
-                configDataResource.setExperimentResource(this);
+                configDataResource.setExperimentId(expID);
                 return configDataResource;
             case COMPUTATIONAL_RESOURCE_SCHEDULING:
                 ComputationSchedulingResource schedulingResource = new ComputationSchedulingResource();
-                schedulingResource.setExperimentResource(this);
+                schedulingResource.setExperimentId(expID);
                 return schedulingResource;
             case ADVANCE_INPUT_DATA_HANDLING:
                 AdvanceInputDataHandlingResource dataHandlingResource = new AdvanceInputDataHandlingResource();
-                dataHandlingResource.setExperimentResource(this);
+                dataHandlingResource.setExperimentId(expID);
                 return dataHandlingResource;
             case ADVANCE_OUTPUT_DATA_HANDLING:
                 AdvancedOutputDataHandlingResource outputDataHandlingResource = new AdvancedOutputDataHandlingResource();
-                outputDataHandlingResource.setExperimentResource(this);
+                outputDataHandlingResource.setExperimentId(expID);
                 return outputDataHandlingResource;
             case QOS_PARAM:
                 QosParamResource qosParamResource = new QosParamResource();
-                qosParamResource.setExperimentResource(this);
+                qosParamResource.setExperimentId(expID);
                 return qosParamResource;
 	        default:
                 logger.error("Unsupported resource type for experiment resource.", new IllegalArgumentException());
@@ -572,17 +666,11 @@ public class ExperimentResource extends AbstractResource {
             em = ResourceUtils.getEntityManager();
             em.getTransaction().begin();
             Experiment experiment = new Experiment();
-            Project projectmodel = em.find(Project.class, project.getId());
-            experiment.setProject(projectmodel);
-            experiment.setProjectId(projectmodel.getProject_id());
-            Gateway gateway = em.find(Gateway.class, getGateway().getGatewayId());
+            experiment.setProjectID(projectId);
             experiment.setExpId(expID);
             experiment.setExecutionUser(executionUser);
-            Users userModel = em.find(Users.class, executionUser);
-            experiment.setUser(userModel);
-            experiment.setExecutionUser(userModel.getUser_name());
-            experiment.setGateway(gateway);
-            experiment.setGatewayId(gateway.getGateway_id());
+            experiment.setExecutionUser(executionUser);
+            experiment.setGatewayId(gatewayId);
             experiment.setCreationTime(creationTime);
             experiment.setExpName(expName);
             experiment.setExpDesc(description);
@@ -594,12 +682,9 @@ public class ExperimentResource extends AbstractResource {
             experiment.setAllowNotification(enableEmailNotifications);
             experiment.setGatewayExecutionId(gatewayExecutionId);
             if (existingExp != null) {
-                existingExp.setGateway(gateway);
-                existingExp.setGatewayId(gateway.getGateway_id());
-                existingExp.setProject(projectmodel);
+                existingExp.setGatewayId(gatewayId);
                 existingExp.setExecutionUser(executionUser);
-                existingExp.setUser(userModel);
-                existingExp.setProjectId(projectmodel.getProject_id());
+                existingExp.setProjectID(projectId);
                 existingExp.setCreationTime(creationTime);
                 existingExp.setExpName(expName);
                 existingExp.setExpDesc(description);
@@ -637,22 +722,6 @@ public class ExperimentResource extends AbstractResource {
 		this.expID = expID;
 	}
 
-    /**
-     *
-     * @return gatewayResource
-     */
-    public GatewayResource getGateway() {
-		return gateway;
-	}
-
-    /**
-     *
-     * @param gateway gateway
-     */
-    public void setGateway(GatewayResource gateway) {
-		this.gateway = gateway;
-	}
-
     public String getExecutionUser() {
         return executionUser;
     }
@@ -661,22 +730,6 @@ public class ExperimentResource extends AbstractResource {
         this.executionUser = executionUser;
     }
 
-    /**
-     *
-     * @return project
-     */
-    public ProjectResource getProject() {
-		return project;
-	}
-
-    /**
-     *
-     * @param project  project
-     */
-    public void setProject(ProjectResource project) {
-		this.project = project;
-	}
-
     public List<NotificationEmailResource> getNotificationEmails () throws RegistryException{
         List<NotificationEmailResource> emailResources = new ArrayList<NotificationEmailResource>();
         List<Resource> resources = get(ResourceType.NOTIFICATION_EMAIL);

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/GatewayResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/GatewayResource.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/GatewayResource.java
index d0cb0c4..b0070ee 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/GatewayResource.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/GatewayResource.java
@@ -118,15 +118,15 @@ public class GatewayResource extends AbstractResource {
         switch (type) {
             case PROJECT:
                 ProjectResource projectResource = new ProjectResource();
-                projectResource.setGateway(this);
+                projectResource.setGatewayId(gatewayId);
                 return projectResource;
             case EXPERIMENT:
                 ExperimentResource experimentResource =new ExperimentResource();
-                experimentResource.setGateway(this);
+                experimentResource.setGatewayId(gatewayId);
                 return experimentResource;
             case GATEWAY_WORKER:
                 WorkerResource workerResource = new WorkerResource();
-                workerResource.setGateway(this);
+                workerResource.setGatewayId(gatewayId);
                 return workerResource;
             default:
                 logger.error("Unsupported resource type for gateway resource.", new IllegalArgumentException());


[2/4] airavata git commit: some improvements to experiment-catalog

Posted by ch...@apache.org.
http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/JobDetailResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/JobDetailResource.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/JobDetailResource.java
index 6e6d2ee..4619c33 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/JobDetailResource.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/JobDetailResource.java
@@ -40,12 +40,26 @@ import java.util.List;
 public class JobDetailResource extends AbstractResource {
     private static final Logger logger = LoggerFactory.getLogger(JobDetailResource.class);
     private String jobId;
-    private TaskDetailResource taskDetailResource;
+    private String taskId;
     private String jobDescription;
     private Timestamp creationTime;
     private String computeResourceConsumed;
     private String jobName;
     private String workingDir;
+    private StatusResource jobStatus;
+    private List<ErrorDetailResource> errors;
+
+    public void setJobStatus(StatusResource jobStatus) {
+        this.jobStatus = jobStatus;
+    }
+
+    public List<ErrorDetailResource> getErrors() {
+        return errors;
+    }
+
+    public void setErrors(List<ErrorDetailResource> errors) {
+        this.errors = errors;
+    }
 
     public String getJobName() {
         return jobName;
@@ -71,12 +85,12 @@ public class JobDetailResource extends AbstractResource {
         this.jobId = jobId;
     }
 
-    public TaskDetailResource getTaskDetailResource() {
-        return taskDetailResource;
+    public String getTaskId() {
+        return taskId;
     }
 
-    public void setTaskDetailResource(TaskDetailResource taskDetailResource) {
-        this.taskDetailResource = taskDetailResource;
+    public void setTaskId(String taskId) {
+        this.taskId = taskId;
     }
 
     public String getJobDescription() {
@@ -273,16 +287,14 @@ public class JobDetailResource extends AbstractResource {
         EntityManager em = null;
         try {
             em = ResourceUtils.getEntityManager();
-            JobDetail existingJobDetail = em.find(JobDetail.class, new JobDetails_PK(jobId, taskDetailResource.getTaskId()));
+            JobDetail existingJobDetail = em.find(JobDetail.class, new JobDetails_PK(jobId, taskId));
             em.close();
 
             em = ResourceUtils.getEntityManager();
             em.getTransaction().begin();
             JobDetail jobDetail = new JobDetail();
-            TaskDetail taskDetail = em.find(TaskDetail.class, taskDetailResource.getTaskId());
             jobDetail.setJobId(jobId);
-            jobDetail.setTask(taskDetail);
-            jobDetail.setTaskId(taskDetailResource.getTaskId());
+            jobDetail.setTaskId(taskId);
             jobDetail.setCreationTime(creationTime);
             jobDetail.setJobName(jobName);
             jobDetail.setWorkingDir(workingDir);
@@ -292,8 +304,7 @@ public class JobDetailResource extends AbstractResource {
             jobDetail.setComputeResourceConsumed(computeResourceConsumed);
             if (existingJobDetail != null) {
                 existingJobDetail.setJobId(jobId);
-                existingJobDetail.setTask(taskDetail);
-                existingJobDetail.setTaskId(taskDetailResource.getTaskId());
+                existingJobDetail.setTaskId(taskId);
                 existingJobDetail.setCreationTime(creationTime);
                 if (jobDescription != null) {
                     existingJobDetail.setJobDescription(jobDescription.toCharArray());
@@ -320,7 +331,11 @@ public class JobDetailResource extends AbstractResource {
         }
     }
 
-    public StatusResource getJobStatus() throws RegistryException{
+    public StatusResource getJobStatus() {
+        return jobStatus;
+    }
+
+    public StatusResource getJobStatus1() throws RegistryException{
         List<Resource> resources = get(ResourceType.STATUS);
         for (Resource resource : resources) {
             StatusResource jobStatus = (StatusResource) resource;

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/NodeInputResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/NodeInputResource.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/NodeInputResource.java
index 4efb8a4..4e38472 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/NodeInputResource.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/NodeInputResource.java
@@ -38,7 +38,7 @@ import org.slf4j.LoggerFactory;
 public class NodeInputResource extends AbstractResource {
 	private static final Logger logger = LoggerFactory.getLogger(NodeInputResource.class);
 
-    private WorkflowNodeDetailResource nodeDetailResource;
+    private String nodeId;
     private String inputKey;
     private String dataType;
     private String metadata;
@@ -99,12 +99,12 @@ public class NodeInputResource extends AbstractResource {
         this.userFriendlyDesc = userFriendlyDesc;
     }
 
-    public WorkflowNodeDetailResource getNodeDetailResource() {
-        return nodeDetailResource;
+    public String getNodeId() {
+        return nodeId;
     }
 
-    public void setNodeDetailResource(WorkflowNodeDetailResource nodeDetailResource) {
-        this.nodeDetailResource = nodeDetailResource;
+    public void setNodeId(String nodeId) {
+        this.nodeId = nodeId;
     }
 
     public String getInputKey() {
@@ -175,15 +175,13 @@ public class NodeInputResource extends AbstractResource {
         EntityManager em = null;
         try {
             em = ResourceUtils.getEntityManager();
-            NodeInput existingInput = em.find(NodeInput.class, new NodeInput_PK(inputKey, nodeDetailResource.getNodeInstanceId()));
+            NodeInput existingInput = em.find(NodeInput.class, new NodeInput_PK(inputKey, nodeId));
             em.close();
 
             em = ResourceUtils.getEntityManager();
             em.getTransaction().begin();
             NodeInput nodeInput = new NodeInput();
-            WorkflowNodeDetail nodeDetail = em.find(WorkflowNodeDetail.class, nodeDetailResource.getNodeInstanceId());
-            nodeInput.setNodeDetails(nodeDetail);
-            nodeInput.setNodeId(nodeDetail.getNodeId());
+            nodeInput.setNodeId(nodeId);
             nodeInput.setInputKey(inputKey);
             nodeInput.setDataType(dataType);
             nodeInput.setValue(value);
@@ -197,8 +195,7 @@ public class NodeInputResource extends AbstractResource {
             nodeInput.setDataStaged(dataStaged);
 
             if (existingInput != null){
-                existingInput.setNodeDetails(nodeDetail);
-                existingInput.setNodeId(nodeDetail.getNodeId());
+                existingInput.setNodeId(nodeId);
                 existingInput.setInputKey(inputKey);
                 existingInput.setDataType(dataType);
                 existingInput.setValue(value);

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/NodeOutputResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/NodeOutputResource.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/NodeOutputResource.java
index ceb323b..24459b0 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/NodeOutputResource.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/NodeOutputResource.java
@@ -38,7 +38,7 @@ import org.slf4j.LoggerFactory;
 public class NodeOutputResource extends AbstractResource {
 	private static final Logger logger = LoggerFactory.getLogger(NodeOutputResource.class);
 	
-    private WorkflowNodeDetailResource nodeDetailResource;
+    private String nodeId;
     private String outputKey;
     private String dataType;
     private String value;
@@ -98,12 +98,12 @@ public class NodeOutputResource extends AbstractResource {
         this.dataNameLocation = dataNameLocation;
     }
 
-    public WorkflowNodeDetailResource getNodeDetailResource() {
-        return nodeDetailResource;
+    public String getNodeId() {
+        return nodeId;
     }
 
-    public void setNodeDetailResource(WorkflowNodeDetailResource nodeDetailResource) {
-        this.nodeDetailResource = nodeDetailResource;
+    public void setNodeId(String nodeId) {
+        this.nodeId = nodeId;
     }
 
     public String getOutputKey() {
@@ -159,15 +159,13 @@ public class NodeOutputResource extends AbstractResource {
         EntityManager em = null;
         try {
             em = ResourceUtils.getEntityManager();
-            NodeOutput existingOutput = em.find(NodeOutput.class, new NodeOutput_PK(outputKey, nodeDetailResource.getNodeInstanceId()));
+            NodeOutput existingOutput = em.find(NodeOutput.class, new NodeOutput_PK(outputKey, nodeId));
             em.close();
 
             em = ResourceUtils.getEntityManager();
             em.getTransaction().begin();
             NodeOutput nodeOutput = new NodeOutput();
-            WorkflowNodeDetail nodeDetail = em.find(WorkflowNodeDetail.class, nodeDetailResource.getNodeInstanceId());
-            nodeOutput.setNode(nodeDetail);
-            nodeOutput.setNodeId(nodeDetail.getNodeId());
+            nodeOutput.setNodeId(nodeId);
             nodeOutput.setOutputKey(outputKey);
             nodeOutput.setDataType(dataType);
             nodeOutput.setValue(value);
@@ -179,8 +177,7 @@ public class NodeOutputResource extends AbstractResource {
             nodeOutput.setSearchQuery(searchQuery);
 
             if (existingOutput != null) {
-                existingOutput.setNode(nodeDetail);
-                existingOutput.setNodeId(nodeDetail.getNodeId());
+                existingOutput.setNodeId(nodeId);
                 existingOutput.setOutputKey(outputKey);
                 existingOutput.setDataType(dataType);
                 existingOutput.setValue(value);

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/NotificationEmailResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/NotificationEmailResource.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/NotificationEmailResource.java
index 5ac864f..fc29b13 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/NotificationEmailResource.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/NotificationEmailResource.java
@@ -36,8 +36,8 @@ public class NotificationEmailResource extends AbstractResource {
     private static final Logger logger = LoggerFactory.getLogger(NotificationEmailResource.class);
 
     private int emailId = 0;
-    private ExperimentResource experimentResource;
-    private TaskDetailResource taskDetailResource;
+    private String experimentId;
+    private String taskId;
     private String emailAddress;
 
 
@@ -49,20 +49,20 @@ public class NotificationEmailResource extends AbstractResource {
         this.emailAddress = emailAddress;
     }
 
-    public ExperimentResource getExperimentResource() {
-        return experimentResource;
+    public String getExperimentId() {
+        return experimentId;
     }
 
-    public void setExperimentResource(ExperimentResource experimentResource) {
-        this.experimentResource = experimentResource;
+    public void setExperimentId(String experimentId) {
+        this.experimentId = experimentId;
     }
 
-    public TaskDetailResource getTaskDetailResource() {
-        return taskDetailResource;
+    public String getTaskId() {
+        return taskId;
     }
 
-    public void setTaskDetailResource(TaskDetailResource taskDetailResource) {
-        this.taskDetailResource = taskDetailResource;
+    public void setTaskId(String taskId) {
+        this.taskId = taskId;
     }
 
     public Resource create(ResourceType type) throws RegistryException {
@@ -97,14 +97,8 @@ public class NotificationEmailResource extends AbstractResource {
             }else {
                 notification_email = new Notification_Email();
             }
-            Experiment experiment = em.find(Experiment.class, experimentResource.getExpID());
-            notification_email.setExperiment(experiment);
-            notification_email.setExperiment_id(experiment.getExpId());
-            if (taskDetailResource != null){
-                TaskDetail taskDetail = em.find(TaskDetail.class, taskDetailResource.getTaskId());
-                notification_email.setTaskDetail(taskDetail);
-                notification_email.setTaskId(taskDetail.getTaskId());
-            }
+            notification_email.setExperiment_id(experimentId);
+            notification_email.setTaskId(taskId);
             notification_email.setEmailAddress(emailAddress);
             em.persist(notification_email);
             emailId = notification_email.getEmailId();

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ProjectResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ProjectResource.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ProjectResource.java
index 4dc4160..4d73de2 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ProjectResource.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ProjectResource.java
@@ -41,7 +41,7 @@ public class ProjectResource extends AbstractResource {
     private final static Logger logger = LoggerFactory.getLogger(ProjectResource.class);
     private String name;
     private String id;
-    private GatewayResource gateway;
+    private String gatewayId;
     private WorkerResource worker;
     private String description;
     private Timestamp creationTime;
@@ -54,27 +54,15 @@ public class ProjectResource extends AbstractResource {
 
     /**
      *
-     * @param worker gateway worker
-     * @param gateway gateway
-     * @param projectId project name
-     */
-    public ProjectResource(WorkerResource worker, GatewayResource gateway, String projectId) {
-        this.setWorker(worker);
-        this.setGateway(gateway);
-        this.id = projectId;
-    }
-
-    /**
-     *
      * @param type child resource type
      * @return child resource
      */
     public Resource create(ResourceType type) throws RegistryException {
         if (type == ResourceType.EXPERIMENT) {
             ExperimentResource experimentResource = new ExperimentResource();
-            experimentResource.setGateway(getGateway());
+            experimentResource.setGatewayId(gatewayId);
             experimentResource.setExecutionUser(worker.getUser());
-            experimentResource.setProject(this);
+            experimentResource.setProjectId(id);
             return experimentResource;
         } else if (type == ResourceType.PROJECT_USER){
             ProjectUserResource pr = new ProjectUserResource();
@@ -348,9 +336,7 @@ public class ProjectResource extends AbstractResource {
             Project project = new Project();
             project.setProject_id(id);
             project.setProject_name(name);
-            Gateway modelGateway = em.find(Gateway.class, gateway.getGatewayId());
-            project.setGateway(modelGateway);
-            project.setGateway_id(modelGateway.getGateway_id());
+            project.setGateway_id(gatewayId);
             Users user = em.find(Users.class, worker.getUser());
             project.setUsers(user);
             project.setUser_name(user.getUser_name());
@@ -359,8 +345,7 @@ public class ProjectResource extends AbstractResource {
 
             if (existingProject != null) {
                 existingProject.setProject_name(name);
-                existingProject.setGateway(modelGateway);
-                existingProject.setGateway_id(modelGateway.getGateway_id());
+                existingProject.setGateway_id(gatewayId);
                 existingProject.setUsers(user);
                 existingProject.setUser_name(user.getUser_name());
                 existingProject.setDescription(description);
@@ -425,21 +410,13 @@ public class ProjectResource extends AbstractResource {
 		this.worker = worker;
 	}
 
-    /**
-     *
-     * @return gateway resource
-     */
-    public GatewayResource getGateway() {
-		return gateway;
-	}
+    public String getGatewayId() {
+        return gatewayId;
+    }
 
-    /**
-     *
-     * @param gateway gateway resource
-     */
-    public void setGateway(GatewayResource gateway) {
-		this.gateway = gateway;
-	}
+    public void setGatewayId(String gatewayId) {
+        this.gatewayId = gatewayId;
+    }
 
     public String getDescription() {
         return description;

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/QosParamResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/QosParamResource.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/QosParamResource.java
index 6f906cd..f9a8b33 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/QosParamResource.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/QosParamResource.java
@@ -37,8 +37,8 @@ import java.util.List;
 public class QosParamResource extends AbstractResource {
     private static final Logger logger = LoggerFactory.getLogger(QosParamResource.class);
     private int  qosId;
-    private ExperimentResource experimentResource;
-    private TaskDetailResource taskDetailResource;
+    private String experimentId;
+    private String taskId;
     private String startExecutionAt;
     private String executeBefore;
     private int noOfRetries;
@@ -51,20 +51,20 @@ public class QosParamResource extends AbstractResource {
         this.qosId = qosId;
     }
 
-    public ExperimentResource getExperimentResource() {
-        return experimentResource;
+    public String getExperimentId() {
+        return experimentId;
     }
 
-    public void setExperimentResource(ExperimentResource experimentResource) {
-        this.experimentResource = experimentResource;
+    public void setExperimentId(String experimentId) {
+        this.experimentId = experimentId;
     }
 
-    public TaskDetailResource getTaskDetailResource() {
-        return taskDetailResource;
+    public String getTaskId() {
+        return taskId;
     }
 
-    public void setTaskDetailResource(TaskDetailResource taskDetailResource) {
-        this.taskDetailResource = taskDetailResource;
+    public void setTaskId(String taskId) {
+        this.taskId = taskId;
     }
 
     public String getStartExecutionAt() {
@@ -122,14 +122,8 @@ public class QosParamResource extends AbstractResource {
             em = ResourceUtils.getEntityManager();
             em.getTransaction().begin();
             QosParam qosParam = new QosParam();
-            Experiment experiment = em.find(Experiment.class, experimentResource.getExpID());
-            if (taskDetailResource != null) {
-                TaskDetail taskDetail = em.find(TaskDetail.class, taskDetailResource.getTaskId());
-                qosParam.setTaskId(taskDetailResource.getTaskId());
-                qosParam.setTask(taskDetail);
-            }
-            qosParam.setExpId(experimentResource.getExpID());
-            qosParam.setExperiment(experiment);
+            qosParam.setTaskId(taskId);
+            qosParam.setExpId(experimentId);
             qosParam.setStartExecutionAt(startExecutionAt);
             qosParam.setExecuteBefore(executeBefore);
             qosParam.setNoOfRetries(noOfRetries);

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/StatusResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/StatusResource.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/StatusResource.java
index 169e1c7..cecf925 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/StatusResource.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/StatusResource.java
@@ -36,10 +36,10 @@ import java.util.List;
 public class StatusResource extends AbstractResource {
     private static final Logger logger = LoggerFactory.getLogger(StatusResource.class);
     private int statusId = 0;
-    private ExperimentResource experimentResource;
-    private WorkflowNodeDetailResource workflowNodeDetail;
-    private DataTransferDetailResource dataTransferDetail;
-    private TaskDetailResource taskDetailResource;
+    private String experimentId;
+    private String nodeId;
+    private String transferId;
+    private String taskId;
     private String jobId;
     private String state;
     private Timestamp statusUpdateTime;
@@ -53,36 +53,36 @@ public class StatusResource extends AbstractResource {
         this.statusId = statusId;
     }
 
-    public ExperimentResource getExperimentResource() {
-        return experimentResource;
+    public String getExperimentId() {
+        return experimentId;
     }
 
-    public void setExperimentResource(ExperimentResource experimentResource) {
-        this.experimentResource = experimentResource;
+    public void setExperimentId(String experimentId) {
+        this.experimentId = experimentId;
     }
 
-    public WorkflowNodeDetailResource getWorkflowNodeDetail() {
-        return workflowNodeDetail;
+    public String getNodeId() {
+        return nodeId;
     }
 
-    public void setWorkflowNodeDetail(WorkflowNodeDetailResource workflowNodeDetail) {
-        this.workflowNodeDetail = workflowNodeDetail;
+    public void setNodeId(String nodeId) {
+        this.nodeId = nodeId;
     }
 
-    public DataTransferDetailResource getDataTransferDetail() {
-        return dataTransferDetail;
+    public String getTransferId() {
+        return transferId;
     }
 
-    public void setDataTransferDetail(DataTransferDetailResource dataTransferDetail) {
-        this.dataTransferDetail = dataTransferDetail;
+    public void setTransferId(String transferId) {
+        this.transferId = transferId;
     }
 
-    public TaskDetailResource getTaskDetailResource() {
-        return taskDetailResource;
+    public String getTaskId() {
+        return taskId;
     }
 
-    public void setTaskDetailResource(TaskDetailResource taskDetailResource) {
-        this.taskDetailResource = taskDetailResource;
+    public void setTaskId(String taskId) {
+        this.taskId = taskId;
     }
 
     public String getJobId() {
@@ -154,25 +154,11 @@ public class StatusResource extends AbstractResource {
             } else {
                 status = new Status();
             }
-            Experiment experiment = em.find(Experiment.class, experimentResource.getExpID());
-            if (taskDetailResource != null) {
-                TaskDetail taskDetail = em.find(TaskDetail.class, taskDetailResource.getTaskId());
-                status.setTask(taskDetail);
-                status.setTaskId(taskDetailResource.getTaskId());
-            }
-            if (workflowNodeDetail != null) {
-                WorkflowNodeDetail nodeDetail = em.find(WorkflowNodeDetail.class, workflowNodeDetail.getNodeInstanceId());
-                status.setNode(nodeDetail);
-                status.setNodeId(workflowNodeDetail.getNodeInstanceId());
-            }
-            if (dataTransferDetail != null) {
-                DataTransferDetail transferDetail = em.find(DataTransferDetail.class, dataTransferDetail.getTransferId());
-                status.setTransferDetail(transferDetail);
-                status.setTransferId(dataTransferDetail.getTransferId());
-            }
-            status.setExperiment(experiment);
+            status.setExpId(experimentId);
+            status.setTaskId(taskId);
+            status.setNodeId(nodeId);
+            status.setTransferId(transferId);
             status.setJobId(jobId);
-            status.setExpId(experimentResource.getExpID());
             status.setState(state);
             status.setStatusUpdateTime(statusUpdateTime);
             status.setStatusType(statusType);

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/TaskDetailResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/TaskDetailResource.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/TaskDetailResource.java
index 791c9f9..995704e 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/TaskDetailResource.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/TaskDetailResource.java
@@ -40,12 +40,90 @@ import java.util.List;
 public class TaskDetailResource extends AbstractResource {
     private static final Logger logger = LoggerFactory.getLogger(TaskDetailResource.class);
     private String taskId;
-    private WorkflowNodeDetailResource workflowNodeDetailResource;
+    private String nodeId;
     private Timestamp creationTime;
     private String applicationId;
     private String applicationVersion;
     private String applicationDeploymentId;
     private boolean enableEmailNotifications;
+    private List<ApplicationInputResource> applicationInputs;
+    private List<ApplicationOutputResource> applicationOutputs;
+    private ComputationSchedulingResource schedulingResource;
+    private AdvanceInputDataHandlingResource inputDataHandlingResource;
+    private AdvancedOutputDataHandlingResource outputDataHandlingResource;
+    private StatusResource taskStatus;
+    private List<JobDetailResource> jobDetailResources;
+    private List<DataTransferDetailResource> transferDetailResourceList;
+    private List<NotificationEmailResource> emailResourceList;
+    private List<ErrorDetailResource> errors;
+
+    public List<JobDetailResource> getJobDetailResources() {
+        return jobDetailResources;
+    }
+
+    public void setJobDetailResources(List<JobDetailResource> jobDetailResources) {
+        this.jobDetailResources = jobDetailResources;
+    }
+
+    public void setApplicationInputs(List<ApplicationInputResource> applicationInputs) {
+        this.applicationInputs = applicationInputs;
+    }
+
+    public void setApplicationOutputs(List<ApplicationOutputResource> applicationOutputs) {
+        this.applicationOutputs = applicationOutputs;
+    }
+
+    public ComputationSchedulingResource getSchedulingResource() {
+        return schedulingResource;
+    }
+
+    public void setSchedulingResource(ComputationSchedulingResource schedulingResource) {
+        this.schedulingResource = schedulingResource;
+    }
+
+    public AdvanceInputDataHandlingResource getInputDataHandlingResource() {
+        return inputDataHandlingResource;
+    }
+
+    public void setInputDataHandlingResource(AdvanceInputDataHandlingResource inputDataHandlingResource) {
+        this.inputDataHandlingResource = inputDataHandlingResource;
+    }
+
+    public AdvancedOutputDataHandlingResource getOutputDataHandlingResource() {
+        return outputDataHandlingResource;
+    }
+
+    public void setOutputDataHandlingResource(AdvancedOutputDataHandlingResource outputDataHandlingResource) {
+        this.outputDataHandlingResource = outputDataHandlingResource;
+    }
+
+    public void setTaskStatus(StatusResource taskStatus) {
+        this.taskStatus = taskStatus;
+    }
+
+    public List<DataTransferDetailResource> getTransferDetailResourceList() {
+        return transferDetailResourceList;
+    }
+
+    public void setTransferDetailResourceList(List<DataTransferDetailResource> transferDetailResourceList) {
+        this.transferDetailResourceList = transferDetailResourceList;
+    }
+
+    public List<NotificationEmailResource> getEmailResourceList() {
+        return emailResourceList;
+    }
+
+    public void setEmailResourceList(List<NotificationEmailResource> emailResourceList) {
+        this.emailResourceList = emailResourceList;
+    }
+
+    public List<ErrorDetailResource> getErrors() {
+        return errors;
+    }
+
+    public void setErrors(List<ErrorDetailResource> errors) {
+        this.errors = errors;
+    }
 
     public boolean isEnableEmailNotifications() {
         return enableEmailNotifications;
@@ -63,12 +141,12 @@ public class TaskDetailResource extends AbstractResource {
         this.taskId = taskId;
     }
 
-    public WorkflowNodeDetailResource getWorkflowNodeDetailResource() {
-        return workflowNodeDetailResource;
+    public String getNodeId() {
+        return nodeId;
     }
 
-    public void setWorkflowNodeDetailResource(WorkflowNodeDetailResource workflowNodeDetailResource) {
-        this.workflowNodeDetailResource = workflowNodeDetailResource;
+    public void setNodeId(String nodeId) {
+        this.nodeId = nodeId;
     }
 
     public Timestamp getCreationTime() {
@@ -100,47 +178,47 @@ public class TaskDetailResource extends AbstractResource {
        switch (type){
            case ERROR_DETAIL:
                ErrorDetailResource errorDetailResource = new ErrorDetailResource();
-               errorDetailResource.setTaskDetailResource(this);
+               errorDetailResource.setTaskId(taskId);
                return errorDetailResource;
            case NOTIFICATION_EMAIL:
                NotificationEmailResource emailResource = new NotificationEmailResource();
-               emailResource.setTaskDetailResource(this);
+               emailResource.setTaskId(taskId);
                return emailResource;
            case APPLICATION_INPUT:
                ApplicationInputResource applicationInputResource = new ApplicationInputResource();
-               applicationInputResource.setTaskDetailResource(this);
+               applicationInputResource.setTaskId(taskId);
                return applicationInputResource;
            case APPLICATION_OUTPUT:
                ApplicationOutputResource applicationOutputResource = new ApplicationOutputResource();
-               applicationOutputResource.setTaskDetailResource(this);
+               applicationOutputResource.setTaskId(taskId);
                return applicationOutputResource;
            case JOB_DETAIL:
                JobDetailResource jobDetailResource = new JobDetailResource();
-               jobDetailResource.setTaskDetailResource(this);
+               jobDetailResource.setTaskId(taskId);
                return jobDetailResource;
            case DATA_TRANSFER_DETAIL:
                DataTransferDetailResource dataTransferDetailResource = new DataTransferDetailResource();
-               dataTransferDetailResource.setTaskDetailResource(this);
+               dataTransferDetailResource.setTaskId(taskId);
                return dataTransferDetailResource;
            case STATUS:
                StatusResource statusResource = new StatusResource();
-               statusResource.setTaskDetailResource(this);
+               statusResource.setTaskId(taskId);
                return statusResource;
            case COMPUTATIONAL_RESOURCE_SCHEDULING:
                ComputationSchedulingResource schedulingResource = new ComputationSchedulingResource();
-               schedulingResource.setTaskDetailResource(this);
+               schedulingResource.setTaskId(taskId);
                return schedulingResource;
            case ADVANCE_INPUT_DATA_HANDLING:
                AdvanceInputDataHandlingResource inputDataHandlingResource = new AdvanceInputDataHandlingResource();
-               inputDataHandlingResource.setTaskDetailResource(this);
+               inputDataHandlingResource.setTaskId(taskId);
                return inputDataHandlingResource;
            case ADVANCE_OUTPUT_DATA_HANDLING:
                AdvancedOutputDataHandlingResource outputDataHandlingResource = new AdvancedOutputDataHandlingResource();
-               outputDataHandlingResource.setTaskDetailResource(this);
+               outputDataHandlingResource.setTaskId(taskId);
                return outputDataHandlingResource;
            case QOS_PARAM:
                QosParamResource qosParamResource = new QosParamResource();
-               qosParamResource.setTaskDetailResource(this);
+               qosParamResource.setTaskId(taskId);
                return qosParamResource;
            default:
                logger.error("Unsupported resource type for task detail resource.", new IllegalArgumentException());
@@ -513,13 +591,12 @@ public class TaskDetailResource extends AbstractResource {
             em.close();
             em = ResourceUtils.getEntityManager();
             em.getTransaction().begin();
-            WorkflowNodeDetail workflowNodeDetail = em.find(WorkflowNodeDetail.class, workflowNodeDetailResource.getNodeInstanceId());
             if (taskDetail != null) {
-            	updateTaskDetail(taskDetail, workflowNodeDetail);
+            	updateTaskDetail(taskDetail, nodeId);
                 em.merge(taskDetail);
             } else {
                 taskDetail = new TaskDetail();
-                updateTaskDetail(taskDetail, workflowNodeDetail);                
+                updateTaskDetail(taskDetail, nodeId);
                 em.persist(taskDetail);
             }
             em.getTransaction().commit();
@@ -536,11 +613,9 @@ public class TaskDetailResource extends AbstractResource {
         }
     }
 
-	private void updateTaskDetail(TaskDetail taskDetail,
-			WorkflowNodeDetail workflowNodeDetail) {
+	private void updateTaskDetail(TaskDetail taskDetail, String nodeId) {
 		taskDetail.setTaskId(taskId);
-		taskDetail.setNodeDetail(workflowNodeDetail);
-		taskDetail.setNodeId(workflowNodeDetailResource.getNodeInstanceId());
+		taskDetail.setNodeId(nodeId);
 		taskDetail.setCreationTime(creationTime);
 		taskDetail.setAppId(applicationId);
 		taskDetail.setAppVersion(applicationVersion);
@@ -548,7 +623,15 @@ public class TaskDetailResource extends AbstractResource {
 		taskDetail.setApplicationDeploymentId(getApplicationDeploymentId());
 	}
 
-    public List<ApplicationInputResource> getApplicationInputs() throws RegistryException{
+    public List<ApplicationInputResource> getApplicationInputs() {
+        return applicationInputs;
+    }
+
+    public List<ApplicationOutputResource> getApplicationOutputs() {
+        return applicationOutputs;
+    }
+
+    public List<ApplicationInputResource> getApplicationInputs1() throws RegistryException{
         List<ApplicationInputResource> applicationInputResources = new ArrayList<ApplicationInputResource>();
         List<Resource> resources = get(ResourceType.APPLICATION_INPUT);
         for (Resource resource : resources) {
@@ -558,7 +641,7 @@ public class TaskDetailResource extends AbstractResource {
         return applicationInputResources;
     }
 
-    public List<ApplicationOutputResource> getApplicationOutputs() throws RegistryException{
+    public List<ApplicationOutputResource> getApplicationOutputs1() throws RegistryException{
         List<ApplicationOutputResource> outputResources = new ArrayList<ApplicationOutputResource>();
         List<Resource> resources = get(ResourceType.APPLICATION_OUTPUT);
         for (Resource resource : resources) {
@@ -568,7 +651,11 @@ public class TaskDetailResource extends AbstractResource {
         return outputResources;
     }
 
-    public StatusResource getTaskStatus() throws RegistryException{
+    public StatusResource getTaskStatus() {
+        return taskStatus;
+    }
+
+    public StatusResource getTaskStatus1() throws RegistryException{
         List<Resource> resources = get(ResourceType.STATUS);
         for (Resource resource : resources) {
             StatusResource taskStatus = (StatusResource) resource;

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/Utils.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/Utils.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/Utils.java
index 24b4049..ae42089 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/Utils.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/Utils.java
@@ -31,6 +31,8 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.net.URI;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Collection;
 import java.util.Iterator;
 
@@ -380,8 +382,7 @@ public class Utils {
         if (o != null){
             projectResource.setId(o.getProject_id());
             projectResource.setName(o.getProject_name());
-            GatewayResource gatewayResource = (GatewayResource)createGateway(o.getGateway());
-            projectResource.setGateway(gatewayResource);
+            projectResource.setGatewayId(o.getGateway_id());
             Gateway_Worker gateway_worker = new Gateway_Worker();
             gateway_worker.setGateway(o.getGateway());
             gateway_worker.setUser(o.getUsers());
@@ -428,11 +429,10 @@ public class Utils {
      */
     private static Resource createGatewayWorker(Gateway_Worker o) {
         if (o != null){
-            GatewayResource gatewayResource = new GatewayResource(o.getGateway().getGateway_id());
-            gatewayResource.setDomain(o.getGateway().getGateway_name());
-            gatewayResource.setDomain(o.getGateway().getDomain());
-            gatewayResource.setEmailAddress(o.getGateway().getEmailAddress());
-            return new WorkerResource(o.getUser_name(), gatewayResource);
+            WorkerResource workerResource = new WorkerResource();
+            workerResource.setGatewayId(o.getGateway_id());
+            workerResource.setUser(o.getUser_name());
+            return workerResource;
         }
         return null;
     }
@@ -459,13 +459,9 @@ public class Utils {
     private static Resource createExperiment(Experiment o) {
         ExperimentResource experimentResource = new ExperimentResource();
         if (o != null){
-            GatewayResource gatewayResource = (GatewayResource)createGateway(o.getGateway());
-            experimentResource.setGateway(gatewayResource);
+            experimentResource.setGatewayId(o.getGatewayId());
             experimentResource.setExecutionUser(o.getExecutionUser());
-            if (o.getProject() != null){
-                ProjectResource projectResource = (ProjectResource)createProject(o.getProject());
-                experimentResource.setProject(projectResource);
-            }
+            experimentResource.setProjectId(o.getProjectID());
             experimentResource.setExpID(o.getExpId());
             experimentResource.setExpName(o.getExpName());
             experimentResource.setCreationTime(o.getCreationTime());
@@ -477,8 +473,39 @@ public class Utils {
             experimentResource.setWorkflowExecutionId(o.getWorkflowExecutionId());
             experimentResource.setEnableEmailNotifications(o.isAllowNotification());
             experimentResource.setGatewayExecutionId(o.getGatewayExecutionId());
-        }
+            if (o.getExperimentInputs() != null && !o.getExperimentInputs().isEmpty()){
+                experimentResource.setExperimentInputResources(getExperimentInputs(o.getExperimentInputs()));
+            }
+            if (o.getExperimentOutputs() != null && !o.getExperimentOutputs().isEmpty()){
+                experimentResource.setExperimentOutputputResources(getExperimentOutputs(o.getExperimentOutputs()));
+            }
+            if (o.getResourceScheduling() != null){
+                experimentResource.setComputationSchedulingResource((ComputationSchedulingResource)createComputationalScheduling(o.getResourceScheduling()));
+            }
+            if (o.getUserConfigurationData() != null){
+                experimentResource.setUserConfigDataResource((ConfigDataResource)createExConfigDataResource(o.getUserConfigurationData()));
+            }
+
+            if (o.getWorkflowNodeDetails() != null && !o.getWorkflowNodeDetails().isEmpty()){
+                experimentResource.setWorkflowNodeDetailResourceList(getWorkflowNodeLit(o.getWorkflowNodeDetails()));
+            }
+
+            if (o.getStateChangeList() != null && !o.getStateChangeList().isEmpty()){
+                experimentResource.setStateChangeList(getStateChangeList(o.getStateChangeList()));
+            }
+
+            if (o.getErrorDetails() != null && !o.getErrorDetails().isEmpty()){
+                experimentResource.setErrorDetailList(getErrorList(o.getErrorDetails()));
+            }
 
+            if (o.getExperimentStatus() != null){
+                experimentResource.setExperimentStatus((StatusResource)createStatusResource(o.getExperimentStatus()));
+            }
+
+            if (o.getNotificationEmails() != null && !o.getNotificationEmails().isEmpty()){
+                experimentResource.setEmailResourceList(getEmailList(o.getNotificationEmails()));
+            }
+        }
         return experimentResource;
     }
 
@@ -493,40 +520,127 @@ public class Utils {
             experimentSummaryResource.setExecutionUser(o.getExecutionUser());
             experimentSummaryResource.setExpID(o.getExpId());
             experimentSummaryResource.setExpName(o.getExpName());
-            experimentSummaryResource.setProjectID(o.getProjectId());
+            experimentSummaryResource.setProjectID(o.getProjectID());
             experimentSummaryResource.setCreationTime(o.getCreationTime());
             experimentSummaryResource.setDescription(o.getExpDesc());
             experimentSummaryResource.setApplicationId(o.getApplicationId());
 
-            Collection<Status> statusList = o.getStatuses();
-            if(statusList != null && statusList.size()>0){
-                Iterator<Status> statusIterator = statusList.iterator();
-                while(statusIterator.hasNext()){
-                    Status status = statusIterator.next();
-                    if(status.getStatusType().equals(StatusType.EXPERIMENT.toString())){
-                        StatusResource statusResource = new StatusResource();
-                        statusResource.setStatusId(status.getStatusId());
-                        statusResource.setJobId(status.getJobId());
-                        statusResource.setState(status.getState());
-                        statusResource.setStatusUpdateTime(status.getStatusUpdateTime());
-                        statusResource.setStatusType(status.getStatusType());
-                        experimentSummaryResource.setStatus(statusResource);
-                        break;
-                    }
-                }
+            Status experimentStatus = o.getExperimentStatus();
+            if(experimentStatus != null) {
+                StatusResource statusResource = new StatusResource();
+                statusResource.setStatusId(experimentStatus.getStatusId());
+                statusResource.setJobId(experimentStatus.getJobId());
+                statusResource.setState(experimentStatus.getState());
+                statusResource.setStatusUpdateTime(experimentStatus.getStatusUpdateTime());
+                statusResource.setStatusType(experimentStatus.getStatusType());
+                experimentSummaryResource.setStatus(statusResource);
             }
         }
 
         return experimentSummaryResource;
     }
 
+    private static List<ExperimentInputResource> getExperimentInputs(List<Experiment_Input> inputs){
+        List<ExperimentInputResource> inputResources = new ArrayList<ExperimentInputResource>();
+        for (Experiment_Input input : inputs){
+            inputResources.add((ExperimentInputResource)createExperimentInput(input));
+        }
+        return inputResources;
+    }
+
+    private static List<ExperimentOutputResource> getExperimentOutputs(List<Experiment_Output> outputs){
+        List<ExperimentOutputResource> outputResources = new ArrayList<>();
+        for (Experiment_Output output : outputs){
+            outputResources.add((ExperimentOutputResource) createExperimentOutput(output));
+        }
+        return outputResources;
+    }
+
+    private static List<NodeInputResource> getNodeInputs(List<NodeInput> inputs){
+        List<NodeInputResource> inputResources = new ArrayList<NodeInputResource>();
+        for (NodeInput input : inputs){
+            inputResources.add((NodeInputResource)createNodeInput(input));
+        }
+        return inputResources;
+    }
+
+    private static List<NodeOutputResource> getNodeOutputs(List<NodeOutput> outputs){
+        List<NodeOutputResource> outputResources = new ArrayList<>();
+        for (NodeOutput output : outputs){
+            outputResources.add((NodeOutputResource) createNodeOutput(output));
+        }
+        return outputResources;
+    }
+
+    private static List<ApplicationInputResource> getApplicationInputs(List<ApplicationInput> inputs){
+        List<ApplicationInputResource> inputResources = new ArrayList<ApplicationInputResource>();
+        for (ApplicationInput input : inputs){
+            inputResources.add((ApplicationInputResource)createApplicationInput(input));
+        }
+        return inputResources;
+    }
+
+    private static List<ApplicationOutputResource> getApplicationOutputs(List<ApplicationOutput> outputs){
+        List<ApplicationOutputResource> outputResources = new ArrayList<>();
+        for (ApplicationOutput output : outputs){
+            outputResources.add((ApplicationOutputResource) createApplicationOutput(output));
+        }
+        return outputResources;
+    }
+
+    private static List<WorkflowNodeDetailResource> getWorkflowNodeLit(List<WorkflowNodeDetail> nodes){
+        List<WorkflowNodeDetailResource> nodeList = new ArrayList<>();
+        for (WorkflowNodeDetail node : nodes){
+            nodeList.add((WorkflowNodeDetailResource) createWorkflowNodeDetail(node));
+        }
+        return nodeList;
+    }
+
+    private static List<StatusResource> getStateChangeList(List<Status> statusList){
+        List<StatusResource> changeList = new ArrayList<>();
+        for (Status status : statusList){
+            changeList.add((StatusResource) createStatusResource(status));
+        }
+        return changeList;
+    }
+
+    private static List<ErrorDetailResource> getErrorList(List<ErrorDetail> errorDetails){
+        List<ErrorDetailResource> errors = new ArrayList<>();
+        for (ErrorDetail error : errorDetails){
+            errors.add((ErrorDetailResource) createErrorDetail(error));
+        }
+        return errors;
+    }
+
+    private static List<JobDetailResource> getJobDetails(List<JobDetail> jobDetails){
+        List<JobDetailResource> resources = new ArrayList<>();
+        for (JobDetail jobDetail : jobDetails){
+            resources.add((JobDetailResource) createJobDetail(jobDetail));
+        }
+        return resources;
+    }
+
+    private static List<DataTransferDetailResource> getDTDetails(List<DataTransferDetail> dataTransferDetails){
+        List<DataTransferDetailResource> resources = new ArrayList<>();
+        for (DataTransferDetail detail : dataTransferDetails){
+            resources.add((DataTransferDetailResource) createDataTransferResource(detail));
+        }
+        return resources;
+    }
+
+    private static List<NotificationEmailResource> getEmailList(List<Notification_Email> emails){
+        List<NotificationEmailResource> emailResources = new ArrayList<>();
+        for (Notification_Email email : emails){
+            emailResources.add((NotificationEmailResource) createNotificationEmail(email));
+        }
+        return emailResources;
+    }
+
     private static Resource createNotificationEmail (Notification_Email o){
         NotificationEmailResource emailResource = new NotificationEmailResource();
         if (o != null){
-            ExperimentResource experimentResource = (ExperimentResource)createExperiment(o.getExperiment());
-            emailResource.setExperimentResource(experimentResource);
-            TaskDetailResource taskDetailResource =  (TaskDetailResource)createTaskDetail(o.getTaskDetail());
-            emailResource.setTaskDetailResource(taskDetailResource);
+            emailResource.setExperimentId(o.getExperiment_id());
+            emailResource.setTaskId(o.getTaskId());
             emailResource.setEmailAddress(o.getEmailAddress());
         }
         return emailResource;
@@ -535,8 +649,7 @@ public class Utils {
     private static Resource createExperimentInput (Experiment_Input o){
         ExperimentInputResource eInputResource = new ExperimentInputResource();
         if (o != null){
-            ExperimentResource experimentResource = (ExperimentResource)createExperiment(o.getExperiment());
-            eInputResource.setExperimentResource(experimentResource);
+            eInputResource.setExperimentId(o.getExperiment_id());
             eInputResource.setDataType(o.getDataType());
             eInputResource.setMetadata(o.getMetadata());
             eInputResource.setExperimentKey(o.getEx_key());
@@ -547,11 +660,9 @@ public class Utils {
             eInputResource.setRequired(o.isRequired());
             eInputResource.setRequiredToCMD(o.isRequiredToCMD());
             eInputResource.setDataStaged(o.isDataStaged());
-
             if (o.getValue() != null){
                 eInputResource.setValue(new String(o.getValue()));
             }
-
         }
         return eInputResource;
     }
@@ -559,8 +670,7 @@ public class Utils {
     private static Resource createExperimentOutput (Experiment_Output o){
         ExperimentOutputResource eOutputResource = new ExperimentOutputResource();
         if (o != null){
-            ExperimentResource experimentResource = (ExperimentResource)createExperiment(o.getExperiment());
-            eOutputResource.setExperimentResource(experimentResource);
+            eOutputResource.setExperimentId(o.getExperiment_id());
             eOutputResource.setExperimentKey(o.getEx_key());
             if (o.getValue() != null){
                 eOutputResource.setValue(new String(o.getValue()));
@@ -579,29 +689,85 @@ public class Utils {
     private static Resource createWorkflowNodeDetail (WorkflowNodeDetail o){
         WorkflowNodeDetailResource nodeDetailResource = new WorkflowNodeDetailResource();
         if (o != null){
-            ExperimentResource experimentResource = (ExperimentResource)createExperiment(o.getExperiment());
-            nodeDetailResource.setExperimentResource(experimentResource);
+            nodeDetailResource.setExperimentId(o.getExpId());
             nodeDetailResource.setCreationTime(o.getCreationTime());
             nodeDetailResource.setNodeInstanceId(o.getNodeId());
             nodeDetailResource.setNodeName(o.getNodeName());
             nodeDetailResource.setExecutionUnit(o.getExecutionUnit());
             nodeDetailResource.setExecutionUnitData(o.getExecutionUnitData());
+            if (o.getTaskDetails() != null && !o.getErrorDetails().isEmpty()){
+                nodeDetailResource.setTaskDetailResourceList(getTaskDetails(o.getTaskDetails()));
+            }
+
+            if (o.getNodeInputs() != null && !o.getNodeInputs().isEmpty()){
+                nodeDetailResource.setNodeInputs(getNodeInputs(o.getNodeInputs()));
+            }
+
+            if (o.getNodeOutputs() != null && !o.getNodeOutputs().isEmpty()){
+                nodeDetailResource.setNodeOutputs(getNodeOutputs(o.getNodeOutputs()));
+            }
 
+            if (o.getNodeStatus() != null){
+                nodeDetailResource.setNodeStatus((StatusResource) createStatusResource(o.getNodeStatus()));
+            }
+
+            if (o.getErrorDetails() != null && !o.getErrorDetails().isEmpty()){
+                nodeDetailResource.setErros(getErrorList(o.getErrorDetails()));
+            }
         }
         return nodeDetailResource;
     }
 
+    private static List<TaskDetailResource> getTaskDetails (List<TaskDetail> taskDetails){
+        List<TaskDetailResource> tasks = new ArrayList<>();
+        for (TaskDetail detail : taskDetails){
+            tasks.add((TaskDetailResource) createTaskDetail(detail));
+        }
+        return tasks;
+    }
+
     private static Resource createTaskDetail(TaskDetail o){
         TaskDetailResource taskDetailResource = new TaskDetailResource();
         if ( o != null){
-            WorkflowNodeDetailResource nodeDetailResource = (WorkflowNodeDetailResource)createWorkflowNodeDetail(o.getNodeDetail());
-            taskDetailResource.setWorkflowNodeDetailResource(nodeDetailResource);
+            taskDetailResource.setNodeId(o.getNodeId());
             taskDetailResource.setCreationTime(o.getCreationTime());
             taskDetailResource.setTaskId(o.getTaskId());
             taskDetailResource.setApplicationId(o.getAppId());
             taskDetailResource.setApplicationVersion(o.getAppVersion());
             taskDetailResource.setApplicationDeploymentId(o.getApplicationDeploymentId());
             taskDetailResource.setEnableEmailNotifications(o.isAllowNotification());
+            if (o.getApplicationInputs() != null && !o.getApplicationInputs().isEmpty()){
+                taskDetailResource.setApplicationInputs(getApplicationInputs(o.getApplicationInputs()));
+            }
+            if (o.getApplicationOutputs() != null && !o.getApplicationOutputs().isEmpty()){
+                taskDetailResource.setApplicationOutputs(getApplicationOutputs(o.getApplicationOutputs()));
+            }
+            if (o.getResourceScheduling() != null){
+                taskDetailResource.setSchedulingResource((ComputationSchedulingResource) createComputationalScheduling(o.getResourceScheduling()));
+
+            }
+            if (o.getInputDataHandling() != null){
+                taskDetailResource.setInputDataHandlingResource((AdvanceInputDataHandlingResource) createAdvancedInputDataResource(o.getInputDataHandling()));
+            }
+            if (o.getOutputDataHandling() != null){
+                taskDetailResource.setOutputDataHandlingResource((AdvancedOutputDataHandlingResource) createAdvancedOutputDataResource(o.getOutputDataHandling()));
+            }
+            if (o.getErrorDetails() != null && !o.getErrorDetails().isEmpty()){
+                taskDetailResource.setErrors(getErrorList(o.getErrorDetails()));
+            }
+            if (o.getTaskStatus() != null){
+                taskDetailResource.setTaskStatus((StatusResource) createStatusResource(o.getTaskStatus()));
+            }
+            if (o.getNotificationEmails() != null && !o.getNotificationEmails().isEmpty()){
+                taskDetailResource.setEmailResourceList(getEmailList(o.getNotificationEmails()));
+            }
+            if (o.getJobDetails() != null && !o.getJobDetails().isEmpty()){
+                taskDetailResource.setJobDetailResources(getJobDetails(o.getJobDetails()));
+            }
+            if (o.getDataTransferDetails() != null && !o.getDataTransferDetails().isEmpty()){
+                taskDetailResource.setTransferDetailResourceList(getDTDetails(o.getDataTransferDetails()));
+            }
+
         }
         return taskDetailResource;
     }
@@ -609,16 +775,9 @@ public class Utils {
     private static Resource createErrorDetail (ErrorDetail o){
         ErrorDetailResource errorDetailResource = new ErrorDetailResource();
         if (o != null){
-            ExperimentResource experimentResource = (ExperimentResource)createExperiment(o.getExperiment());
-            errorDetailResource.setExperimentResource(experimentResource);
-            if (o.getTask() != null){
-                TaskDetailResource taskDetailResource = (TaskDetailResource)createTaskDetail(o.getTask());
-                errorDetailResource.setTaskDetailResource(taskDetailResource);
-            }
-            if (o.getNodeDetails() != null){
-                WorkflowNodeDetailResource nodeDetailResource = (WorkflowNodeDetailResource)createWorkflowNodeDetail(o.getNodeDetails());
-                errorDetailResource.setNodeDetail(nodeDetailResource);
-            }
+            errorDetailResource.setExperimentId(o.getExpId());
+            errorDetailResource.setTaskId(o.getTaskId());
+            errorDetailResource.setNodeId(o.getNodeId());
             errorDetailResource.setErrorId(o.getErrorID());
             errorDetailResource.setJobId(o.getJobId());
             errorDetailResource.setCreationTime(o.getCreationTime());
@@ -638,8 +797,7 @@ public class Utils {
     private static Resource createApplicationInput (ApplicationInput o){
         ApplicationInputResource inputResource = new ApplicationInputResource();
         if (o != null){
-            TaskDetailResource taskDetailResource = (TaskDetailResource)createTaskDetail(o.getTask());
-            inputResource.setTaskDetailResource(taskDetailResource);
+            inputResource.setTaskId(o.getTaskId());
             inputResource.setInputKey(o.getInputKey());
             inputResource.setDataType(o.getDataType());
             inputResource.setAppArgument(o.getAppArgument());
@@ -660,8 +818,7 @@ public class Utils {
     private static Resource createApplicationOutput (ApplicationOutput o){
         ApplicationOutputResource outputResource = new ApplicationOutputResource();
         if (o != null){
-            TaskDetailResource taskDetailResource = (TaskDetailResource)createTaskDetail(o.getTask());
-            outputResource.setTaskDetailResource(taskDetailResource);
+            outputResource.setTaskId(o.getTaskId());
             outputResource.setDataType(o.getDataType());
             outputResource.setOutputKey(o.getOutputKey());
             if (o.getValue() != null){
@@ -680,8 +837,7 @@ public class Utils {
     private static Resource createNodeInput (NodeInput o){
         NodeInputResource inputResource = new NodeInputResource();
         if (o != null){
-            WorkflowNodeDetailResource nodeDetailResource = (WorkflowNodeDetailResource)createWorkflowNodeDetail(o.getNodeDetails());
-            inputResource.setNodeDetailResource(nodeDetailResource);
+            inputResource.setNodeId(o.getNodeId());
             inputResource.setInputKey(o.getInputKey());
             inputResource.setDataType(o.getDataType());
             inputResource.setValue(o.getValue());
@@ -700,8 +856,7 @@ public class Utils {
     private static Resource createNodeOutput (NodeOutput o){
         NodeOutputResource outputResource = new NodeOutputResource();
         if (o != null){
-            WorkflowNodeDetailResource nodeDetailResource = (WorkflowNodeDetailResource)createWorkflowNodeDetail(o.getNode());
-            outputResource.setNodeDetailResource(nodeDetailResource);
+            outputResource.setNodeId(o.getNodeId());
             outputResource.setDataType(o.getDataType());
             outputResource.setOutputKey(o.getOutputKey());
             outputResource.setValue(o.getValue());
@@ -719,8 +874,7 @@ public class Utils {
     private static Resource createJobDetail (JobDetail o){
         JobDetailResource jobDetailResource = new JobDetailResource();
         if (o != null){
-            TaskDetailResource taskDetailResource = (TaskDetailResource)createTaskDetail(o.getTask());
-            jobDetailResource.setTaskDetailResource(taskDetailResource);
+            jobDetailResource.setTaskId(o.getTaskId());
             if (o.getJobDescription() != null){
                 jobDetailResource.setJobDescription(new String(o.getJobDescription()));
             }
@@ -729,7 +883,8 @@ public class Utils {
             jobDetailResource.setComputeResourceConsumed(o.getComputeResourceConsumed());
             jobDetailResource.setJobName(o.getJobName());
             jobDetailResource.setWorkingDir(o.getWorkingDir());
-
+            jobDetailResource.setJobStatus((StatusResource)createStatusResource(o.getJobStatus()));
+            jobDetailResource.setErrors(getErrorList(o.getErrorDetails()));
         }
 
         return jobDetailResource;
@@ -738,14 +893,15 @@ public class Utils {
     private static Resource createDataTransferResource (DataTransferDetail o){
         DataTransferDetailResource transferDetailResource = new DataTransferDetailResource();
         if (o != null){
-            TaskDetailResource taskDetailResource = (TaskDetailResource)createTaskDetail(o.getTask());
-            transferDetailResource.setTaskDetailResource(taskDetailResource);
+            transferDetailResource.setTaskId(o.getTaskId());
             transferDetailResource.setTransferId(o.getTransferId());
             transferDetailResource.setCreationTime(o.getCreationTime());
             if (o.getTransferDesc() != null){
                 transferDetailResource.setTransferDescription(new String(o.getTransferDesc()));
             }
-
+            if (o.getDataTransferStatus() != null){
+                transferDetailResource.setDatatransferStatus((StatusResource)createStatusResource(o.getDataTransferStatus()));
+            }
         }
         return transferDetailResource;
     }
@@ -753,20 +909,10 @@ public class Utils {
     private static Resource createStatusResource (Status o){
         StatusResource statusResource = new StatusResource();
         if (o != null){
-            ExperimentResource experimentResource = (ExperimentResource)createExperiment(o.getExperiment());
-            statusResource.setExperimentResource(experimentResource);
-            if (o.getTask() != null){
-                TaskDetailResource taskDetailResource = (TaskDetailResource)createTaskDetail(o.getTask());
-                statusResource.setTaskDetailResource(taskDetailResource);
-            }
-            if (o.getNode() != null){
-                WorkflowNodeDetailResource nodeDetailResource = (WorkflowNodeDetailResource)createWorkflowNodeDetail(o.getNode());
-                statusResource.setWorkflowNodeDetail(nodeDetailResource);
-            }
-            if (o.getTransferDetail() != null){
-                DataTransferDetailResource transferDetailResource = (DataTransferDetailResource)createDataTransferResource(o.getTransferDetail());
-                statusResource.setDataTransferDetail(transferDetailResource);
-            }
+            statusResource.setExperimentId(o.getExpId());
+            statusResource.setTaskId(o.getTaskId());
+            statusResource.setNodeId(o.getNodeId());
+            statusResource.setTransferId(o.getTransferId());
             statusResource.setStatusId(o.getStatusId());
             statusResource.setJobId(o.getJobId());
             statusResource.setState(o.getState());
@@ -780,13 +926,25 @@ public class Utils {
     private static Resource createExConfigDataResource (ExperimentConfigData o){
         ConfigDataResource configDataResource = new ConfigDataResource();
         if (o != null){
-            ExperimentResource experimentResource = (ExperimentResource)createExperiment(o.getExperiment());
-            configDataResource.setExperimentResource(experimentResource);
+            configDataResource.setExperimentId(o.getExpId());
             configDataResource.setAiravataAutoSchedule(o.isAiravataAutoSchedule());
             configDataResource.setOverrideManualParams(o.isOverrideManualParams());
             configDataResource.setShareExp(o.isShareExp());
             configDataResource.setUserDn(o.getUserDn());
             configDataResource.setGenerateCert(o.isGenerateCert());
+            if (o.getOutputDataHandling() != null){
+                configDataResource.setAdvancedOutputDataHandlingResource((AdvancedOutputDataHandlingResource) createAdvancedOutputDataResource(o.getOutputDataHandling()));
+            }
+            if (o.getInputDataHandling() != null){
+                configDataResource.setAdvanceInputDataHandlingResource((AdvanceInputDataHandlingResource) createAdvancedInputDataResource(o.getInputDataHandling()));
+            }
+            if (o.getResourceScheduling() != null){
+                configDataResource.setComputationSchedulingResource((ComputationSchedulingResource) createComputationalScheduling(o.getResourceScheduling()));
+            }
+            if (o.getQosParam() != null){
+                configDataResource.setQosParamResource((QosParamResource) createQosParamResource(o.getQosParam()));
+            }
+
         }
         return configDataResource;
     }
@@ -794,12 +952,8 @@ public class Utils {
     private static Resource createComputationalScheduling (Computational_Resource_Scheduling o){
         ComputationSchedulingResource schedulingResource = new ComputationSchedulingResource();
         if (o != null){
-            ExperimentResource experimentResource = (ExperimentResource)createExperiment(o.getExperiment());
-            schedulingResource.setExperimentResource(experimentResource);
-            if (o.getTask() != null){
-                TaskDetailResource taskDetailResource = (TaskDetailResource)createTaskDetail(o.getTask());
-                schedulingResource.setTaskDetailResource(taskDetailResource);
-            }
+            schedulingResource.setExperimentId(o.getExpId());
+            schedulingResource.setTaskId(o.getTaskId());
             schedulingResource.setSchedulingId(o.getSchedulingId());
             schedulingResource.setResourceHostId(o.getResourceHostId());
             schedulingResource.setCpuCount(o.getCpuCount());
@@ -819,12 +973,8 @@ public class Utils {
     private static Resource createAdvancedInputDataResource (AdvancedInputDataHandling o){
         AdvanceInputDataHandlingResource dataHandlingResource = new AdvanceInputDataHandlingResource();
         if (o != null){
-            ExperimentResource experimentResource = (ExperimentResource)createExperiment(o.getExperiment());
-            dataHandlingResource.setExperimentResource(experimentResource);
-            if (o.getTask() != null){
-                TaskDetailResource taskDetailResource = (TaskDetailResource)createTaskDetail(o.getTask());
-                dataHandlingResource.setTaskDetailResource(taskDetailResource);
-            }
+            dataHandlingResource.setExperimentId(o.getExpId());
+            dataHandlingResource.setTaskId(o.getTaskId());
             dataHandlingResource.setDataHandlingId(o.getDataHandlingId());
             dataHandlingResource.setWorkingDirParent(o.getParentWorkingDir());
             dataHandlingResource.setWorkingDir(o.getWorkingDir());
@@ -838,12 +988,8 @@ public class Utils {
     private static Resource createAdvancedOutputDataResource (AdvancedOutputDataHandling o){
         AdvancedOutputDataHandlingResource dataHandlingResource = new AdvancedOutputDataHandlingResource();
         if (o != null){
-            ExperimentResource experimentResource = (ExperimentResource)createExperiment(o.getExperiment());
-            dataHandlingResource.setExperimentResource(experimentResource);
-            if (o.getTask() != null){
-                TaskDetailResource taskDetailResource = (TaskDetailResource)createTaskDetail(o.getTask());
-                dataHandlingResource.setTaskDetailResource(taskDetailResource);
-            }
+            dataHandlingResource.setExperimentId(o.getExpId());
+            dataHandlingResource.setTaskId(o.getTaskId());
             dataHandlingResource.setOutputDataHandlingId(o.getOutputDataHandlingId());
             dataHandlingResource.setOutputDataDir(o.getOutputDataDir());
             dataHandlingResource.setDataRegUrl(o.getDataRegUrl());
@@ -855,12 +1001,8 @@ public class Utils {
     private static Resource createQosParamResource (QosParam o){
         QosParamResource qosParamResource = new QosParamResource();
         if (o != null){
-            ExperimentResource experimentResource = (ExperimentResource)createExperiment(o.getExperiment());
-            qosParamResource.setExperimentResource(experimentResource);
-            if (o.getTask() != null){
-                TaskDetailResource taskDetailResource = (TaskDetailResource)createTaskDetail(o.getTask());
-                qosParamResource.setTaskDetailResource(taskDetailResource);
-            }
+            qosParamResource.setExperimentId(o.getExpId());
+            qosParamResource.setTaskId(o.getTaskId());
             qosParamResource.setQosId(o.getQosId());
             qosParamResource.setExecuteBefore(o.getExecuteBefore());
             qosParamResource.setStartExecutionAt(o.getStartExecutionAt());

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/WorkerResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/WorkerResource.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/WorkerResource.java
index 60b003f..a9f0b38 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/WorkerResource.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/WorkerResource.java
@@ -49,23 +49,23 @@ import java.util.UUID;
 public class WorkerResource extends AbstractResource {
     private final static Logger logger = LoggerFactory.getLogger(WorkerResource.class);
     private String user;
-	private GatewayResource gateway;
+	private String gatewayId;
 
-    /**
-     *
-     */
     public WorkerResource() {
     }
 
-    /**
-     *
-     * @param user username
-     * @param gateway  gatewayResource
-     */
-    public WorkerResource(String user, GatewayResource gateway) {
-		this.setUser(user);
-		this.gateway=gateway;
-	}
+    public WorkerResource(String user, String gatewayId) {
+        this.user = user;
+        this.gatewayId = gatewayId;
+    }
+
+    public String getGatewayId() {
+        return gatewayId;
+    }
+
+    public void setGatewayId(String gatewayId) {
+        this.gatewayId = gatewayId;
+    }
 
     /**
      * Gateway worker can create child data structures such as projects and user workflows
@@ -78,13 +78,13 @@ public class WorkerResource extends AbstractResource {
 			case PROJECT:
 				ProjectResource projectResource = new ProjectResource();
 				projectResource.setWorker(this);
-				projectResource.setGateway(gateway);
+				projectResource.setGatewayId(gatewayId);
 				result=projectResource;
 				break;
             case EXPERIMENT:
                 ExperimentResource experimentResource = new ExperimentResource();
                 experimentResource.setExecutionUser(user);
-                experimentResource.setGateway(gateway);
+                experimentResource.setGatewayId(gatewayId);
                 result = experimentResource;
                 break;
 			default:
@@ -259,9 +259,11 @@ public class WorkerResource extends AbstractResource {
                 case PROJECT:
                     generator = new QueryGenerator(PROJECT);
                     Users users = em.find(Users.class, getUser());
-                    Gateway gatewayModel = em.find(Gateway.class, gateway.getGatewayId());
+                    Gateway gatewayModel = em.find(Gateway.class, gatewayId);
                     generator.setParameter("users", users);
-                    generator.setParameter("gateway", gatewayModel);
+                    if (gatewayModel != null){
+                        generator.setParameter("gateway", gatewayModel);
+                    }
 
                     //ordering - only supported only by CREATION_TIME
                     if(orderByIdentifier != null && resultOrderType != null
@@ -334,7 +336,7 @@ public class WorkerResource extends AbstractResource {
         EntityManager em = null;
         try {
             em = ResourceUtils.getEntityManager();
-            Gateway_Worker existingWorker = em.find(Gateway_Worker.class, new Gateway_Worker_PK(gateway.getGatewayId(), user));
+            Gateway_Worker existingWorker = em.find(Gateway_Worker.class, new Gateway_Worker_PK(gatewayId, user));
             em.close();
 
             em = ResourceUtils.getEntityManager();
@@ -343,14 +345,11 @@ public class WorkerResource extends AbstractResource {
             Users existingUser = em.find(Users.class, this.user);
             gatewayWorker.setUser(existingUser);
             gatewayWorker.setUser_name(existingUser.getUser_name());
-            Gateway gatewaymodel = em.find(Gateway.class, gateway.getGatewayId());
-            gatewayWorker.setGateway(gatewaymodel);
-            gatewayWorker.setGateway_id(gatewaymodel.getGateway_id());
+            gatewayWorker.setGateway_id(gatewayId);
             if (existingWorker != null) {
                 existingWorker.setUser_name(existingUser.getUser_name());
                 existingWorker.setUser(existingUser);
-                existingWorker.setGateway(gatewaymodel);
-                existingWorker.setGateway_id(gatewaymodel.getGateway_id());
+                existingWorker.setGateway_id(gatewayId);
                 gatewayWorker = em.merge(existingWorker);
             } else {
                 em.persist(gatewayWorker);
@@ -388,22 +387,6 @@ public class WorkerResource extends AbstractResource {
 
     /**
      *
-     * @return gateway resource
-     */
-    public GatewayResource getGateway() {
-        return gateway;
-    }
-
-    /**
-     *
-     * @param gateway  gateway resource
-     */
-    public void setGateway(GatewayResource gateway) {
-        this.gateway = gateway;
-    }
-
-    /**
-     *
      * @param id  project id
      * @return whether the project is available under the user
      */

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/WorkflowNodeDetailResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/WorkflowNodeDetailResource.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/WorkflowNodeDetailResource.java
index 9d2869d..0775f77 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/WorkflowNodeDetailResource.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/WorkflowNodeDetailResource.java
@@ -39,19 +39,56 @@ import java.util.List;
 
 public class WorkflowNodeDetailResource extends AbstractResource {
     private static final Logger logger = LoggerFactory.getLogger(WorkflowNodeDetailResource.class);
-    private ExperimentResource experimentResource;
+    private String experimentId;
     private String nodeInstanceId;
     private Timestamp creationTime;
     private String nodeName;
     private String executionUnit;
     private String executionUnitData;
+    private List<TaskDetailResource> taskDetailResourceList;
+    private List<NodeInputResource> nodeInputs;
+    private List<NodeOutputResource> nodeOutputs;
+    private StatusResource nodeStatus;
+    private List<ErrorDetailResource> erros;
 
-    public ExperimentResource getExperimentResource() {
-        return experimentResource;
+    public List<TaskDetailResource> getTaskDetailResourceList() {
+        return taskDetailResourceList;
     }
 
-    public void setExperimentResource(ExperimentResource experimentResource) {
-        this.experimentResource = experimentResource;
+    public void setTaskDetailResourceList(List<TaskDetailResource> taskDetailResourceList) {
+        this.taskDetailResourceList = taskDetailResourceList;
+    }
+
+    public void setNodeInputs(List<NodeInputResource> nodeInputs) {
+        this.nodeInputs = nodeInputs;
+    }
+
+    public void setNodeOutputs(List<NodeOutputResource> nodeOutputs) {
+        this.nodeOutputs = nodeOutputs;
+    }
+
+    public StatusResource getNodeStatus() {
+        return nodeStatus;
+    }
+
+    public void setNodeStatus(StatusResource nodeStatus) {
+        this.nodeStatus = nodeStatus;
+    }
+
+    public List<ErrorDetailResource> getErros() {
+        return erros;
+    }
+
+    public void setErros(List<ErrorDetailResource> erros) {
+        this.erros = erros;
+    }
+
+    public String getExperimentId() {
+        return experimentId;
+    }
+
+    public void setExperimentId(String experimentId) {
+        this.experimentId = experimentId;
     }
 
     public String getNodeInstanceId() {
@@ -82,23 +119,23 @@ public class WorkflowNodeDetailResource extends AbstractResource {
         switch (type){
             case TASK_DETAIL:
                 TaskDetailResource taskDetailResource = new TaskDetailResource();
-                taskDetailResource.setWorkflowNodeDetailResource(this);
+                taskDetailResource.setNodeId(nodeInstanceId);
                 return taskDetailResource;
             case ERROR_DETAIL:
                 ErrorDetailResource errorDetailResource = new ErrorDetailResource();
-                errorDetailResource.setNodeDetail(this);
+                errorDetailResource.setNodeId(nodeInstanceId);;
                 return errorDetailResource;
             case NODE_INPUT:
                 NodeInputResource nodeInputResource = new NodeInputResource();
-                nodeInputResource.setNodeDetailResource(this);
+                nodeInputResource.setNodeId(nodeInstanceId);
                 return nodeInputResource;
             case NODE_OUTPUT:
                 NodeOutputResource nodeOutputResource = new NodeOutputResource();
-                nodeOutputResource.setNodeDetailResource(this);
+                nodeOutputResource.setNodeId(nodeInstanceId);
                 return nodeOutputResource;
             case STATUS:
                 StatusResource statusResource = new StatusResource();
-                statusResource.setWorkflowNodeDetail(this);
+                statusResource.setNodeId(nodeInstanceId);
                 return statusResource;
             default:
                 logger.error("Unsupported resource type for workflow node detail resource.", new IllegalArgumentException());
@@ -349,17 +386,14 @@ public class WorkflowNodeDetailResource extends AbstractResource {
             em.getTransaction().begin();
             WorkflowNodeDetail workflowNodeDetail = new WorkflowNodeDetail();
             workflowNodeDetail.setNodeId(nodeInstanceId);
-            Experiment experiment = em.find(Experiment.class, experimentResource.getExpID());
-            workflowNodeDetail.setExperiment(experiment);
-            workflowNodeDetail.setExpId(experimentResource.getExpID());
+            workflowNodeDetail.setExpId(experimentId);
             workflowNodeDetail.setCreationTime(creationTime);
             workflowNodeDetail.setNodeName(nodeName);
             workflowNodeDetail.setExecutionUnit(getExecutionUnit());
             workflowNodeDetail.setExecutionUnitData(getExecutionUnitData());
 
             if (existingNode != null) {
-                existingNode.setExperiment(experiment);
-                existingNode.setExpId(experimentResource.getExpID());
+                existingNode.setExpId(experimentId);
                 existingNode.setCreationTime(creationTime);
                 existingNode.setNodeName(nodeName);
                 existingNode.setExecutionUnit(getExecutionUnit());
@@ -383,7 +417,15 @@ public class WorkflowNodeDetailResource extends AbstractResource {
         }
     }
 
-    public List<NodeInputResource> getNodeInputs() throws RegistryException{
+    public List<NodeInputResource> getNodeInputs() {
+        return nodeInputs;
+    }
+
+    public List<NodeOutputResource> getNodeOutputs() {
+        return nodeOutputs;
+    }
+
+    public List<NodeInputResource> getNodeInputs1() throws RegistryException{
         List<NodeInputResource> nodeInputResourceList = new ArrayList<NodeInputResource>();
         List<Resource> resources = get(ResourceType.NODE_INPUT);
         for (Resource resource : resources) {
@@ -393,7 +435,7 @@ public class WorkflowNodeDetailResource extends AbstractResource {
         return nodeInputResourceList;
     }
 
-    public List<NodeOutputResource> getNodeOutputs() throws RegistryException{
+    public List<NodeOutputResource> getNodeOutputs1() throws RegistryException{
         List<NodeOutputResource> outputResources = new ArrayList<NodeOutputResource>();
         List<Resource> resources = get(ResourceType.NODE_OUTPUT);
         for (Resource resource : resources) {
@@ -421,12 +463,12 @@ public class WorkflowNodeDetailResource extends AbstractResource {
         List<Resource> resources = get(ResourceType.STATUS);
         for (Resource resource : resources) {
             StatusResource taskStatus = (StatusResource) resource;
-            if(taskStatus.getStatusType().equals(StatusType.TASK.toString()) && taskStatus.getTaskDetailResource().getTaskId().equals(taskId)){
+            if(taskStatus.getStatusType().equals(StatusType.TASK.toString()) && taskStatus.getTaskId().equals(taskId)){
                 if (taskStatus.getState() == null || taskStatus.getState().equals("") ){
                     taskStatus.setState("UNKNOWN");
                 }
                 return taskStatus;
-            } 
+            }
         }
         return null;
     }

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/utils/ThriftDataModelConversion.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/utils/ThriftDataModelConversion.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/utils/ThriftDataModelConversion.java
index 53b3919..28c5604 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/utils/ThriftDataModelConversion.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/utils/ThriftDataModelConversion.java
@@ -21,6 +21,7 @@
 
 package org.apache.airavata.persistance.registry.jpa.utils;
 
+import org.apache.airavata.common.utils.AiravataUtils;
 import org.apache.airavata.model.appcatalog.appinterface.DataType;
 import org.apache.airavata.model.appcatalog.appinterface.InputDataObjectType;
 import org.apache.airavata.model.appcatalog.appinterface.OutputDataObjectType;
@@ -84,9 +85,7 @@ public class ThriftDataModelConversion {
     public static Experiment getExperiment(ExperimentResource experimentResource) throws RegistryException {
         if (experimentResource != null){
             Experiment experiment = new Experiment();
-            if (experimentResource.getProject()!= null){
-                experiment.setProjectID(experimentResource.getProject().getId());
-            }
+            experiment.setProjectID(experimentResource.getProjectId());
             experiment.setExperimentID(experimentResource.getExpID());
             experiment.setCreationTime(experimentResource.getCreationTime().getTime());
             experiment.setUserName(experimentResource.getExecutionUser());
@@ -124,9 +123,8 @@ public class ThriftDataModelConversion {
             if (errorDetails!= null && !errorDetails.isEmpty()){
                 experiment.setErrors(getErrorDetailList(errorDetails));
             }
-            String expID = experimentResource.getExpID();
-            if (experimentResource.isExists(ResourceType.CONFIG_DATA, expID)){
-                ConfigDataResource userConfigData = experimentResource.getUserConfigData(expID);
+            if (experimentResource.isExists(ResourceType.CONFIG_DATA, experimentResource.getExpID())){
+                ConfigDataResource userConfigData = experimentResource.getUserConfigData(experimentResource.getExpID());
                 experiment.setUserConfigurationData(getUserConfigData(userConfigData));
             }
             return experiment;
@@ -385,7 +383,11 @@ public class ThriftDataModelConversion {
                 status.setState("UNKNOWN");
             }
             jobStatus.setJobState(JobState.valueOf(status.getState()));
-            jobStatus.setTimeOfStateChange(status.getStatusUpdateTime().getTime());
+            if (status.getStatusUpdateTime() == null){
+                jobStatus.setTimeOfStateChange(AiravataUtils.getCurrentTimestamp().getTime());
+            }else {
+                jobStatus.setTimeOfStateChange(status.getStatusUpdateTime().getTime());
+            }
             return jobStatus;
         }
         return null;
@@ -599,8 +601,9 @@ public class ThriftDataModelConversion {
             data.setShareExperimentPublicly(resource.isShareExp());
             data.setUserDN(resource.getUserDn());
             data.setGenerateCert(resource.isGenerateCert());
-            ExperimentResource experimentResource = resource.getExperimentResource();
-            String expID = experimentResource.getExpID();
+            String expID = resource.getExperimentId();
+            ExperimentResource experimentResource = new ExperimentResource();
+            experimentResource.setExpID(expID);
             if (experimentResource.isExists(ResourceType.COMPUTATIONAL_RESOURCE_SCHEDULING, expID)){
                 ComputationSchedulingResource computationScheduling = experimentResource.getComputationScheduling(expID);
                 data.setComputationalResourceScheduling(getComputationalResourceScheduling(computationScheduling));


[4/4] airavata git commit: some improvements to experiment-catalog

Posted by ch...@apache.org.
some improvements to experiment-catalog


Project: http://git-wip-us.apache.org/repos/asf/airavata/repo
Commit: http://git-wip-us.apache.org/repos/asf/airavata/commit/4476dfc1
Tree: http://git-wip-us.apache.org/repos/asf/airavata/tree/4476dfc1
Diff: http://git-wip-us.apache.org/repos/asf/airavata/diff/4476dfc1

Branch: refs/heads/master
Commit: 4476dfc1e91df23461ade3a7e3e70d7633bce51c
Parents: b67b532
Author: Chathuri Wimalasena <ch...@apache.org>
Authored: Mon Jun 1 22:07:00 2015 -0400
Committer: Chathuri Wimalasena <ch...@apache.org>
Committed: Mon Jun 1 22:07:00 2015 -0400

----------------------------------------------------------------------
 .../api/server/util/RegistryInitUtil.java       |   2 +-
 .../client/samples/CreateLaunchExperiment.java  |  14 +-
 .../main/resources/airavata-server.properties   |   1 +
 .../airavata/gfac/client/util/Initialize.java   |   2 +-
 .../gfac-application-specific-handlers/pom.xml  |   2 +-
 .../org/apache/airavata/gfac/Constants.java     |   2 +
 .../gfac/monitor/email/EmailBasedMonitor.java   |   2 +
 .../gfac/ssh/handler/SSHOutputHandler.java      |   4 +-
 modules/integration-tests/pom.xml               |   2 +-
 .../orchestrator/client/util/Initialize.java    |   2 +-
 .../orchestrator/core/util/Initialize.java      |   2 +-
 .../registry/jpa/impl/ExperimentRegistry.java   | 258 +++++++------
 .../registry/jpa/impl/ProjectRegistry.java      |   7 +-
 .../jpa/model/AdvancedInputDataHandling.java    |  16 -
 .../jpa/model/AdvancedOutputDataHandling.java   |  15 -
 .../registry/jpa/model/ApplicationInput.java    |   8 -
 .../registry/jpa/model/ApplicationOutput.java   |   8 -
 .../Computational_Resource_Scheduling.java      |  16 -
 .../registry/jpa/model/DataTransferDetail.java  |  12 +-
 .../registry/jpa/model/ErrorDetail.java         |  30 +-
 .../registry/jpa/model/Experiment.java          | 138 +++++--
 .../jpa/model/ExperimentConfigData.java         |  53 ++-
 .../registry/jpa/model/Experiment_Input.java    |   8 -
 .../registry/jpa/model/Experiment_Output.java   |   8 -
 .../registry/jpa/model/JobDetail.java           |  32 +-
 .../registry/jpa/model/NodeInput.java           |  10 +-
 .../registry/jpa/model/NodeOutput.java          |  10 +-
 .../registry/jpa/model/Notification_Email.java  |  18 +-
 .../registry/jpa/model/QosParam.java            |  16 -
 .../persistance/registry/jpa/model/Status.java  |  38 +-
 .../registry/jpa/model/TaskDetail.java          | 122 ++++++-
 .../registry/jpa/model/WorkflowNodeDetail.java  |  66 +++-
 .../AdvanceInputDataHandlingResource.java       |  38 +-
 .../AdvancedOutputDataHandlingResource.java     |  39 +-
 .../jpa/resources/ApplicationInputResource.java |  42 +--
 .../resources/ApplicationOutputResource.java    |  20 +-
 .../ComputationSchedulingResource.java          |  30 +-
 .../jpa/resources/ConfigDataResource.java       |  55 ++-
 .../resources/DataTransferDetailResource.java   |  38 +-
 .../jpa/resources/ErrorDetailResource.java      |  71 ++--
 .../jpa/resources/ExperimentInputResource.java  |  19 +-
 .../jpa/resources/ExperimentOutputResource.java |  20 +-
 .../jpa/resources/ExperimentResource.java       | 171 ++++++---
 .../registry/jpa/resources/GatewayResource.java |   6 +-
 .../jpa/resources/JobDetailResource.java        |  39 +-
 .../jpa/resources/NodeInputResource.java        |  19 +-
 .../jpa/resources/NodeOutputResource.java       |  19 +-
 .../resources/NotificationEmailResource.java    |  30 +-
 .../registry/jpa/resources/ProjectResource.java |  45 +--
 .../jpa/resources/QosParamResource.java         |  30 +-
 .../registry/jpa/resources/StatusResource.java  |  62 ++--
 .../jpa/resources/TaskDetailResource.java       | 139 +++++--
 .../registry/jpa/resources/Utils.java           | 360 +++++++++++++------
 .../registry/jpa/resources/WorkerResource.java  |  61 ++--
 .../resources/WorkflowNodeDetailResource.java   |  80 ++++-
 .../jpa/utils/ThriftDataModelConversion.java    |  21 +-
 .../jpa/ComputationalSchedulingTest.java        |   2 +-
 .../jpa/ExperimentInputResourceTest.java        |   4 +-
 .../jpa/ExperimentOutputResourceTest.java       |   4 +-
 .../registry/jpa/ExperimentResourceTest.java    |   2 +-
 .../registry/jpa/GatewayResourceTest.java       |   2 +-
 .../registry/jpa/TaskDetailResourceTest.java    |   6 +-
 .../jpa/WorkflowNodeDetailResourceTest.java     |   4 +-
 .../registry/jpa/util/Initialize.java           |   2 +-
 64 files changed, 1399 insertions(+), 1005 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/util/RegistryInitUtil.java
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/util/RegistryInitUtil.java b/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/util/RegistryInitUtil.java
index 2e610c5..da6f87b 100644
--- a/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/util/RegistryInitUtil.java
+++ b/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/util/RegistryInitUtil.java
@@ -112,7 +112,7 @@ public class RegistryInitUtil {
                 if (!workerResource.isExists(ResourceType.PROJECT, DEFAULT_PROJECT_NAME)){
                     projectResource = workerResource.createProject(DEFAULT_PROJECT_NAME);
                     projectResource.setName(DEFAULT_PROJECT_NAME);
-                    projectResource.setGateway(gateway);
+                    projectResource.setGatewayId(gateway.getGatewayId());
                     projectResource.save();
                 }
 

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/airavata-api/airavata-client-sdks/java-client-samples/src/main/java/org/apache/airavata/client/samples/CreateLaunchExperiment.java
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-client-sdks/java-client-samples/src/main/java/org/apache/airavata/client/samples/CreateLaunchExperiment.java b/airavata-api/airavata-client-sdks/java-client-samples/src/main/java/org/apache/airavata/client/samples/CreateLaunchExperiment.java
index cd2fc7a..ea57730 100644
--- a/airavata-api/airavata-client-sdks/java-client-samples/src/main/java/org/apache/airavata/client/samples/CreateLaunchExperiment.java
+++ b/airavata-api/airavata-client-sdks/java-client-samples/src/main/java/org/apache/airavata/client/samples/CreateLaunchExperiment.java
@@ -57,7 +57,7 @@ public class CreateLaunchExperiment {
     private static String echoAppId = "Echo_54324c70-8e89-4bb6-b77f-b0b274c3a2ed";
     private static String mpiAppId = "HelloMPI_bfd56d58-6085-4b7f-89fc-646576830518";
     private static String wrfAppId = "WRF_7ad5da38-c08b-417c-a9ea-da9298839762";
-    private static String amberAppId = "Amber_cb54b269-cf79-4276-8dbb-2ec16b759cc6";
+    private static String amberAppId = "Amber_357ba0ea-038c-4f14-b5f3-16bab331031b";
     private static String gromacsAppId = "GROMACS_05622038-9edd-4cb1-824e-0b7cb993364b";
     private static String espressoAppId = "ESPRESSO_10cc2820-5d0b-4c63-9546-8a8b595593c1";
     private static String lammpsAppId = "LAMMPS_2472685b-8acf-497e-aafe-cc66fe5f4cb6";
@@ -82,7 +82,7 @@ public class CreateLaunchExperiment {
         airavataClient = AiravataClientFactory.createAiravataClient(THRIFT_SERVER_HOST, THRIFT_SERVER_PORT);
         System.out.println("API version is " + airavataClient.getAPIVersion());
 //        registerApplications(); // run this only the first time
-//        createAndLaunchExp();
+        createAndLaunchExp();
     }
 
     private static String fsdResourceId;
@@ -162,12 +162,12 @@ public class CreateLaunchExperiment {
 //                final String expId = createMPIExperimentForFSD(airavataClient);
 //               final String expId = createEchoExperimentForStampede(airavataClient);
 //                final String expId = createEchoExperimentForTrestles(airavataClient);
-                final String expId = createExperimentEchoForLocalHost(airavataClient);
+//                final String expId = createExperimentEchoForLocalHost(airavataClient);
 //                final String expId = createExperimentWRFTrestles(airavataClient);
 //                final String expId = createExperimentForBR2(airavataClient);
 //                final String expId = createExperimentForBR2Amber(airavataClient);
 //                final String expId = createExperimentWRFStampede(airavataClient);
-//                final String expId = createExperimentForStampedeAmber(airavataClient);
+                final String expId = createExperimentForStampedeAmber(airavataClient);
 //                String expId = createExperimentForTrestlesAmber(airavataClient);
 //                final String expId = createExperimentGROMACSStampede(airavataClient);
 //                final String expId = createExperimentESPRESSOStampede(airavataClient);
@@ -1311,11 +1311,11 @@ public class CreateLaunchExperiment {
 //			}
             for (InputDataObjectType inputDataObjectType : exInputs) {
                 if (inputDataObjectType.getName().equalsIgnoreCase("Heat_Restart_File")) {
-                    inputDataObjectType.setValue("/Users/lginnali/Downloads/02_Heat.rst");
+                    inputDataObjectType.setValue("/Users/chathuri/dev/airavata/source/php/inputs/AMBER_FILES/02_Heat.rst");
                 } else if (inputDataObjectType.getName().equalsIgnoreCase("Production_Control_File")) {
-                    inputDataObjectType.setValue("/Users/lginnali/Downloads/03_Prod.in");
+                    inputDataObjectType.setValue("/Users/chathuri/dev/airavata/source/php/inputs/AMBER_FILES/03_Prod.in");
                 } else if (inputDataObjectType.getName().equalsIgnoreCase("Parameter_Topology_File")) {
-                    inputDataObjectType.setValue("/Users/lginnali/Downloads/prmtop");
+                    inputDataObjectType.setValue("/Users/chathuri/dev/airavata/source/php/inputs/AMBER_FILES/prmtop");
                 }
             }
 

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/configuration/server/src/main/resources/airavata-server.properties
----------------------------------------------------------------------
diff --git a/modules/configuration/server/src/main/resources/airavata-server.properties b/modules/configuration/server/src/main/resources/airavata-server.properties
index 56a8bd1..e617555 100644
--- a/modules/configuration/server/src/main/resources/airavata-server.properties
+++ b/modules/configuration/server/src/main/resources/airavata-server.properties
@@ -48,6 +48,7 @@ default.registry.user=admin
 default.registry.password=admin
 default.registry.password.hash.method=SHA
 default.registry.gateway=php_reference_gateway
+output.location=/var/www/portal/experimentData/
 
 #ip=127.0.0.1
 

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/gfac/airavata-gfac-service/src/test/java/org/apache/airavata/gfac/client/util/Initialize.java
----------------------------------------------------------------------
diff --git a/modules/gfac/airavata-gfac-service/src/test/java/org/apache/airavata/gfac/client/util/Initialize.java b/modules/gfac/airavata-gfac-service/src/test/java/org/apache/airavata/gfac/client/util/Initialize.java
index 6f3f792..651f414 100644
--- a/modules/gfac/airavata-gfac-service/src/test/java/org/apache/airavata/gfac/client/util/Initialize.java
+++ b/modules/gfac/airavata-gfac-service/src/test/java/org/apache/airavata/gfac/client/util/Initialize.java
@@ -152,7 +152,7 @@ public class Initialize {
             workerResource.save();
             
             ProjectResource projectResource = (ProjectResource)workerResource.create(ResourceType.PROJECT);
-            projectResource.setGateway(gatewayResource);
+            projectResource.setGatewayId(gatewayResource.getGatewayId());
             projectResource.setId("default");
             projectResource.setName("default");
             projectResource.setWorker(workerResource);

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/gfac/gfac-application-specific-handlers/pom.xml
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-application-specific-handlers/pom.xml b/modules/gfac/gfac-application-specific-handlers/pom.xml
index 0254300..801313d 100644
--- a/modules/gfac/gfac-application-specific-handlers/pom.xml
+++ b/modules/gfac/gfac-application-specific-handlers/pom.xml
@@ -12,7 +12,7 @@
         <dependency>
             <groupId>org.apache.airavata</groupId>
             <artifactId>airavata-gfac-core</artifactId>
-            <version>0.15-SNAPSHOT</version>
+            <version>${project.version}</version>
         </dependency>
     </dependencies>
 

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/Constants.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/Constants.java b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/Constants.java
index 5811251..73ff677 100644
--- a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/Constants.java
+++ b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/Constants.java
@@ -76,5 +76,7 @@ public class Constants {
     public static final String PROPERTY = "property";
     public static final String NAME = "name";
     public static final String VALUE = "value";
+    public static final String OUTPUT_DATA_DIR = "output.location";
+
 
 }

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/gfac/gfac-monitor/gfac-email-monitor/src/main/java/org/apache/airavata/gfac/monitor/email/EmailBasedMonitor.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-monitor/gfac-email-monitor/src/main/java/org/apache/airavata/gfac/monitor/email/EmailBasedMonitor.java b/modules/gfac/gfac-monitor/gfac-email-monitor/src/main/java/org/apache/airavata/gfac/monitor/email/EmailBasedMonitor.java
index 07934a4..e418774 100644
--- a/modules/gfac/gfac-monitor/gfac-email-monitor/src/main/java/org/apache/airavata/gfac/monitor/email/EmailBasedMonitor.java
+++ b/modules/gfac/gfac-monitor/gfac-email-monitor/src/main/java/org/apache/airavata/gfac/monitor/email/EmailBasedMonitor.java
@@ -134,6 +134,7 @@ public class EmailBasedMonitor implements Runnable{
     }
 
     private ResourceJobManagerType getJobMonitorType(String addressStr) throws AiravataException {
+        System.out.println("*********** address ******** : " + addressStr);
         switch (addressStr) {
             case "pbsconsult@sdsc.edu":   // trestles , gordan
             case "adm@trident.bigred2.uits.iu.edu":  // bigred2
@@ -142,6 +143,7 @@ public class EmailBasedMonitor implements Runnable{
                 return ResourceJobManagerType.PBS;
             case "SDSC Admin <sl...@comet-fe3.sdsc.edu>": // comet
             case "slurm@batch1.stampede.tacc.utexas.edu": // stampede
+            case "slurm user <sl...@tempest.dsc.soic.indiana.edu>":
                 return ResourceJobManagerType.SLURM;
 //            case "lsf":
 //                return ResourceJobManagerType.LSF;

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/SSHOutputHandler.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/SSHOutputHandler.java b/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/SSHOutputHandler.java
index f9eb1ef..f7fd2f4 100644
--- a/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/SSHOutputHandler.java
+++ b/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/SSHOutputHandler.java
@@ -20,6 +20,8 @@
 */
 package org.apache.airavata.gfac.ssh.handler;
 
+import org.apache.airavata.common.utils.ServerSettings;
+import org.apache.airavata.gfac.Constants;
 import org.apache.airavata.gfac.GFacException;
 import org.apache.airavata.gfac.core.context.JobExecutionContext;
 import org.apache.airavata.gfac.core.handler.AbstractHandler;
@@ -90,7 +92,7 @@ public class SSHOutputHandler extends AbstractHandler {
             String timeStampedExperimentID = GFacUtils.createUniqueNameWithDate(jobExecutionContext.getExperimentID());
 
             TaskDetails taskData = jobExecutionContext.getTaskData();
-            String outputDataDir = null;
+            String outputDataDir = ServerSettings.getSetting(Constants.OUTPUT_DATA_DIR, File.separator + "tmp");
             File localStdOutFile;
             File localStdErrFile;
             //FIXME: AdvancedOutput is remote location and third party transfer should work to make this work 

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/integration-tests/pom.xml
----------------------------------------------------------------------
diff --git a/modules/integration-tests/pom.xml b/modules/integration-tests/pom.xml
index 087c085..770c511 100644
--- a/modules/integration-tests/pom.xml
+++ b/modules/integration-tests/pom.xml
@@ -12,7 +12,7 @@
     <parent>
         <groupId>org.apache.airavata</groupId>
         <artifactId>airavata</artifactId>
-        <version>0.15-SNAPSHOT</version>
+        <version>0.16-SNAPSHOT</version>
         <relativePath>../../pom.xml</relativePath>
     </parent>
 

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/orchestrator/airavata-orchestrator-service/src/test/java/org/apache/airavata/orchestrator/client/util/Initialize.java
----------------------------------------------------------------------
diff --git a/modules/orchestrator/airavata-orchestrator-service/src/test/java/org/apache/airavata/orchestrator/client/util/Initialize.java b/modules/orchestrator/airavata-orchestrator-service/src/test/java/org/apache/airavata/orchestrator/client/util/Initialize.java
index a9eb5a8..c827fc4 100644
--- a/modules/orchestrator/airavata-orchestrator-service/src/test/java/org/apache/airavata/orchestrator/client/util/Initialize.java
+++ b/modules/orchestrator/airavata-orchestrator-service/src/test/java/org/apache/airavata/orchestrator/client/util/Initialize.java
@@ -152,7 +152,7 @@ public class Initialize {
             workerResource.save();
             
             ProjectResource projectResource = (ProjectResource)workerResource.create(ResourceType.PROJECT);
-            projectResource.setGateway(gatewayResource);
+            projectResource.setGatewayId(gatewayResource.getGatewayId());
             projectResource.setId("default");
             projectResource.setName("default");
             projectResource.setWorker(workerResource);

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/orchestrator/orchestrator-core/src/test/java/org/apache/airavata/orchestrator/core/util/Initialize.java
----------------------------------------------------------------------
diff --git a/modules/orchestrator/orchestrator-core/src/test/java/org/apache/airavata/orchestrator/core/util/Initialize.java b/modules/orchestrator/orchestrator-core/src/test/java/org/apache/airavata/orchestrator/core/util/Initialize.java
index 29a8f2c..e6230d8 100644
--- a/modules/orchestrator/orchestrator-core/src/test/java/org/apache/airavata/orchestrator/core/util/Initialize.java
+++ b/modules/orchestrator/orchestrator-core/src/test/java/org/apache/airavata/orchestrator/core/util/Initialize.java
@@ -152,7 +152,7 @@ public class Initialize {
             workerResource.save();
             
             ProjectResource projectResource = (ProjectResource)workerResource.create(ResourceType.PROJECT);
-            projectResource.setGateway(gatewayResource);
+            projectResource.setGatewayId(gatewayResource.getGatewayId());
             projectResource.setId("default");
             projectResource.setName("default");
             projectResource.setWorker(workerResource);

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/impl/ExperimentRegistry.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/impl/ExperimentRegistry.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/impl/ExperimentRegistry.java
index 5b63641..bc9bfaf 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/impl/ExperimentRegistry.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/impl/ExperimentRegistry.java
@@ -70,16 +70,14 @@ public class ExperimentRegistry {
             experimentResource.setExpID(experimentID);
             experimentResource.setExpName(experiment.getName());
             experimentResource.setExecutionUser(experiment.getUserName());
-            GatewayResource gateway = (GatewayResource)ResourceUtils.getGateway(gatewayId);
-            experimentResource.setGateway(gateway);
+            experimentResource.setGatewayId(gatewayId);
             experimentResource.setGatewayExecutionId(experiment.getGatewayExecutionId());
             experimentResource.setEnableEmailNotifications(experiment.isEnableEmailNotification());
             if (!workerResource.isProjectExists(experiment.getProjectID())) {
                 logger.error("Project does not exist in the system..");
                 throw new Exception("Project does not exist in the system, Please create the project first...");
             }
-            ProjectResource project = workerResource.getProject(experiment.getProjectID());
-            experimentResource.setProject(project);
+            experimentResource.setProjectId(experiment.getProjectID());
             experimentResource.setCreationTime(AiravataUtils.getTime(experiment.getCreationTime()));
             experimentResource.setDescription(experiment.getDescription());
             experimentResource.setApplicationId(experiment.getApplicationId());
@@ -93,7 +91,7 @@ public class ExperimentRegistry {
             if (emailAddresses != null && !emailAddresses.isEmpty()){
                 for (String email : emailAddresses){
                     NotificationEmailResource emailResource = new NotificationEmailResource();
-                    emailResource.setExperimentResource(experimentResource);
+                    emailResource.setExperimentId(experimentID);
                     emailResource.setEmailAddress(email);
                     emailResource.save();
                 }
@@ -150,7 +148,7 @@ public class ExperimentRegistry {
         try {
             ExperimentResource experiment = gatewayResource.getExperiment(experimentID);
             ConfigDataResource configData = (ConfigDataResource) experiment.create(ResourceType.CONFIG_DATA);
-            configData.setExperimentResource(experiment);
+            configData.setExperimentId(experimentID);
             configData.setAiravataAutoSchedule(configurationData.isAiravataAutoSchedule());
             configData.setOverrideManualParams(configurationData.isOverrideManualScheduledParams());
             configData.setShareExp(configurationData.isShareExperimentPublicly());
@@ -187,12 +185,15 @@ public class ExperimentRegistry {
             QosParamResource qosr = new QosParamResource();
             if (resource instanceof ExperimentResource) {
                 ExperimentResource experiment = (ExperimentResource) resource;
-                qosr.setExperimentResource(experiment);
+                qosr.setExperimentId(experiment.getExpID());
             }
             if (resource instanceof TaskDetailResource) {
                 TaskDetailResource taskDetailResource = (TaskDetailResource) resource;
-                qosr.setTaskDetailResource(taskDetailResource);
-                qosr.setExperimentResource(taskDetailResource.getWorkflowNodeDetailResource().getExperimentResource());
+                qosr.setTaskId(taskDetailResource.getTaskId());
+                String nodeId = taskDetailResource.getNodeId();
+                ExperimentResource experimentResource = new ExperimentResource();
+                WorkflowNodeDetailResource workflowNode = experimentResource.getWorkflowNode(nodeId);
+                qosr.setExperimentId(workflowNode.getExperimentId());
             }
             qosr.setStartExecutionAt(qosParams.getStartExecutionAt());
             qosr.setExecuteBefore(qosParams.getExecuteBefore());
@@ -210,12 +211,15 @@ public class ExperimentRegistry {
         try {
             if (resource instanceof ExperimentResource) {
                 ExperimentResource experiment = (ExperimentResource) resource;
-                adodh.setExperimentResource(experiment);
+                adodh.setExperimentId(experiment.getExpID());
             }
             if (resource instanceof TaskDetailResource) {
                 TaskDetailResource taskDetailResource = (TaskDetailResource) resource;
-                adodh.setTaskDetailResource(taskDetailResource);
-                adodh.setExperimentResource(taskDetailResource.getWorkflowNodeDetailResource().getExperimentResource());
+                String nodeId = taskDetailResource.getNodeId();
+                ExperimentResource experimentResource = new ExperimentResource();
+                WorkflowNodeDetailResource workflowNode = experimentResource.getWorkflowNode(nodeId);
+                adodh.setExperimentId(workflowNode.getExperimentId());
+                adodh.setTaskId(taskDetailResource.getTaskId());
             }
             adodh.setOutputDataDir(outputDataHandling.getOutputDataDir());
             adodh.setDataRegUrl(outputDataHandling.getDataRegistryURL());
@@ -233,12 +237,15 @@ public class ExperimentRegistry {
         try {
             if (resource instanceof ExperimentResource) {
                 ExperimentResource experiment = (ExperimentResource) resource;
-                adidh.setExperimentResource(experiment);
+                adidh.setExperimentId(experiment.getExpID());
             }
             if (resource instanceof TaskDetailResource) {
                 TaskDetailResource taskDetailResource = (TaskDetailResource) resource;
-                adidh.setTaskDetailResource(taskDetailResource);
-                adidh.setExperimentResource(taskDetailResource.getWorkflowNodeDetailResource().getExperimentResource());
+                String nodeId = taskDetailResource.getNodeId();
+                ExperimentResource experimentResource = new ExperimentResource();
+                WorkflowNodeDetailResource workflowNode = experimentResource.getWorkflowNode(nodeId);
+                adidh.setExperimentId(workflowNode.getExperimentId());
+                adidh.setTaskId(taskDetailResource.getTaskId());
             }
             adidh.setWorkingDir(inputDataHandling.getUniqueWorkingDirectory());
             adidh.setWorkingDirParent(inputDataHandling.getParentWorkingDirectory());
@@ -257,12 +264,15 @@ public class ExperimentRegistry {
         try {
             if (resource instanceof ExperimentResource) {
                 ExperimentResource experiment = (ExperimentResource) resource;
-                cmsr.setExperimentResource(experiment);
+                cmsr.setExperimentId(experiment.getExpID());
             }
             if (resource instanceof TaskDetailResource) {
                 TaskDetailResource taskDetailResource = (TaskDetailResource) resource;
-                cmsr.setTaskDetailResource(taskDetailResource);
-                cmsr.setExperimentResource(taskDetailResource.getWorkflowNodeDetailResource().getExperimentResource());
+                String nodeId = taskDetailResource.getNodeId();
+                ExperimentResource experimentResource = new ExperimentResource();
+                WorkflowNodeDetailResource workflowNode = experimentResource.getWorkflowNode(nodeId);
+                cmsr.setExperimentId(workflowNode.getExperimentId());
+                cmsr.setTaskId(taskDetailResource.getTaskId());
             }
             cmsr.setResourceHostId(resourceScheduling.getResourceHostId());
             cmsr.setCpuCount(resourceScheduling.getTotalCPUCount());
@@ -285,7 +295,7 @@ public class ExperimentRegistry {
         try {
             for (InputDataObjectType input : exInputs) {
                 ExperimentInputResource resource = (ExperimentInputResource) experimentResource.create(ResourceType.EXPERIMENT_INPUT);
-                resource.setExperimentResource(experimentResource);
+                resource.setExperimentId(experimentResource.getExpID());
                 resource.setExperimentKey(input.getName());
                 resource.setValue(input.getValue());
                 if (input.getType() != null) {
@@ -335,7 +345,7 @@ public class ExperimentRegistry {
             ExperimentResource experiment = gatewayResource.getExperiment(expId);
             for (OutputDataObjectType output : exOutput) {
                 ExperimentOutputResource resource = (ExperimentOutputResource) experiment.create(ResourceType.EXPERIMENT_OUTPUT);
-                resource.setExperimentResource(experiment);
+                resource.setExperimentId(expId);
                 resource.setExperimentKey(output.getName());
                 resource.setValue(output.getValue());
                 if (output.getType() != null) {
@@ -364,7 +374,7 @@ public class ExperimentRegistry {
             for (OutputDataObjectType output : exOutput) {
                 for (ExperimentOutputResource resource : existingExpOutputs) {
                     if (resource.getExperimentKey().equals(output.getName())) {
-                        resource.setExperimentResource(experiment);
+                        resource.setExperimentId(expId);
                         resource.setExperimentKey(output.getName());
                         resource.setValue(output.getValue());
                         if (output.getType() != null) {
@@ -393,7 +403,7 @@ public class ExperimentRegistry {
             WorkflowNodeDetailResource workflowNode = experiment.getWorkflowNode((String) ids.getSecondLevelIdentifier());
             for (OutputDataObjectType output : wfOutputs) {
                 NodeOutputResource resource = (NodeOutputResource) workflowNode.create(ResourceType.NODE_OUTPUT);
-                resource.setNodeDetailResource(workflowNode);
+                resource.setNodeId(workflowNode.getNodeInstanceId());
                 resource.setOutputKey(output.getName());
                 resource.setValue(output.getValue());
                 if (output.getType() != null) {
@@ -422,7 +432,7 @@ public class ExperimentRegistry {
             List<NodeOutputResource> nodeOutputs = workflowNode.getNodeOutputs();
             for (OutputDataObjectType output : wfOutputs) {
                 for (NodeOutputResource resource : nodeOutputs) {
-                    resource.setNodeDetailResource(workflowNode);
+                    resource.setNodeId(workflowNode.getNodeInstanceId());
                     resource.setOutputKey(output.getName());
                     resource.setValue(output.getValue());
                     if (output.getType() != null) {
@@ -451,7 +461,7 @@ public class ExperimentRegistry {
             TaskDetailResource taskDetail = workflowNode.getTaskDetail((String) ids.getSecondLevelIdentifier());
             for (OutputDataObjectType output : appOutputs) {
                 ApplicationOutputResource resource = (ApplicationOutputResource) taskDetail.create(ResourceType.APPLICATION_OUTPUT);
-                resource.setTaskDetailResource(taskDetail);
+                resource.setTaskId(taskDetail.getTaskId());
                 resource.setOutputKey(output.getName());
                 resource.setValue(output.getValue());
                 if (output.getType() != null) {
@@ -480,7 +490,7 @@ public class ExperimentRegistry {
             if (status == null) {
                 status = (StatusResource) experiment.create(ResourceType.STATUS);
             }
-            status.setExperimentResource(experiment);
+            status.setExperimentId(expId);
             status.setStatusUpdateTime(AiravataUtils.getTime(experimentStatus.getTimeOfStateChange()));
             if (status.getState() == null) {
                 status.setState(ExperimentState.UNKNOWN.name());
@@ -503,8 +513,8 @@ public class ExperimentRegistry {
             ExperimentResource experiment = gatewayResource.getExperiment((String) ids.getTopLevelIdentifier());
             WorkflowNodeDetailResource workflowNode = experiment.getWorkflowNode((String) ids.getSecondLevelIdentifier());
             StatusResource statusResource = (StatusResource) experiment.create(ResourceType.STATUS);
-            statusResource.setExperimentResource(experiment);
-            statusResource.setWorkflowNodeDetail(workflowNode);
+            statusResource.setExperimentId(experiment.getExpID());
+            statusResource.setNodeId(workflowNode.getNodeInstanceId());
             statusResource.setStatusType(StatusType.WORKFLOW_NODE.toString());
             statusResource.setStatusUpdateTime(AiravataUtils.getTime(status.getTimeOfStateChange()));
             if (status.getWorkflowNodeState() == null) {
@@ -528,8 +538,8 @@ public class ExperimentRegistry {
             if (statusResource == null) {
                 statusResource = (StatusResource) workflowNode.create(ResourceType.STATUS);
             }
-            statusResource.setExperimentResource(workflowNode.getExperimentResource());
-            statusResource.setWorkflowNodeDetail(workflowNode);
+            statusResource.setExperimentId(workflowNode.getExperimentId());
+            statusResource.setNodeId(nodeId);
             statusResource.setStatusType(StatusType.WORKFLOW_NODE.toString());
             statusResource.setStatusUpdateTime(AiravataUtils.getTime(status.getTimeOfStateChange()));
             statusResource.setState(status.getWorkflowNodeState().toString());
@@ -548,9 +558,9 @@ public class ExperimentRegistry {
             WorkflowNodeDetailResource workflowNode = experiment.getWorkflowNode((String) ids.getTopLevelIdentifier());
             TaskDetailResource taskDetail = workflowNode.getTaskDetail((String) ids.getSecondLevelIdentifier());
             StatusResource statusResource = (StatusResource) workflowNode.create(ResourceType.STATUS);
-            statusResource.setExperimentResource(workflowNode.getExperimentResource());
-            statusResource.setWorkflowNodeDetail(workflowNode);
-            statusResource.setTaskDetailResource(taskDetail);
+            statusResource.setExperimentId(workflowNode.getExperimentId());
+            statusResource.setNodeId(workflowNode.getNodeInstanceId());
+            statusResource.setTaskId(taskDetail.getTaskId());
             statusResource.setStatusType(StatusType.TASK.toString());
             statusResource.setStatusUpdateTime(AiravataUtils.getTime(status.getTimeOfStateChange()));
             if (status.getExecutionState() == null) {
@@ -573,13 +583,14 @@ public class ExperimentRegistry {
             TaskDetailResource taskDetail = workflowNode.getTaskDetail(taskId);
             StatusResource statusResource;
             if (taskDetail.isTaskStatusExist(taskId)) {
-                statusResource = taskDetail.getWorkflowNodeDetailResource().getTaskStatus(taskId);
+                workflowNode = experiment.getWorkflowNode(taskDetail.getNodeId());
+                statusResource = workflowNode.getTaskStatus(taskId);
             } else {
                 statusResource = (StatusResource) taskDetail.create(ResourceType.STATUS);
             }
-            statusResource.setExperimentResource(taskDetail.getWorkflowNodeDetailResource().getExperimentResource());
-            statusResource.setWorkflowNodeDetail(taskDetail.getWorkflowNodeDetailResource());
-            statusResource.setTaskDetailResource(taskDetail);
+            statusResource.setExperimentId(workflowNode.getExperimentId());
+            statusResource.setNodeId(workflowNode.getNodeInstanceId());
+            statusResource.setTaskId(taskId);
             statusResource.setStatusType(StatusType.TASK.toString());
             statusResource.setStatusUpdateTime(AiravataUtils.getTime(status.getTimeOfStateChange()));
             statusResource.setState(status.getExecutionState().toString());
@@ -601,11 +612,12 @@ public class ExperimentRegistry {
             ExperimentResource experiment = (ExperimentResource) gatewayResource.create(ResourceType.EXPERIMENT);
             WorkflowNodeDetailResource workflowNode = (WorkflowNodeDetailResource) experiment.create(ResourceType.WORKFLOW_NODE_DETAIL);
             TaskDetailResource taskDetail = workflowNode.getTaskDetail((String) ids.getTopLevelIdentifier());
+            workflowNode = experiment.getWorkflowNode(taskDetail.getNodeId());
             JobDetailResource jobDetail = taskDetail.getJobDetail((String) ids.getSecondLevelIdentifier());
             StatusResource statusResource = (StatusResource) jobDetail.create(ResourceType.STATUS);
-            statusResource.setExperimentResource(taskDetail.getWorkflowNodeDetailResource().getExperimentResource());
-            statusResource.setWorkflowNodeDetail(taskDetail.getWorkflowNodeDetailResource());
-            statusResource.setTaskDetailResource(taskDetail);
+            statusResource.setExperimentId(workflowNode.getExperimentId());
+            statusResource.setNodeId(workflowNode.getNodeInstanceId());
+            statusResource.setTaskId(taskDetail.getTaskId());
             statusResource.setStatusType(StatusType.JOB.toString());
             statusResource.setStatusUpdateTime(AiravataUtils.getTime(status.getTimeOfStateChange()));
             if (status.getJobState() == null) {
@@ -628,11 +640,10 @@ public class ExperimentRegistry {
             TaskDetailResource taskDetail = workflowNode.getTaskDetail((String) ids.getTopLevelIdentifier());
             JobDetailResource jobDetail = taskDetail.getJobDetail((String) ids.getSecondLevelIdentifier());
             StatusResource statusResource = jobDetail.getJobStatus();
-            workflowNode = taskDetail.getWorkflowNodeDetailResource();
-            experiment = workflowNode.getExperimentResource();
-            statusResource.setExperimentResource(experiment);
-            statusResource.setWorkflowNodeDetail(workflowNode);
-            statusResource.setTaskDetailResource(taskDetail);
+            workflowNode = experiment.getWorkflowNode(taskDetail.getNodeId());
+            statusResource.setExperimentId(workflowNode.getExperimentId());
+            statusResource.setNodeId(workflowNode.getNodeInstanceId());
+            statusResource.setTaskId(taskDetail.getTaskId());
             statusResource.setStatusType(StatusType.JOB.toString());
             statusResource.setStatusUpdateTime(AiravataUtils.getTime(status.getTimeOfStateChange()));
             statusResource.setState(status.getJobState().toString());
@@ -657,9 +668,10 @@ public class ExperimentRegistry {
             TaskDetailResource taskDetail = workflowNode.getTaskDetail((String) ids.getTopLevelIdentifier());
             JobDetailResource jobDetail = taskDetail.getJobDetail((String) ids.getSecondLevelIdentifier());
             StatusResource statusResource = (StatusResource) jobDetail.create(ResourceType.STATUS);
-            statusResource.setExperimentResource(taskDetail.getWorkflowNodeDetailResource().getExperimentResource());
-            statusResource.setWorkflowNodeDetail(taskDetail.getWorkflowNodeDetailResource());
-            statusResource.setTaskDetailResource(taskDetail);
+            workflowNode = experiment.getWorkflowNode(taskDetail.getNodeId());
+            statusResource.setExperimentId(workflowNode.getExperimentId());
+            statusResource.setNodeId(workflowNode.getNodeInstanceId());
+            statusResource.setTaskId(taskDetail.getTaskId());
             statusResource.setStatusType(StatusType.APPLICATION.toString());
             statusResource.setStatusUpdateTime(AiravataUtils.getTime(status.getTimeOfStateChange()));
             if (status.getApplicationState() == null) {
@@ -682,9 +694,10 @@ public class ExperimentRegistry {
             TaskDetailResource taskDetail = (TaskDetailResource) workflowNode.create(ResourceType.TASK_DETAIL);
             JobDetailResource jobDetail = taskDetail.getJobDetail(jobId);
             StatusResource statusResource = jobDetail.getApplicationStatus();
-            statusResource.setExperimentResource(jobDetail.getTaskDetailResource().getWorkflowNodeDetailResource().getExperimentResource());
-            statusResource.setWorkflowNodeDetail(jobDetail.getTaskDetailResource().getWorkflowNodeDetailResource());
-            statusResource.setTaskDetailResource(jobDetail.getTaskDetailResource());
+            workflowNode = experiment.getWorkflowNode(taskDetail.getNodeId());
+            statusResource.setExperimentId(workflowNode.getExperimentId());
+            statusResource.setNodeId(workflowNode.getNodeInstanceId());
+            statusResource.setTaskId(taskDetail.getTaskId());
             statusResource.setStatusType(StatusType.APPLICATION.toString());
             statusResource.setStatusUpdateTime(AiravataUtils.getTime(status.getTimeOfStateChange()));
             statusResource.setState(status.getApplicationState());
@@ -708,10 +721,11 @@ public class ExperimentRegistry {
             TaskDetailResource taskDetail = workflowNode.getTaskDetail((String) ids.getTopLevelIdentifier());
             DataTransferDetailResource dataTransferDetail = taskDetail.getDataTransferDetail((String) ids.getSecondLevelIdentifier());
             StatusResource statusResource = (StatusResource) dataTransferDetail.create(ResourceType.STATUS);
-            statusResource.setExperimentResource(taskDetail.getWorkflowNodeDetailResource().getExperimentResource());
-            statusResource.setWorkflowNodeDetail(taskDetail.getWorkflowNodeDetailResource());
-            statusResource.setTaskDetailResource(taskDetail);
-            statusResource.setDataTransferDetail(dataTransferDetail);
+            workflowNode = experiment.getWorkflowNode(taskDetail.getNodeId());
+            statusResource.setExperimentId(workflowNode.getExperimentId());
+            statusResource.setNodeId(workflowNode.getNodeInstanceId());
+            statusResource.setTaskId(taskDetail.getTaskId());
+            statusResource.setTransferId(dataTransferDetail.getTransferId());
             statusResource.setStatusType(StatusType.DATA_TRANSFER.toString());
             statusResource.setStatusUpdateTime(AiravataUtils.getTime(status.getTimeOfStateChange()));
             if (status.getTransferState() == null) {
@@ -735,13 +749,15 @@ public class ExperimentRegistry {
             DataTransferDetailResource dataTransferDetail = taskDetail.getDataTransferDetail(transferId);
             StatusResource statusResource = dataTransferDetail.getDataTransferStatus();
 
-            WorkflowNodeDetailResource workflowNodeDetailResource = dataTransferDetail.getTaskDetailResource().getWorkflowNodeDetailResource();
-            if (workflowNodeDetailResource != null) {
-                statusResource.setExperimentResource(workflowNodeDetailResource.getExperimentResource());
-                statusResource.setWorkflowNodeDetail(workflowNodeDetailResource);
+            String taskId = dataTransferDetail.getTaskId();
+            taskDetail = workflowNode.getTaskDetail(taskId);
+            workflowNode = experiment.getWorkflowNode(taskDetail.getNodeId());
+            if (workflowNode != null) {
+                statusResource.setExperimentId(workflowNode.getExperimentId());
+                statusResource.setNodeId(workflowNode.getNodeInstanceId());
             }
-            statusResource.setTaskDetailResource(dataTransferDetail.getTaskDetailResource());
-            statusResource.setDataTransferDetail(dataTransferDetail);
+            statusResource.setTaskId(taskId);
+            statusResource.setTransferId(transferId);
             statusResource.setStatusType(StatusType.DATA_TRANSFER.toString());
             statusResource.setStatusUpdateTime(AiravataUtils.getTime(status.getTimeOfStateChange()));
             statusResource.setState(status.getTransferState().toString());
@@ -756,7 +772,7 @@ public class ExperimentRegistry {
         try {
             ExperimentResource experiment = gatewayResource.getExperiment(expId);
             WorkflowNodeDetailResource resource = (WorkflowNodeDetailResource) experiment.create(ResourceType.WORKFLOW_NODE_DETAIL);
-            resource.setExperimentResource(experiment);
+            resource.setExperimentId(expId);
             resource.setNodeName(nodeDetails.getNodeName());
             resource.setExecutionUnit(nodeDetails.getExecutionUnit().toString());
             resource.setExecutionUnitData(nodeDetails.getExecutionUnitData());
@@ -820,7 +836,7 @@ public class ExperimentRegistry {
             workflowNode.setCreationTime(AiravataUtils.getTime(nodeDetails.getCreationTime()));
             workflowNode.setNodeInstanceId(nodeId);
             workflowNode.save();
-            String expID = workflowNode.getExperimentResource().getExpID();
+            String expID = workflowNode.getExperimentId();
             List<InputDataObjectType> nodeInputs = nodeDetails.getNodeInputs();
             if (nodeInputs != null) {
                 updateWorkflowInputs(nodeDetails.getNodeInputs(), workflowNode);
@@ -866,7 +882,7 @@ public class ExperimentRegistry {
         try {
             for (InputDataObjectType input : wfInputs) {
                 NodeInputResource resource = (NodeInputResource) nodeDetailResource.create(ResourceType.NODE_INPUT);
-                resource.setNodeDetailResource(nodeDetailResource);
+                resource.setNodeId(nodeDetailResource.getNodeInstanceId());
                 resource.setInputKey(input.getName());
                 resource.setValue(input.getValue());
                 if (input.getType() != null) {
@@ -891,7 +907,7 @@ public class ExperimentRegistry {
             List<NodeInputResource> nodeInputs = nodeDetailResource.getNodeInputs();
             for (InputDataObjectType input : wfInputs) {
                 for (NodeInputResource resource : nodeInputs) {
-                    resource.setNodeDetailResource(nodeDetailResource);
+                    resource.setNodeId(nodeDetailResource.getNodeInstanceId());
                     resource.setInputKey(input.getName());
                     resource.setValue(input.getValue());
                     if (input.getType() != null) {
@@ -916,9 +932,8 @@ public class ExperimentRegistry {
         try {
             ExperimentResource experiment = (ExperimentResource) gatewayResource.create(ResourceType.EXPERIMENT);
             WorkflowNodeDetailResource workflowNode = experiment.getWorkflowNode(nodeId);
-            experiment = workflowNode.getExperimentResource();
             TaskDetailResource taskDetail = (TaskDetailResource) workflowNode.create(ResourceType.TASK_DETAIL);
-            taskDetail.setWorkflowNodeDetailResource(workflowNode);
+            taskDetail.setNodeId(nodeId);
             taskDetail.setTaskId(getTaskID(workflowNode.getNodeName()));
             taskDetail.setApplicationId(taskDetails.getApplicationId());
             taskDetail.setApplicationVersion(taskDetails.getApplicationVersion());
@@ -930,8 +945,8 @@ public class ExperimentRegistry {
             if (emailAddresses != null && !emailAddresses.isEmpty()){
                 for (String email : emailAddresses){
                     NotificationEmailResource emailResource = new NotificationEmailResource();
-                    emailResource.setExperimentResource(experiment);
-                    emailResource.setTaskDetailResource(taskDetail);
+                    emailResource.setExperimentId(workflowNode.getExperimentId());
+                    emailResource.setTaskId(taskDetail.getTaskId());
                     emailResource.setEmailAddress(email);
                     emailResource.save();
                 }
@@ -1013,7 +1028,8 @@ public class ExperimentRegistry {
             taskDetail.setApplicationDeploymentId(taskDetails.getApplicationDeploymentId());
             taskDetail.setEnableEmailNotifications(taskDetails.isEnableEmailNotification());
             taskDetail.save();
-            experiment = taskDetail.getWorkflowNodeDetailResource().getExperimentResource();
+
+            workflowNode = experiment.getWorkflowNode(taskDetail.getNodeId());
 
             List<String> emailAddresses = taskDetails.getEmailAddresses();
             // remove existing emails
@@ -1021,8 +1037,8 @@ public class ExperimentRegistry {
             if (emailAddresses != null && !emailAddresses.isEmpty()){
                 for (String email : emailAddresses){
                     NotificationEmailResource emailResource = new NotificationEmailResource();
-                    emailResource.setExperimentResource(experiment);
-                    emailResource.setTaskDetailResource(taskDetail);
+                    emailResource.setExperimentId(workflowNode.getExperimentId());
+                    emailResource.setTaskId(taskId);
                     emailResource.setEmailAddress(email);
                     emailResource.save();
                 }
@@ -1080,7 +1096,7 @@ public class ExperimentRegistry {
         try {
             for (InputDataObjectType input : appInputs) {
                 ApplicationInputResource resource = (ApplicationInputResource) taskDetailResource.create(ResourceType.APPLICATION_INPUT);
-                resource.setTaskDetailResource(taskDetailResource);
+                resource.setTaskId(taskDetailResource.getTaskId());
                 resource.setInputKey(input.getName());
                 resource.setValue(input.getValue());
                 if (input.getType() != null) {
@@ -1104,7 +1120,7 @@ public class ExperimentRegistry {
         try {
             for (OutputDataObjectType output : appOytputs) {
                 ApplicationOutputResource resource = (ApplicationOutputResource) taskDetailResource.create(ResourceType.APPLICATION_OUTPUT);
-                resource.setTaskDetailResource(taskDetailResource);
+                resource.setTaskId(taskDetailResource.getTaskId());
                 resource.setOutputKey(output.getName());
                 resource.setValue(output.getValue());
                 if (output.getType() != null) {
@@ -1116,7 +1132,6 @@ public class ExperimentRegistry {
                 resource.setDataNameLocation(output.getLocation());
                 resource.setAppArgument(output.getApplicationArgument());
                 resource.setSearchQuery(output.getSearchQuery());
-//                resource.setMetadata(output.getMetaData());
                 resource.save();
             }
         } catch (Exception e) {
@@ -1134,7 +1149,7 @@ public class ExperimentRegistry {
             List<ApplicationOutputResource> outputs = taskDetail.getApplicationOutputs();
             for (OutputDataObjectType output : appOutputs) {
                 for (ApplicationOutputResource resource : outputs) {
-                    resource.setTaskDetailResource(taskDetail);
+                    resource.setTaskId(taskId);
                     resource.setOutputKey(output.getName());
                     resource.setValue(output.getValue());
                     if (output.getType() != null) {
@@ -1161,7 +1176,7 @@ public class ExperimentRegistry {
             List<ApplicationInputResource> inputs = taskDetailResource.getApplicationInputs();
             for (InputDataObjectType input : appInputs) {
                 for (ApplicationInputResource resource : inputs) {
-                    resource.setTaskDetailResource(taskDetailResource);
+                    resource.setTaskId(taskDetailResource.getTaskId());
                     resource.setInputKey(input.getName());
                     resource.setValue(input.getValue());
                     if (input.getType() != null) {
@@ -1189,7 +1204,7 @@ public class ExperimentRegistry {
             WorkflowNodeDetailResource workflowNode = (WorkflowNodeDetailResource) experiment.create(ResourceType.WORKFLOW_NODE_DETAIL);
             TaskDetailResource taskDetail = workflowNode.getTaskDetail((String) ids.getTopLevelIdentifier());
             JobDetailResource jobDetail = taskDetail.createJobDetail((String) ids.getSecondLevelIdentifier());
-            jobDetail.setTaskDetailResource(taskDetail);
+            jobDetail.setTaskId(taskDetail.getTaskId());
             jobDetail.setJobDescription(jobDetails.getJobDescription());
             jobDetail.setCreationTime(AiravataUtils.getTime(jobDetails.getCreationTime()));
             jobDetail.setComputeResourceConsumed(jobDetails.getComputeResourceConsumed());
@@ -1236,7 +1251,7 @@ public class ExperimentRegistry {
             TaskDetailResource taskDetail = workflowNode.getTaskDetail(taskId);
             String jobId = (String) ids.getSecondLevelIdentifier();
             JobDetailResource jobDetail = taskDetail.getJobDetail(jobId);
-            jobDetail.setTaskDetailResource(taskDetail);
+            jobDetail.setTaskId(taskDetail.getTaskId());
             jobDetail.setJobDescription(jobDetails.getJobDescription());
             jobDetail.setCreationTime(AiravataUtils.getTime(jobDetails.getCreationTime()));
             jobDetail.setComputeResourceConsumed(jobDetails.getComputeResourceConsumed());
@@ -1282,7 +1297,7 @@ public class ExperimentRegistry {
             WorkflowNodeDetailResource workflowNode = (WorkflowNodeDetailResource) experiment.create(ResourceType.WORKFLOW_NODE_DETAIL);
             TaskDetailResource taskDetail = workflowNode.getTaskDetail(taskId);
             DataTransferDetailResource resource = (DataTransferDetailResource) taskDetail.create(ResourceType.DATA_TRANSFER_DETAIL);
-            resource.setTaskDetailResource(taskDetail);
+            resource.setTaskId(taskId);
             resource.setTransferId(getDataTransferID(taskId));
 
             resource.setTransferDescription(transferDetails.getTransferDescription());
@@ -1316,7 +1331,7 @@ public class ExperimentRegistry {
             resource.setTransferDescription(transferDetails.getTransferDescription());
             resource.setCreationTime(AiravataUtils.getTime(transferDetails.getCreationTime()));
             resource.save();
-            String taskId = resource.getTaskDetailResource().getTaskId();
+            String taskId = resource.getTaskId();
             TransferStatus transferStatus = transferDetails.getTransferStatus();
             if (transferStatus != null) {
                 TransferStatus status = getDataTransferStatus(transferId);
@@ -1346,9 +1361,9 @@ public class ExperimentRegistry {
             if (ids.getSecondLevelIdentifier() != null) {
                 WorkflowNodeDetailResource nodeDetailResource = (WorkflowNodeDetailResource) experiment.create(ResourceType.WORKFLOW_NODE_DETAIL);
                 TaskDetailResource taskDetail = nodeDetailResource.getTaskDetail((String) ids.getSecondLevelIdentifier());
-                schedulingResource.setTaskDetailResource(taskDetail);
+                schedulingResource.setTaskId(taskDetail.getTaskId());
             }
-            schedulingResource.setExperimentResource(experiment);
+            schedulingResource.setExperimentId(experiment.getExpID());
             schedulingResource.setResourceHostId(scheduling.getResourceHostId());
             schedulingResource.setCpuCount(scheduling.getTotalCPUCount());
             schedulingResource.setNodeCount(scheduling.getNodeCount());
@@ -1378,9 +1393,9 @@ public class ExperimentRegistry {
             if (ids.getSecondLevelIdentifier() != null) {
                 WorkflowNodeDetailResource nodeDetailResource = (WorkflowNodeDetailResource) experiment.create(ResourceType.WORKFLOW_NODE_DETAIL);
                 TaskDetailResource taskDetail = nodeDetailResource.getTaskDetail((String) ids.getSecondLevelIdentifier());
-                dataHandlingResource.setTaskDetailResource(taskDetail);
+                dataHandlingResource.setTaskId(taskDetail.getTaskId());
             }
-            dataHandlingResource.setExperimentResource(experiment);
+            dataHandlingResource.setExperimentId(experiment.getExpID());
             dataHandlingResource.setWorkingDir(dataHandling.getUniqueWorkingDirectory());
             dataHandlingResource.setWorkingDirParent(dataHandling.getParentWorkingDirectory());
             dataHandlingResource.setStageInputFiles(dataHandling.isStageInputFilesToWorkingDir());
@@ -1405,9 +1420,9 @@ public class ExperimentRegistry {
             if (ids.getSecondLevelIdentifier() != null) {
                 WorkflowNodeDetailResource nodeDetailResource = (WorkflowNodeDetailResource) experiment.create(ResourceType.WORKFLOW_NODE_DETAIL);
                 TaskDetailResource taskDetail = nodeDetailResource.getTaskDetail((String) ids.getSecondLevelIdentifier());
-                dataHandlingResource.setTaskDetailResource(taskDetail);
+                dataHandlingResource.setTaskId(taskDetail.getTaskId());
             }
-            dataHandlingResource.setExperimentResource(experiment);
+            dataHandlingResource.setExperimentId(experiment.getExpID());
             dataHandlingResource.setOutputDataDir(dataHandling.getOutputDataDir());
             dataHandlingResource.setDataRegUrl(dataHandling.getDataRegistryURL());
             dataHandlingResource.setPersistOutputData(dataHandling.isPersistOutputData());
@@ -1426,9 +1441,9 @@ public class ExperimentRegistry {
             if (ids.getSecondLevelIdentifier() != null) {
                 WorkflowNodeDetailResource nodeDetailResource = (WorkflowNodeDetailResource) experiment.create(ResourceType.WORKFLOW_NODE_DETAIL);
                 TaskDetailResource taskDetail = nodeDetailResource.getTaskDetail((String) ids.getSecondLevelIdentifier());
-                qosParamResource.setTaskDetailResource(taskDetail);
+                qosParamResource.setTaskId(taskDetail.getTaskId());
             }
-            qosParamResource.setExperimentResource(experiment);
+            qosParamResource.setExperimentId(experiment.getExpID());
             qosParamResource.setStartExecutionAt(qosParams.getStartExecutionAt());
             qosParamResource.setExecuteBefore(qosParams.getExecuteBefore());
             qosParamResource.setNoOfRetries(qosParams.getNumberofRetries());
@@ -1474,9 +1489,10 @@ public class ExperimentRegistry {
                             }
                         }
                     }
-                    errorResource.setTaskDetailResource(taskDetail);
-                    errorResource.setNodeDetail(taskDetail.getWorkflowNodeDetailResource());
-                    errorResource.setExperimentResource(taskDetail.getWorkflowNodeDetailResource().getExperimentResource());
+                    errorResource.setTaskId(taskDetail.getTaskId());
+                    errorResource.setNodeId(taskDetail.getNodeId());
+                    workflowNode = experiment.getWorkflowNode(taskDetail.getNodeId());
+                    errorResource.setExperimentId(workflowNode.getExperimentId());
                 } else {
 //                    logger.error("The id provided is not an experiment id or a workflow id or a task id..");
                 }
@@ -1498,9 +1514,10 @@ public class ExperimentRegistry {
                             }
                         }
                     }
-                    errorResource.setTaskDetailResource(taskDetail);
-                    errorResource.setNodeDetail(taskDetail.getWorkflowNodeDetailResource());
-                    errorResource.setExperimentResource(taskDetail.getWorkflowNodeDetailResource().getExperimentResource());
+                    errorResource.setTaskId(taskDetail.getTaskId());
+                    errorResource.setNodeId(taskDetail.getNodeId());
+                    workflowNode = experiment.getWorkflowNode(taskDetail.getNodeId());
+                    errorResource.setExperimentId(workflowNode.getExperimentId());
                 } else {
                     logger.error("The id provided is not a job in the system..");
                 }
@@ -1626,14 +1643,13 @@ public class ExperimentRegistry {
             ExperimentResource existingExperiment = gatewayResource.getExperiment(expId);
             existingExperiment.setExpName(experiment.getName());
             existingExperiment.setExecutionUser(experiment.getUserName());
-            existingExperiment.setGateway(gatewayResource);
+            existingExperiment.setGatewayId(gatewayResource.getGatewayId());
             existingExperiment.setGatewayExecutionId(experiment.getGatewayExecutionId());
             if (!workerResource.isProjectExists(experiment.getProjectID())) {
                 logger.error("Project does not exist in the system..");
                 throw new Exception("Project does not exist in the system, Please create the project first...");
             }
-            ProjectResource project = workerResource.getProject(experiment.getProjectID());
-            existingExperiment.setProject(project);
+            existingExperiment.setProjectId(experiment.getProjectID());
             existingExperiment.setCreationTime(AiravataUtils.getTime(experiment.getCreationTime()));
             existingExperiment.setDescription(experiment.getDescription());
             existingExperiment.setApplicationId(experiment.getApplicationId());
@@ -1650,7 +1666,7 @@ public class ExperimentRegistry {
             if (emailAddresses != null && !emailAddresses.isEmpty()){
                 for (String email : emailAddresses){
                     NotificationEmailResource emailResource = new NotificationEmailResource();
-                    emailResource.setExperimentResource(existingExperiment);
+                    emailResource.setExperimentId(expId);
                     emailResource.setEmailAddress(email);
                     emailResource.save();
                 }
@@ -1697,7 +1713,7 @@ public class ExperimentRegistry {
         try {
             ExperimentResource experiment = gatewayResource.getExperiment(expId);
             ConfigDataResource resource = (ConfigDataResource) experiment.get(ResourceType.CONFIG_DATA, expId);
-            resource.setExperimentResource(experiment);
+            resource.setExperimentId(expId);
             resource.setAiravataAutoSchedule(configData.isAiravataAutoSchedule());
             resource.setOverrideManualParams(configData.isOverrideManualScheduledParams());
             resource.setShareExp(configData.isShareExperimentPublicly());
@@ -1733,7 +1749,7 @@ public class ExperimentRegistry {
             if (resource instanceof ExperimentResource) {
                 ExperimentResource expResource = (ExperimentResource) resource;
                 QosParamResource qosr = expResource.getQOSparams(expResource.getExpID());
-                qosr.setExperimentResource(expResource);
+                qosr.setExperimentId(expResource.getExpID());
                 qosr.setStartExecutionAt(qosParams.getStartExecutionAt());
                 qosr.setExecuteBefore(qosParams.getExecuteBefore());
                 qosr.setNoOfRetries(qosParams.getNumberofRetries());
@@ -1752,12 +1768,14 @@ public class ExperimentRegistry {
             if (resource instanceof ExperimentResource) {
                 ExperimentResource expResource = (ExperimentResource) resource;
                 adodh = expResource.getOutputDataHandling(expResource.getExpID());
-                adodh.setExperimentResource(expResource);
+                adodh.setExperimentId(expResource.getExpID());
             } else {
                 TaskDetailResource taskDetailResource = (TaskDetailResource) resource;
+                ExperimentResource experimentResource = new ExperimentResource();
                 adodh = taskDetailResource.getOutputDataHandling(taskDetailResource.getTaskId());
-                adodh.setTaskDetailResource(taskDetailResource);
-                adodh.setExperimentResource(taskDetailResource.getWorkflowNodeDetailResource().getExperimentResource());
+                adodh.setTaskId(taskDetailResource.getTaskId());
+                WorkflowNodeDetailResource nodeDetailResource = experimentResource.getWorkflowNode(taskDetailResource.getNodeId());
+                adodh.setExperimentId(nodeDetailResource.getExperimentId());
             }
             adodh.setOutputDataDir(outputDataHandling.getOutputDataDir());
             adodh.setDataRegUrl(outputDataHandling.getDataRegistryURL());
@@ -1776,12 +1794,14 @@ public class ExperimentRegistry {
             if (resource instanceof ExperimentResource) {
                 ExperimentResource expResource = (ExperimentResource) resource;
                 adidh = expResource.getInputDataHandling(expResource.getExpID());
-                adidh.setExperimentResource(expResource);
+                adidh.setExperimentId(expResource.getExpID());
             } else {
                 TaskDetailResource taskDetailResource = (TaskDetailResource) resource;
+                ExperimentResource experimentResource = new ExperimentResource();
                 adidh = taskDetailResource.getInputDataHandling(taskDetailResource.getTaskId());
-                adidh.setTaskDetailResource(taskDetailResource);
-                adidh.setExperimentResource(taskDetailResource.getWorkflowNodeDetailResource().getExperimentResource());
+                adidh.setTaskId(taskDetailResource.getTaskId());
+                WorkflowNodeDetailResource nodeDetailResource = experimentResource.getWorkflowNode(taskDetailResource.getNodeId());
+                adidh.setExperimentId(nodeDetailResource.getExperimentId());
             }
             adidh.setWorkingDir(inputDataHandling.getUniqueWorkingDirectory());
             adidh.setWorkingDirParent(inputDataHandling.getParentWorkingDirectory());
@@ -1801,12 +1821,14 @@ public class ExperimentRegistry {
             if (resource instanceof ExperimentResource) {
                 ExperimentResource expResource = (ExperimentResource) resource;
                 cmsr = expResource.getComputationScheduling(expResource.getExpID());
-                cmsr.setExperimentResource(expResource);
+                cmsr.setExperimentId(expResource.getExpID());
             } else {
                 TaskDetailResource taskDetailResource = (TaskDetailResource) resource;
+                ExperimentResource experimentResource = new ExperimentResource();
                 cmsr = taskDetailResource.getComputationScheduling(taskDetailResource.getTaskId());
-                cmsr.setTaskDetailResource(taskDetailResource);
-                cmsr.setExperimentResource(taskDetailResource.getWorkflowNodeDetailResource().getExperimentResource());
+                cmsr.setTaskId(taskDetailResource.getTaskId());
+                WorkflowNodeDetailResource nodeDetailResource = experimentResource.getWorkflowNode(taskDetailResource.getNodeId());
+                cmsr.setExperimentId(nodeDetailResource.getExperimentId());
             }
             cmsr.setResourceHostId(resourceScheduling.getResourceHostId());
             cmsr.setCpuCount(resourceScheduling.getTotalCPUCount());
@@ -1865,9 +1887,10 @@ public class ExperimentRegistry {
                 } else if (value instanceof WorkflowNodeDetails) {
                     WorkflowNodeDetailResource nodeDetailResource = getWorkflowNodeDetailResource(((WorkflowNodeDetails) value).getNodeInstanceId());
                     if (nodeDetailResource != null) {
-                        return Arrays.asList(new Experiment[]{ThriftDataModelConversion
-                                .getExperiment(nodeDetailResource
-                                        .getExperimentResource())});
+                        String experimentId = nodeDetailResource.getExperimentId();
+                        ExperimentResource experiment = gatewayResource.getExperiment(experimentId);
+                        return Arrays.asList(ThriftDataModelConversion
+                                .getExperiment(experiment));
                     }
                 } else {
                     logger.error("Unsupported field value to retrieve workflow node detail list...");
@@ -1940,10 +1963,11 @@ public class ExperimentRegistry {
                     return getWFNodeDetails(fieldName, ((List<?>) value).get(0));
                 } else if (value instanceof TaskDetails) {
                     TaskDetailResource taskDetailResource = getTaskDetailResource(((TaskDetails) value).getTaskID());
+                    ExperimentResource experimentResource = new ExperimentResource();
                     if (taskDetailResource != null) {
-                        return Arrays.asList(new WorkflowNodeDetails[]{ThriftDataModelConversion
-                                .getWorkflowNodeDetails(taskDetailResource
-                                        .getWorkflowNodeDetailResource())});
+                        WorkflowNodeDetailResource workflowNode = experimentResource.getWorkflowNode(taskDetailResource.getNodeId());
+                        return Arrays.asList(ThriftDataModelConversion
+                                .getWorkflowNodeDetails(workflowNode));
                     }
                 } else {
                     logger.error("Unsupported field value to retrieve workflow node detail list...");
@@ -2070,7 +2094,7 @@ public class ExperimentRegistry {
             } else if (fieldName.equals(Constants.FieldConstants.ExperimentConstants.USER_NAME)) {
                 return resource.getExecutionUser();
             }else if (fieldName.equals(Constants.FieldConstants.ExperimentConstants.GATEWAY)) {
-                return resource.getGateway().getGatewayId();
+                return resource.getGatewayId();
             } else if (fieldName.equals(Constants.FieldConstants.ExperimentConstants.EXPERIMENT_NAME)) {
                 return resource.getExpName();
             } else if (fieldName.equals(Constants.FieldConstants.ExperimentConstants.EXPERIMENT_DESC)) {
@@ -2078,7 +2102,7 @@ public class ExperimentRegistry {
             } else if (fieldName.equals(Constants.FieldConstants.ExperimentConstants.APPLICATION_ID)) {
                 return resource.getApplicationId();
             } else if (fieldName.equals(Constants.FieldConstants.ExperimentConstants.PROJECT_ID)) {
-                return resource.getProject().getId();
+                return resource.getProjectId();
             } else if (fieldName.equals(Constants.FieldConstants.ExperimentConstants.APPLICATION_VERSION)) {
                 return resource.getApplicationVersion();
             } else if (fieldName.equals(Constants.FieldConstants.ExperimentConstants.WORKFLOW_TEMPLATE_ID)) {

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/impl/ProjectRegistry.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/impl/ProjectRegistry.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/impl/ProjectRegistry.java
index e0e2a46..2fcc00d 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/impl/ProjectRegistry.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/impl/ProjectRegistry.java
@@ -67,9 +67,8 @@ public class ProjectRegistry {
             projectResource.setName(project.getName());
             projectResource.setDescription(project.getDescription());
             projectResource.setCreationTime(AiravataUtils.getTime(project.getCreationTime()));
-            GatewayResource gateway = (GatewayResource)ResourceUtils.getGateway(gatewayId);
-            projectResource.setGateway(gateway);
-            WorkerResource worker = new WorkerResource(project.getOwner(), workerResource.getGateway());
+            projectResource.setGatewayId(gatewayId);
+            WorkerResource worker = new WorkerResource(project.getOwner(), gatewayId);
             projectResource.setWorker(worker);
             projectResource.save();
             ProjectUserResource resource = (ProjectUserResource)projectResource.create(
@@ -120,7 +119,7 @@ public class ProjectRegistry {
                 workerResource = (WorkerResource)ResourceUtils.getWorker(
                         gatewayResource.getGatewayName(), user.getUserName());
             }
-            WorkerResource worker = new WorkerResource(project.getOwner(), gatewayResource);
+            WorkerResource worker = new WorkerResource(project.getOwner(), gatewayResource.getGatewayId());
             existingProject.setWorker(worker);
             existingProject.save();
             ProjectUserResource resource = (ProjectUserResource)existingProject.create(

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/AdvancedInputDataHandling.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/AdvancedInputDataHandling.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/AdvancedInputDataHandling.java
index 8f40f2d..79ca0a8 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/AdvancedInputDataHandling.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/AdvancedInputDataHandling.java
@@ -110,20 +110,4 @@ public class AdvancedInputDataHandling implements Serializable {
     public void setCleanAfterJob(boolean cleanAfterJob) {
         this.cleanAfterJob = cleanAfterJob;
     }
-
-    public Experiment getExperiment() {
-        return experiment;
-    }
-
-    public void setExperiment(Experiment experiment) {
-        this.experiment = experiment;
-    }
-
-    public TaskDetail getTask() {
-        return task;
-    }
-
-    public void setTask(TaskDetail task) {
-        this.task = task;
-    }
 }

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/AdvancedOutputDataHandling.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/AdvancedOutputDataHandling.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/AdvancedOutputDataHandling.java
index d305f22..73a70e2 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/AdvancedOutputDataHandling.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/AdvancedOutputDataHandling.java
@@ -101,19 +101,4 @@ public class AdvancedOutputDataHandling implements Serializable {
         this.persistOutputData = persistOutputData;
     }
 
-    public Experiment getExperiment() {
-        return experiment;
-    }
-
-    public void setExperiment(Experiment experiment) {
-        this.experiment = experiment;
-    }
-
-    public TaskDetail getTask() {
-        return task;
-    }
-
-    public void setTask(TaskDetail task) {
-        this.task = task;
-    }
 }

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/ApplicationInput.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/ApplicationInput.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/ApplicationInput.java
index 66a9796..0488778 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/ApplicationInput.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/ApplicationInput.java
@@ -115,14 +115,6 @@ public class ApplicationInput implements Serializable {
         this.value = value;
     }
 
-    public TaskDetail getTask() {
-        return task;
-    }
-
-    public void setTask(TaskDetail task) {
-        this.task = task;
-    }
-
     public String getAppArgument() {
         return appArgument;
     }

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/ApplicationOutput.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/ApplicationOutput.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/ApplicationOutput.java
index c95f934..33ed202 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/ApplicationOutput.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/ApplicationOutput.java
@@ -76,14 +76,6 @@ public class ApplicationOutput implements Serializable {
         this.value = value;
     }
 
-    public TaskDetail getTask() {
-        return task;
-    }
-
-    public void setTask(TaskDetail task) {
-        this.task = task;
-    }
-
     public String getOutputKey() {
         return outputKey;
     }

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/Computational_Resource_Scheduling.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/Computational_Resource_Scheduling.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/Computational_Resource_Scheduling.java
index e440510..484a08b 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/Computational_Resource_Scheduling.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/Computational_Resource_Scheduling.java
@@ -171,20 +171,4 @@ public class Computational_Resource_Scheduling implements Serializable {
     public void setProjectName(String projectName) {
         this.projectName = projectName;
     }
-
-    public Experiment getExperiment() {
-        return experiment;
-    }
-
-    public void setExperiment(Experiment experiment) {
-        this.experiment = experiment;
-    }
-
-    public TaskDetail getTask() {
-        return task;
-    }
-
-    public void setTask(TaskDetail task) {
-        this.task = task;
-    }
 }

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/DataTransferDetail.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/DataTransferDetail.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/DataTransferDetail.java
index 95ad0e9..2d1ac2e 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/DataTransferDetail.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/DataTransferDetail.java
@@ -22,6 +22,7 @@
 package org.apache.airavata.persistance.registry.jpa.model;
 
 import org.apache.openjpa.persistence.DataCache;
+import org.apache.openjpa.persistence.jdbc.ElementJoinColumn;
 
 import javax.persistence.*;
 import java.io.Serializable;
@@ -46,6 +47,9 @@ public class DataTransferDetail implements Serializable {
     @JoinColumn(name = "TASK_ID")
     private TaskDetail task;
 
+    @OneToOne (fetch = FetchType.LAZY, mappedBy = "transferDetail")
+    private Status dataTransferStatus;
+
     public String getTransferId() {
         return transferId;
     }
@@ -78,11 +82,11 @@ public class DataTransferDetail implements Serializable {
         this.transferDesc = transferDesc;
     }
 
-    public TaskDetail getTask() {
-        return task;
+    public Status getDataTransferStatus() {
+        return dataTransferStatus;
     }
 
-    public void setTask(TaskDetail task) {
-        this.task = task;
+    public void setDataTransferStatus(Status dataTransferStatus) {
+        this.dataTransferStatus = dataTransferStatus;
     }
 }

http://git-wip-us.apache.org/repos/asf/airavata/blob/4476dfc1/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/ErrorDetail.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/ErrorDetail.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/ErrorDetail.java
index f4d3b64..03c2965 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/ErrorDetail.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/ErrorDetail.java
@@ -72,7 +72,11 @@ public class ErrorDetail implements Serializable {
 
     @ManyToOne(fetch = FetchType.LAZY, cascade= CascadeType.MERGE)
     @JoinColumn(name = "NODE_INSTANCE_ID")
-    private WorkflowNodeDetail nodeDetails;
+    private WorkflowNodeDetail nodeDetail;
+
+    @ManyToOne(fetch = FetchType.LAZY, cascade= CascadeType.MERGE)
+    @JoinColumn(name = "JOB_ID")
+    private JobDetail jobDetail;
 
     public int getErrorID() {
         return errorID;
@@ -154,30 +158,6 @@ public class ErrorDetail implements Serializable {
         this.actionableGroup = actionableGroup;
     }
 
-    public Experiment getExperiment() {
-        return experiment;
-    }
-
-    public void setExperiment(Experiment experiment) {
-        this.experiment = experiment;
-    }
-
-    public TaskDetail getTask() {
-        return task;
-    }
-
-    public void setTask(TaskDetail task) {
-        this.task = task;
-    }
-
-    public WorkflowNodeDetail getNodeDetails() {
-        return nodeDetails;
-    }
-
-    public void setNodeDetails(WorkflowNodeDetail nodeDetails) {
-        this.nodeDetails = nodeDetails;
-    }
-
     public String getCorrectiveAction() {
         return correctiveAction;
     }