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:15 UTC

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

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;
     }