http://git-wip-us.apache.org/repos/asf/airavata/blob/bf5f8c3c/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 fc5e32f..64a63bb 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
@@ -32,6 +32,7 @@ import 
org.apache.airavata.persistance.registry.jpa.ResourceType;
 import org.apache.airavata.persistance.registry.jpa.ResourceUtils;
 import org.apache.airavata.persistance.registry.jpa.model.*;
 import org.apache.airavata.persistance.registry.jpa.utils.QueryGenerator;
+import org.apache.airavata.registry.cpi.RegistryException;
 import org.apache.airavata.registry.cpi.utils.StatusType;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -130,7 +131,7 @@ public class ExperimentResource extends AbstractResource {
      * @param type  child resource types
      * @return UnsupportedOperationException
      */
-    public Resource create(ResourceType type) {
+    public Resource create(ResourceType type) throws RegistryException {
        switch (type){
                case EXPERIMENT_INPUT:
                        ExperimentInputResource inputResource = new 
ExperimentInputResource();
@@ -184,78 +185,87 @@ public class ExperimentResource extends AbstractResource {
      * @param name name of the child resource
      * @return UnsupportedOperationException
      */
-    public void remove(ResourceType type, Object name) {
-        EntityManager em = ResourceUtils.getEntityManager();
-        em.getTransaction().begin();
-        Query q;
-        QueryGenerator generator;
-        switch (type){
-            case EXPERIMENT_INPUT:
-                generator = new QueryGenerator(EXPERIMENT_INPUT);
-                generator.setParameter(ExperimentInputConstants.EXPERIMENT_ID, 
name);
-                q = generator.deleteQuery(em);
-                q.executeUpdate();
-                break;
-            case EXPERIMENT_OUTPUT:
-                generator = new QueryGenerator(EXPERIMENT_OUTPUT);
-                
generator.setParameter(ExperimentOutputConstants.EXPERIMENT_ID, name);
-                q = generator.deleteQuery(em);
-                q.executeUpdate();
-                break;
-            case WORKFLOW_NODE_DETAIL:
-                generator = new QueryGenerator(WORKFLOW_NODE_DETAIL);
-                
generator.setParameter(WorkflowNodeDetailsConstants.NODE_INSTANCE_ID, name);
-                q = generator.deleteQuery(em);
-                q.executeUpdate();
-                break;
-            case ERROR_DETAIL:
-                generator = new QueryGenerator(ERROR_DETAIL);
-                generator.setParameter(ErrorDetailConstants.EXPERIMENT_ID, 
name);
-                q = generator.deleteQuery(em);
-                q.executeUpdate();
-                break;
-            case STATUS:
-                generator = new QueryGenerator(STATUS);
-                generator.setParameter(StatusConstants.EXPERIMENT_ID, name);
-                q = generator.deleteQuery(em);
-                q.executeUpdate();
-                break;
-            case CONFIG_DATA:
-                generator = new QueryGenerator(CONFIG_DATA);
-                
generator.setParameter(ExperimentConfigurationDataConstants.EXPERIMENT_ID, 
name);
-                q = generator.deleteQuery(em);
-                q.executeUpdate();
-                break;
-            case COMPUTATIONAL_RESOURCE_SCHEDULING:
-                generator = new 
QueryGenerator(COMPUTATIONAL_RESOURCE_SCHEDULING);
-                
generator.setParameter(ComputationalResourceSchedulingConstants.EXPERIMENT_ID, 
name);
-                q = generator.deleteQuery(em);
-                q.executeUpdate();
-                break;
-            case ADVANCE_INPUT_DATA_HANDLING:
-                generator = new QueryGenerator(ADVANCE_INPUT_DATA_HANDLING);
-                
generator.setParameter(AdvancedInputDataHandlingConstants.EXPERIMENT_ID, name);
-                q = generator.deleteQuery(em);
-                q.executeUpdate();
-                break;
-            case ADVANCE_OUTPUT_DATA_HANDLING:
-                generator = new QueryGenerator(ADVANCE_OUTPUT_DATA_HANDLING);
-                
generator.setParameter(AdvancedOutputDataHandlingConstants.EXPERIMENT_ID, name);
-                q = generator.deleteQuery(em);
-                q.executeUpdate();
-                break;
-            case QOS_PARAM:
-                generator = new QueryGenerator(QOS_PARAMS);
-                generator.setParameter(QosParamsConstants.EXPERIMENT_ID, name);
-                q = generator.deleteQuery(em);
-                q.executeUpdate();
-                break;
-            default:
-                logger.error("Unsupported resource type for experiment 
resource.", new IllegalArgumentException());
-                break;
+    public void remove(ResourceType type, Object name) throws 
RegistryException {
+        EntityManager em = null;
+        try {
+            em = ResourceUtils.getEntityManager();
+            em.getTransaction().begin();
+            Query q;
+            QueryGenerator generator;
+            switch (type) {
+                case EXPERIMENT_INPUT:
+                    generator = new QueryGenerator(EXPERIMENT_INPUT);
+                    
generator.setParameter(ExperimentInputConstants.EXPERIMENT_ID, name);
+                    q = generator.deleteQuery(em);
+                    q.executeUpdate();
+                    break;
+                case EXPERIMENT_OUTPUT:
+                    generator = new QueryGenerator(EXPERIMENT_OUTPUT);
+                    
generator.setParameter(ExperimentOutputConstants.EXPERIMENT_ID, name);
+                    q = generator.deleteQuery(em);
+                    q.executeUpdate();
+                    break;
+                case WORKFLOW_NODE_DETAIL:
+                    generator = new QueryGenerator(WORKFLOW_NODE_DETAIL);
+                    
generator.setParameter(WorkflowNodeDetailsConstants.NODE_INSTANCE_ID, name);
+                    q = generator.deleteQuery(em);
+                    q.executeUpdate();
+                    break;
+                case ERROR_DETAIL:
+                    generator = new QueryGenerator(ERROR_DETAIL);
+                    generator.setParameter(ErrorDetailConstants.EXPERIMENT_ID, 
name);
+                    q = generator.deleteQuery(em);
+                    q.executeUpdate();
+                    break;
+                case STATUS:
+                    generator = new QueryGenerator(STATUS);
+                    generator.setParameter(StatusConstants.EXPERIMENT_ID, 
name);
+                    q = generator.deleteQuery(em);
+                    q.executeUpdate();
+                    break;
+                case CONFIG_DATA:
+                    generator = new QueryGenerator(CONFIG_DATA);
+                    
generator.setParameter(ExperimentConfigurationDataConstants.EXPERIMENT_ID, 
name);
+                    q = generator.deleteQuery(em);
+                    q.executeUpdate();
+                    break;
+                case COMPUTATIONAL_RESOURCE_SCHEDULING:
+                    generator = new 
QueryGenerator(COMPUTATIONAL_RESOURCE_SCHEDULING);
+                    
generator.setParameter(ComputationalResourceSchedulingConstants.EXPERIMENT_ID, 
name);
+                    q = generator.deleteQuery(em);
+                    q.executeUpdate();
+                    break;
+                case ADVANCE_INPUT_DATA_HANDLING:
+                    generator = new 
QueryGenerator(ADVANCE_INPUT_DATA_HANDLING);
+                    
generator.setParameter(AdvancedInputDataHandlingConstants.EXPERIMENT_ID, name);
+                    q = generator.deleteQuery(em);
+                    q.executeUpdate();
+                    break;
+                case ADVANCE_OUTPUT_DATA_HANDLING:
+                    generator = new 
QueryGenerator(ADVANCE_OUTPUT_DATA_HANDLING);
+                    
generator.setParameter(AdvancedOutputDataHandlingConstants.EXPERIMENT_ID, name);
+                    q = generator.deleteQuery(em);
+                    q.executeUpdate();
+                    break;
+                case QOS_PARAM:
+                    generator = new QueryGenerator(QOS_PARAMS);
+                    generator.setParameter(QosParamsConstants.EXPERIMENT_ID, 
name);
+                    q = generator.deleteQuery(em);
+                    q.executeUpdate();
+                    break;
+                default:
+                    logger.error("Unsupported resource type for experiment 
resource.", new IllegalArgumentException());
+                    break;
+            }
+            em.getTransaction().commit();
+        } catch (Exception e) {
+            logger.error(e.getMessage(), e);
+            throw new RegistryException(e);
+        } finally {
+            if (em != null && em.isOpen()) {
+                em.close();
+            }
         }
-        em.getTransaction().commit();
-        em.close();
     }
 
     /**
@@ -264,111 +274,120 @@ public class ExperimentResource extends 
AbstractResource {
      * @param name name of the child resource
      * @return UnsupportedOperationException
      */
-    public Resource get(ResourceType type, Object name) {
-       EntityManager em = ResourceUtils.getEntityManager();
-        em.getTransaction().begin();
-        QueryGenerator generator;
-        Query q;
-        switch (type) {
-            case EXPERIMENT_INPUT:
-                generator = new QueryGenerator(EXPERIMENT_INPUT);
-                generator.setParameter(ExperimentInputConstants.EXPERIMENT_ID, 
name);
-                q = generator.selectQuery(em);
-                Experiment_Input experimentInput = 
(Experiment_Input)q.getSingleResult();
-                ExperimentInputResource inputResource = 
(ExperimentInputResource)Utils.getResource(ResourceType.EXPERIMENT_INPUT, 
experimentInput);
-                em.getTransaction().commit();
-                em.close();
-                return inputResource;
-            case EXPERIMENT_OUTPUT:
-                generator = new QueryGenerator(EXPERIMENT_OUTPUT);
-                
generator.setParameter(ExperimentOutputConstants.EXPERIMENT_ID, name);
-                q = generator.selectQuery(em);
-                Experiment_Output experimentOutput = 
(Experiment_Output)q.getSingleResult();
-                ExperimentOutputResource outputResource = 
(ExperimentOutputResource)Utils.getResource(ResourceType.EXPERIMENT_OUTPUT, 
experimentOutput);
-                em.getTransaction().commit();
-                em.close();
-                return outputResource;
-            case WORKFLOW_NODE_DETAIL:
-                generator = new QueryGenerator(WORKFLOW_NODE_DETAIL);
-                
generator.setParameter(WorkflowNodeDetailsConstants.NODE_INSTANCE_ID, name);
-                q = generator.selectQuery(em);
-                WorkflowNodeDetail workflowNodeDetail = 
(WorkflowNodeDetail)q.getSingleResult();
-                WorkflowNodeDetailResource nodeDetailResource = 
(WorkflowNodeDetailResource)Utils.getResource(ResourceType.WORKFLOW_NODE_DETAIL,
 workflowNodeDetail);
-                em.getTransaction().commit();
-                em.close();
-                return nodeDetailResource;
-            case ERROR_DETAIL:
-                generator = new QueryGenerator(ERROR_DETAIL);
-                generator.setParameter(ErrorDetailConstants.EXPERIMENT_ID, 
name);
-                q = generator.selectQuery(em);
-                ErrorDetail errorDetail = (ErrorDetail)q.getSingleResult();
-                ErrorDetailResource errorDetailResource = 
(ErrorDetailResource)Utils.getResource(ResourceType.ERROR_DETAIL, errorDetail);
-                em.getTransaction().commit();
-                em.close();
-                return errorDetailResource;
-            case STATUS:
-                generator = new QueryGenerator(STATUS);
-                generator.setParameter(StatusConstants.EXPERIMENT_ID, name);
-                q = generator.selectQuery(em);
-                Status status = (Status)q.getSingleResult();
-                StatusResource statusResource = 
(StatusResource)Utils.getResource(ResourceType.STATUS, status);
-                em.getTransaction().commit();
-                em.close();
-                return statusResource;
-            case CONFIG_DATA:
-                generator = new QueryGenerator(CONFIG_DATA);
-                
generator.setParameter(ExperimentConfigurationDataConstants.EXPERIMENT_ID, 
name);
-                q = generator.selectQuery(em);
-                ExperimentConfigData configData = 
(ExperimentConfigData)q.getSingleResult();
-                ConfigDataResource configDataResource = 
(ConfigDataResource)Utils.getResource(ResourceType.CONFIG_DATA, configData);
-                em.getTransaction().commit();
-                em.close();
-                return configDataResource;
-            case COMPUTATIONAL_RESOURCE_SCHEDULING:
-                generator = new 
QueryGenerator(COMPUTATIONAL_RESOURCE_SCHEDULING);
-                
generator.setParameter(ComputationalResourceSchedulingConstants.EXPERIMENT_ID, 
name);
-                
generator.setParameter(ComputationalResourceSchedulingConstants.TASK_ID, null);
-                q = generator.selectQuery(em);
-                Computational_Resource_Scheduling scheduling = 
(Computational_Resource_Scheduling)q.getSingleResult();
-                ComputationSchedulingResource schedulingResource = 
(ComputationSchedulingResource)Utils.getResource(ResourceType.COMPUTATIONAL_RESOURCE_SCHEDULING,
 scheduling);
-                em.getTransaction().commit();
-                em.close();
-                return schedulingResource;
-            case ADVANCE_INPUT_DATA_HANDLING:
-                generator = new QueryGenerator(ADVANCE_INPUT_DATA_HANDLING);
-                
generator.setParameter(AdvancedInputDataHandlingConstants.EXPERIMENT_ID, name);
-                
generator.setParameter(AdvancedInputDataHandlingConstants.TASK_ID, null);
-                q = generator.selectQuery(em);
-                AdvancedInputDataHandling inputDataHandling = 
(AdvancedInputDataHandling)q.getSingleResult();
-                AdvanceInputDataHandlingResource dataHandlingResource = 
(AdvanceInputDataHandlingResource)Utils.getResource(ResourceType.ADVANCE_INPUT_DATA_HANDLING,
 inputDataHandling);
-                em.getTransaction().commit();
-                em.close();
-                return dataHandlingResource;
-            case ADVANCE_OUTPUT_DATA_HANDLING:
-                generator = new QueryGenerator(ADVANCE_OUTPUT_DATA_HANDLING);
-                
generator.setParameter(AdvancedOutputDataHandlingConstants.EXPERIMENT_ID, name);
-                
generator.setParameter(AdvancedOutputDataHandlingConstants.TASK_ID, null);
-                q = generator.selectQuery(em);
-                AdvancedOutputDataHandling outputDataHandling = 
(AdvancedOutputDataHandling)q.getSingleResult();
-                AdvancedOutputDataHandlingResource outputDataHandlingResource 
= 
(AdvancedOutputDataHandlingResource)Utils.getResource(ResourceType.ADVANCE_OUTPUT_DATA_HANDLING,
 outputDataHandling);
-                em.getTransaction().commit();
-                em.close();
-                return outputDataHandlingResource;
-            case QOS_PARAM:
-                generator = new QueryGenerator(QOS_PARAMS);
-                generator.setParameter(QosParamsConstants.EXPERIMENT_ID, name);
-                generator.setParameter(QosParamsConstants.TASK_ID, null);
-                q = generator.selectQuery(em);
-                QosParam qosParam = (QosParam)q.getSingleResult();
-                QosParamResource qosParamResource = 
(QosParamResource)Utils.getResource(ResourceType.QOS_PARAM, qosParam);
-                em.getTransaction().commit();
-                em.close();
-                return qosParamResource;
-            default:
-                em.getTransaction().commit();
+    public Resource get(ResourceType type, Object name) throws 
RegistryException {
+        EntityManager em = null;
+        try {
+            em = ResourceUtils.getEntityManager();
+            em.getTransaction().begin();
+            QueryGenerator generator;
+            Query q;
+            switch (type) {
+                case EXPERIMENT_INPUT:
+                    generator = new QueryGenerator(EXPERIMENT_INPUT);
+                    
generator.setParameter(ExperimentInputConstants.EXPERIMENT_ID, name);
+                    q = generator.selectQuery(em);
+                    Experiment_Input experimentInput = (Experiment_Input) 
q.getSingleResult();
+                    ExperimentInputResource inputResource = 
(ExperimentInputResource) Utils.getResource(ResourceType.EXPERIMENT_INPUT, 
experimentInput);
+                    em.getTransaction().commit();
+                    em.close();
+                    return inputResource;
+                case EXPERIMENT_OUTPUT:
+                    generator = new QueryGenerator(EXPERIMENT_OUTPUT);
+                    
generator.setParameter(ExperimentOutputConstants.EXPERIMENT_ID, name);
+                    q = generator.selectQuery(em);
+                    Experiment_Output experimentOutput = (Experiment_Output) 
q.getSingleResult();
+                    ExperimentOutputResource outputResource = 
(ExperimentOutputResource) Utils.getResource(ResourceType.EXPERIMENT_OUTPUT, 
experimentOutput);
+                    em.getTransaction().commit();
+                    em.close();
+                    return outputResource;
+                case WORKFLOW_NODE_DETAIL:
+                    generator = new QueryGenerator(WORKFLOW_NODE_DETAIL);
+                    
generator.setParameter(WorkflowNodeDetailsConstants.NODE_INSTANCE_ID, name);
+                    q = generator.selectQuery(em);
+                    WorkflowNodeDetail workflowNodeDetail = 
(WorkflowNodeDetail) q.getSingleResult();
+                    WorkflowNodeDetailResource nodeDetailResource = 
(WorkflowNodeDetailResource) 
Utils.getResource(ResourceType.WORKFLOW_NODE_DETAIL, workflowNodeDetail);
+                    em.getTransaction().commit();
+                    em.close();
+                    return nodeDetailResource;
+                case ERROR_DETAIL:
+                    generator = new QueryGenerator(ERROR_DETAIL);
+                    generator.setParameter(ErrorDetailConstants.EXPERIMENT_ID, 
name);
+                    q = generator.selectQuery(em);
+                    ErrorDetail errorDetail = (ErrorDetail) 
q.getSingleResult();
+                    ErrorDetailResource errorDetailResource = 
(ErrorDetailResource) Utils.getResource(ResourceType.ERROR_DETAIL, errorDetail);
+                    em.getTransaction().commit();
+                    em.close();
+                    return errorDetailResource;
+                case STATUS:
+                    generator = new QueryGenerator(STATUS);
+                    generator.setParameter(StatusConstants.EXPERIMENT_ID, 
name);
+                    q = generator.selectQuery(em);
+                    Status status = (Status) q.getSingleResult();
+                    StatusResource statusResource = (StatusResource) 
Utils.getResource(ResourceType.STATUS, status);
+                    em.getTransaction().commit();
+                    em.close();
+                    return statusResource;
+                case CONFIG_DATA:
+                    generator = new QueryGenerator(CONFIG_DATA);
+                    
generator.setParameter(ExperimentConfigurationDataConstants.EXPERIMENT_ID, 
name);
+                    q = generator.selectQuery(em);
+                    ExperimentConfigData configData = (ExperimentConfigData) 
q.getSingleResult();
+                    ConfigDataResource configDataResource = 
(ConfigDataResource) Utils.getResource(ResourceType.CONFIG_DATA, configData);
+                    em.getTransaction().commit();
+                    em.close();
+                    return configDataResource;
+                case COMPUTATIONAL_RESOURCE_SCHEDULING:
+                    generator = new 
QueryGenerator(COMPUTATIONAL_RESOURCE_SCHEDULING);
+                    
generator.setParameter(ComputationalResourceSchedulingConstants.EXPERIMENT_ID, 
name);
+                    
generator.setParameter(ComputationalResourceSchedulingConstants.TASK_ID, null);
+                    q = generator.selectQuery(em);
+                    Computational_Resource_Scheduling scheduling = 
(Computational_Resource_Scheduling) q.getSingleResult();
+                    ComputationSchedulingResource schedulingResource = 
(ComputationSchedulingResource) 
Utils.getResource(ResourceType.COMPUTATIONAL_RESOURCE_SCHEDULING, scheduling);
+                    em.getTransaction().commit();
+                    em.close();
+                    return schedulingResource;
+                case ADVANCE_INPUT_DATA_HANDLING:
+                    generator = new 
QueryGenerator(ADVANCE_INPUT_DATA_HANDLING);
+                    
generator.setParameter(AdvancedInputDataHandlingConstants.EXPERIMENT_ID, name);
+                    
generator.setParameter(AdvancedInputDataHandlingConstants.TASK_ID, null);
+                    q = generator.selectQuery(em);
+                    AdvancedInputDataHandling inputDataHandling = 
(AdvancedInputDataHandling) q.getSingleResult();
+                    AdvanceInputDataHandlingResource dataHandlingResource = 
(AdvanceInputDataHandlingResource) 
Utils.getResource(ResourceType.ADVANCE_INPUT_DATA_HANDLING, inputDataHandling);
+                    em.getTransaction().commit();
+                    em.close();
+                    return dataHandlingResource;
+                case ADVANCE_OUTPUT_DATA_HANDLING:
+                    generator = new 
QueryGenerator(ADVANCE_OUTPUT_DATA_HANDLING);
+                    
generator.setParameter(AdvancedOutputDataHandlingConstants.EXPERIMENT_ID, name);
+                    
generator.setParameter(AdvancedOutputDataHandlingConstants.TASK_ID, null);
+                    q = generator.selectQuery(em);
+                    AdvancedOutputDataHandling outputDataHandling = 
(AdvancedOutputDataHandling) q.getSingleResult();
+                    AdvancedOutputDataHandlingResource 
outputDataHandlingResource = (AdvancedOutputDataHandlingResource) 
Utils.getResource(ResourceType.ADVANCE_OUTPUT_DATA_HANDLING, 
outputDataHandling);
+                    em.getTransaction().commit();
+                    em.close();
+                    return outputDataHandlingResource;
+                case QOS_PARAM:
+                    generator = new QueryGenerator(QOS_PARAMS);
+                    generator.setParameter(QosParamsConstants.EXPERIMENT_ID, 
name);
+                    generator.setParameter(QosParamsConstants.TASK_ID, null);
+                    q = generator.selectQuery(em);
+                    QosParam qosParam = (QosParam) q.getSingleResult();
+                    QosParamResource qosParamResource = (QosParamResource) 
Utils.getResource(ResourceType.QOS_PARAM, qosParam);
+                    em.getTransaction().commit();
+                    em.close();
+                    return qosParamResource;
+                default:
+                    em.getTransaction().commit();
+                    em.close();
+                    logger.error("Unsupported resource type for experiment 
resource.", new IllegalArgumentException());
+                    throw new IllegalArgumentException("Unsupported resource 
type for experiment data resource.");
+            }
+        } catch (Exception e) {
+            throw new RegistryException(e);
+        } finally {
+            if (em != null && em.isOpen()) {
                 em.close();
-                logger.error("Unsupported resource type for experiment 
resource.", new IllegalArgumentException());
-                throw new IllegalArgumentException("Unsupported resource type 
for experiment data resource.");
+            }
         }
 
     }
@@ -378,141 +397,159 @@ public class ExperimentResource extends 
AbstractResource {
      * @param type  child resource types
      * @return UnsupportedOperationException
      */
-    public List<Resource> get(ResourceType type) {
+    public List<Resource> get(ResourceType type)  throws RegistryException{
         List<Resource> resourceList = new ArrayList<Resource>();
-        EntityManager em = ResourceUtils.getEntityManager();
-        em.getTransaction().begin();
-        Query q;
-        QueryGenerator generator;
-        List results;
-        switch (type){
-            case EXPERIMENT_INPUT:
-                generator = new QueryGenerator(EXPERIMENT_INPUT);
-                generator.setParameter(ExperimentInputConstants.EXPERIMENT_ID, 
expID);
-                q = generator.selectQuery(em);
-                results = q.getResultList();
-                if (results.size() != 0) {
-                    for (Object result : results) {
-                        Experiment_Input exInput = (Experiment_Input) result;
-                        ExperimentInputResource inputResource =
-                                
(ExperimentInputResource)Utils.getResource(ResourceType.EXPERIMENT_INPUT, 
exInput);
-                        resourceList.add(inputResource);
+        EntityManager em = null;
+        try {
+            em = ResourceUtils.getEntityManager();
+            em.getTransaction().begin();
+            Query q;
+            QueryGenerator generator;
+            List results;
+            switch (type) {
+                case EXPERIMENT_INPUT:
+                    generator = new QueryGenerator(EXPERIMENT_INPUT);
+                    
generator.setParameter(ExperimentInputConstants.EXPERIMENT_ID, expID);
+                    q = generator.selectQuery(em);
+                    results = q.getResultList();
+                    if (results.size() != 0) {
+                        for (Object result : results) {
+                            Experiment_Input exInput = (Experiment_Input) 
result;
+                            ExperimentInputResource inputResource =
+                                    (ExperimentInputResource) 
Utils.getResource(ResourceType.EXPERIMENT_INPUT, exInput);
+                            resourceList.add(inputResource);
+                        }
                     }
-                }
-                break;
-            case EXPERIMENT_OUTPUT:
-                generator = new QueryGenerator(EXPERIMENT_OUTPUT);
-                
generator.setParameter(ExperimentOutputConstants.EXPERIMENT_ID, expID);
-                q = generator.selectQuery(em);
-                results = q.getResultList();
-                if (results.size() != 0) {
-                    for (Object result : results) {
-                        Experiment_Output output = (Experiment_Output) result;
-                        ExperimentOutputResource outputResource =
-                                
(ExperimentOutputResource)Utils.getResource(ResourceType.EXPERIMENT_OUTPUT, 
output);
-                        resourceList.add(outputResource);
+                    break;
+                case EXPERIMENT_OUTPUT:
+                    generator = new QueryGenerator(EXPERIMENT_OUTPUT);
+                    
generator.setParameter(ExperimentOutputConstants.EXPERIMENT_ID, expID);
+                    q = generator.selectQuery(em);
+                    results = q.getResultList();
+                    if (results.size() != 0) {
+                        for (Object result : results) {
+                            Experiment_Output output = (Experiment_Output) 
result;
+                            ExperimentOutputResource outputResource =
+                                    (ExperimentOutputResource) 
Utils.getResource(ResourceType.EXPERIMENT_OUTPUT, output);
+                            resourceList.add(outputResource);
+                        }
                     }
-                }
-                break;
-            case WORKFLOW_NODE_DETAIL:
-                generator = new QueryGenerator(WORKFLOW_NODE_DETAIL);
-                
generator.setParameter(WorkflowNodeDetailsConstants.EXPERIMENT_ID, expID);
-                q = generator.selectQuery(em);
-                results = q.getResultList();
-                if (results.size() != 0) {
-                    for (Object result : results) {
-                        WorkflowNodeDetail nodeDetail = (WorkflowNodeDetail) 
result;
-                        WorkflowNodeDetailResource nodeDetailResource =
-                                
(WorkflowNodeDetailResource)Utils.getResource(ResourceType.WORKFLOW_NODE_DETAIL,
 nodeDetail);
-                        resourceList.add(nodeDetailResource);
+                    break;
+                case WORKFLOW_NODE_DETAIL:
+                    generator = new QueryGenerator(WORKFLOW_NODE_DETAIL);
+                    
generator.setParameter(WorkflowNodeDetailsConstants.EXPERIMENT_ID, expID);
+                    q = generator.selectQuery(em);
+                    results = q.getResultList();
+                    if (results.size() != 0) {
+                        for (Object result : results) {
+                            WorkflowNodeDetail nodeDetail = 
(WorkflowNodeDetail) result;
+                            WorkflowNodeDetailResource nodeDetailResource =
+                                    (WorkflowNodeDetailResource) 
Utils.getResource(ResourceType.WORKFLOW_NODE_DETAIL, nodeDetail);
+                            resourceList.add(nodeDetailResource);
+                        }
                     }
-                }
-                break;
-            case ERROR_DETAIL:
-                generator = new QueryGenerator(ERROR_DETAIL);
-                generator.setParameter(ErrorDetailConstants.EXPERIMENT_ID, 
expID);
-                q = generator.selectQuery(em);
-                results = q.getResultList();
-                if (results.size() != 0) {
-                    for (Object result : results) {
-                        ErrorDetail errorDetail = (ErrorDetail) result;
-                        ErrorDetailResource errorDetailResource =
-                                
(ErrorDetailResource)Utils.getResource(ResourceType.ERROR_DETAIL, errorDetail);
-                        resourceList.add(errorDetailResource);
+                    break;
+                case ERROR_DETAIL:
+                    generator = new QueryGenerator(ERROR_DETAIL);
+                    generator.setParameter(ErrorDetailConstants.EXPERIMENT_ID, 
expID);
+                    q = generator.selectQuery(em);
+                    results = q.getResultList();
+                    if (results.size() != 0) {
+                        for (Object result : results) {
+                            ErrorDetail errorDetail = (ErrorDetail) result;
+                            ErrorDetailResource errorDetailResource =
+                                    (ErrorDetailResource) 
Utils.getResource(ResourceType.ERROR_DETAIL, errorDetail);
+                            resourceList.add(errorDetailResource);
+                        }
                     }
-                }
-                break;
-            case STATUS:
-                generator = new QueryGenerator(STATUS);
-                generator.setParameter(StatusConstants.EXPERIMENT_ID, expID);
-                q = generator.selectQuery(em);
-                results = q.getResultList();
-                if (results.size() != 0) {
-                    for (Object result : results) {
-                        Status status = (Status) result;
-                        StatusResource statusResource =
-                                
(StatusResource)Utils.getResource(ResourceType.STATUS, status);
-                        resourceList.add(statusResource);
+                    break;
+                case STATUS:
+                    generator = new QueryGenerator(STATUS);
+                    generator.setParameter(StatusConstants.EXPERIMENT_ID, 
expID);
+                    q = generator.selectQuery(em);
+                    results = q.getResultList();
+                    if (results.size() != 0) {
+                        for (Object result : results) {
+                            Status status = (Status) result;
+                            StatusResource statusResource =
+                                    (StatusResource) 
Utils.getResource(ResourceType.STATUS, status);
+                            resourceList.add(statusResource);
+                        }
                     }
-                }
-                break;
-            default:
-                em.getTransaction().commit();
+                    break;
+                default:
+                    em.getTransaction().commit();
+                    em.close();
+                    logger.error("Unsupported resource type for experiment 
resource.", new UnsupportedOperationException());
+                    throw new UnsupportedOperationException();
+            }
+            em.getTransaction().commit();
+        } catch (Exception e) {
+            logger.error(e.getMessage(), e);
+            throw new RegistryException(e);
+        } finally {
+            if (em != null && em.isOpen()) {
                 em.close();
-                logger.error("Unsupported resource type for experiment 
resource.", new UnsupportedOperationException());
-                throw new UnsupportedOperationException();
+            }
         }
-        em.getTransaction().commit();
-        em.close();
         return resourceList;
     }
 
     /**
      * save experiment
      */
-    public void save() {
-        EntityManager em = ResourceUtils.getEntityManager();
-        Experiment existingExp = em.find(Experiment.class, expID);
-        em.close();
-
-        em = ResourceUtils.getEntityManager();
-        em.getTransaction().begin();
-        Experiment experiment = new Experiment();
-        Project projectmodel = em.find(Project.class, project.getId());
-        experiment.setProject(projectmodel);
-        Gateway gateway = em.find(Gateway.class, 
getGateway().getGatewayName());
-        experiment.setExpId(expID);
-        experiment.setExecutionUser(executionUser);
-        Users userModel = em.find(Users.class, executionUser);
-        experiment.setUser(userModel);
-        experiment.setGateway(gateway);
-        experiment.setCreationTime(creationTime);
-        experiment.setExpName(expName);
-        experiment.setExpDesc(description);
-        experiment.setApplicationId(applicationId);
-        experiment.setAppVersion(applicationVersion);
-        experiment.setWorkflowExecutionId(workflowExecutionId);
-        experiment.setWorkflowTemplateVersion(workflowTemplateVersion);
-        experiment.setWorkflowExecutionId(workflowExecutionId);
-        if(existingExp != null){
-            existingExp.setGateway(gateway);
-            existingExp.setProject(projectmodel);
-            existingExp.setExecutionUser(executionUser);
+    public void save() throws RegistryException{
+        EntityManager em = null;
+        try {
+            em = ResourceUtils.getEntityManager();
+            Experiment existingExp = em.find(Experiment.class, expID);
+            em.close();
+
+            em = ResourceUtils.getEntityManager();
+            em.getTransaction().begin();
+            Experiment experiment = new Experiment();
+            Project projectmodel = em.find(Project.class, project.getId());
+            experiment.setProject(projectmodel);
+            Gateway gateway = em.find(Gateway.class, 
getGateway().getGatewayName());
+            experiment.setExpId(expID);
+            experiment.setExecutionUser(executionUser);
+            Users userModel = em.find(Users.class, executionUser);
             experiment.setUser(userModel);
-            existingExp.setCreationTime(creationTime);
-            existingExp.setExpName(expName);
-            existingExp.setExpDesc(description);
-            existingExp.setApplicationId(applicationId);
-            existingExp.setAppVersion(applicationVersion);
-            existingExp.setWorkflowExecutionId(workflowExecutionId);
-            existingExp.setWorkflowTemplateVersion(workflowTemplateVersion);
-            existingExp.setWorkflowExecutionId(workflowExecutionId);
-            experiment = em.merge(existingExp);
-        } else{
-           em.merge(experiment);
+            experiment.setGateway(gateway);
+            experiment.setCreationTime(creationTime);
+            experiment.setExpName(expName);
+            experiment.setExpDesc(description);
+            experiment.setApplicationId(applicationId);
+            experiment.setAppVersion(applicationVersion);
+            experiment.setWorkflowExecutionId(workflowExecutionId);
+            experiment.setWorkflowTemplateVersion(workflowTemplateVersion);
+            experiment.setWorkflowExecutionId(workflowExecutionId);
+            if (existingExp != null) {
+                existingExp.setGateway(gateway);
+                existingExp.setProject(projectmodel);
+                existingExp.setExecutionUser(executionUser);
+                experiment.setUser(userModel);
+                existingExp.setCreationTime(creationTime);
+                existingExp.setExpName(expName);
+                existingExp.setExpDesc(description);
+                existingExp.setApplicationId(applicationId);
+                existingExp.setAppVersion(applicationVersion);
+                existingExp.setWorkflowExecutionId(workflowExecutionId);
+                
existingExp.setWorkflowTemplateVersion(workflowTemplateVersion);
+                existingExp.setWorkflowExecutionId(workflowExecutionId);
+                experiment = em.merge(existingExp);
+            } else {
+                em.merge(experiment);
+            }
+            em.getTransaction().commit();
+        } catch (Exception e) {
+            logger.error(e.getMessage(), e);
+            throw new RegistryException(e);
+        } finally {
+            if (em != null && em.isOpen()) {
+                em.close();
+            }
         }
-        em.getTransaction().commit();
-        em.close();
     }
 
     /**
@@ -563,7 +600,7 @@ public class ExperimentResource extends AbstractResource {
                this.project = project;
        }
 
-    public List<ExperimentInputResource> getExperimentInputs (){
+    public List<ExperimentInputResource> getExperimentInputs () throws 
RegistryException{
         List<ExperimentInputResource> expInputs = new 
ArrayList<ExperimentInputResource>();
         List<Resource> resources = get(ResourceType.EXPERIMENT_INPUT);
         for (Resource resource : resources) {
@@ -572,7 +609,7 @@ public class ExperimentResource extends AbstractResource {
         return expInputs;
     }
 
-    public List<ExperimentOutputResource> getExperimentOutputs (){
+    public List<ExperimentOutputResource> getExperimentOutputs () throws 
RegistryException{
         List<ExperimentOutputResource> expOutputs = new 
ArrayList<ExperimentOutputResource>();
         List<Resource> resources = get(ResourceType.EXPERIMENT_OUTPUT);
         for (Resource resource : resources) {
@@ -581,7 +618,7 @@ public class ExperimentResource extends AbstractResource {
         return expOutputs;
     }
 
-    public StatusResource getExperimentStatus(){
+    public StatusResource getExperimentStatus() throws RegistryException{
         List<Resource> resources = get(ResourceType.STATUS);
         for (Resource resource : resources) {
             StatusResource expStatus = (StatusResource) resource;
@@ -595,7 +632,7 @@ public class ExperimentResource extends AbstractResource {
         return null;
     }
 
-    public List<StatusResource> getWorkflowNodeStatuses(){
+    public List<StatusResource> getWorkflowNodeStatuses() throws 
RegistryException{
         List<StatusResource> statuses = new ArrayList<StatusResource>();
         List<Resource> resources = get(ResourceType.STATUS);
         for (Resource resource : resources) {
@@ -610,7 +647,7 @@ public class ExperimentResource extends AbstractResource {
         return statuses;
     }
 
-    public List<WorkflowNodeDetailResource> getWorkflowNodeDetails (){
+    public List<WorkflowNodeDetailResource> getWorkflowNodeDetails () throws 
RegistryException{
         List<WorkflowNodeDetailResource> workflowNodeDetailResourceList = new 
ArrayList<WorkflowNodeDetailResource>();
         List<Resource> resources = get(ResourceType.WORKFLOW_NODE_DETAIL);
         for (Resource resource : resources) {
@@ -620,7 +657,7 @@ public class ExperimentResource extends AbstractResource {
         return workflowNodeDetailResourceList;
     }
 
-    public List<ErrorDetailResource> getErrorDetails (){
+    public List<ErrorDetailResource> getErrorDetails () throws 
RegistryException{
         List<ErrorDetailResource> errorDetailResources = new 
ArrayList<ErrorDetailResource>();
         List<Resource> resources = get(ResourceType.ERROR_DETAIL);
         for (Resource resource : resources) {
@@ -630,26 +667,26 @@ public class ExperimentResource extends AbstractResource {
         return errorDetailResources;
     }
 
-    public ComputationSchedulingResource getComputationScheduling (String 
expId){
+    public ComputationSchedulingResource getComputationScheduling (String 
expId) throws RegistryException{
         return  
(ComputationSchedulingResource)get(ResourceType.COMPUTATIONAL_RESOURCE_SCHEDULING,
 expId);
     }
 
-    public AdvanceInputDataHandlingResource getInputDataHandling (String 
expId){
+    public AdvanceInputDataHandlingResource getInputDataHandling (String 
expId) throws RegistryException{
         return  
(AdvanceInputDataHandlingResource)get(ResourceType.ADVANCE_INPUT_DATA_HANDLING, 
expId);
     }
 
-    public AdvancedOutputDataHandlingResource getOutputDataHandling (String 
expId){
+    public AdvancedOutputDataHandlingResource getOutputDataHandling (String 
expId) throws RegistryException{
         return  
(AdvancedOutputDataHandlingResource)get(ResourceType.ADVANCE_OUTPUT_DATA_HANDLING,
 expId);
     }
 
-    public QosParamResource getQOSparams (String expId){
+    public QosParamResource getQOSparams (String expId) throws 
RegistryException{
         return  (QosParamResource)get(ResourceType.QOS_PARAM, expId);
     }
 
-    public ConfigDataResource getUserConfigData(String expID){
+    public ConfigDataResource getUserConfigData(String expID) throws 
RegistryException{
         return (ConfigDataResource)get(ResourceType.CONFIG_DATA, expID);
     }
-    public WorkflowNodeDetailResource getWorkflowNode (String nodeId){
+    public WorkflowNodeDetailResource getWorkflowNode (String nodeId) throws 
RegistryException{
         return 
(WorkflowNodeDetailResource)get(ResourceType.WORKFLOW_NODE_DETAIL, nodeId);
     }
 }

Reply via email to