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 2014/05/30 21:53:59 UTC

[04/11] adding proper entity manager closing and exception handling - AIRAVATA-1285

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/TaskDetailResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/TaskDetailResource.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/TaskDetailResource.java
index 1dcec6d..29b45f9 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/TaskDetailResource.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/TaskDetailResource.java
@@ -26,10 +26,11 @@ 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.utils.Constants;
+import org.apache.airavata.registry.cpi.Registry;
 import org.apache.airavata.registry.cpi.utils.StatusType;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.apache.airavata.registry.cpi.RegistryException;
 
 import javax.persistence.EntityManager;
 import javax.persistence.Query;
@@ -85,8 +86,8 @@ public class TaskDetailResource extends AbstractResource {
         this.applicationVersion = applicationVersion;
     }
 
-    @Override
-    public Resource create(ResourceType type) {
+    
+    public Resource create(ResourceType type) throws RegistryException{
        switch (type){
            case ERROR_DETAIL:
                ErrorDetailResource errorDetailResource = new ErrorDetailResource();
@@ -134,324 +135,361 @@ public class TaskDetailResource extends AbstractResource {
        }
     }
 
-    @Override
-    public void remove(ResourceType type, Object name) {
-        EntityManager em = ResourceUtils.getEntityManager();
-        em.getTransaction().begin();
-        Query q;
-        QueryGenerator generator;
-        switch (type){
-            case ERROR_DETAIL:
-                generator = new QueryGenerator(ERROR_DETAIL);
-                generator.setParameter(ErrorDetailConstants.TASK_ID, name);
-                q = generator.deleteQuery(em);
-                q.executeUpdate();
-                break;
-            case APPLICATION_INPUT:
-                generator = new QueryGenerator(APPLICATION_INPUT);
-                generator.setParameter(ApplicationInputConstants.TASK_ID, name);
-                q = generator.deleteQuery(em);
-                q.executeUpdate();
-                break;
-            case APPLICATION_OUTPUT:
-                generator = new QueryGenerator(APPLICATION_OUTPUT);
-                generator.setParameter(ApplicationOutputConstants.TASK_ID, name);
-                q = generator.deleteQuery(em);
-                q.executeUpdate();
-                break;
-            case JOB_DETAIL:
-                generator = new QueryGenerator(JOB_DETAIL);
-                generator.setParameter(JobDetailConstants.TASK_ID, taskId);
-                generator.setParameter(JobDetailConstants.JOB_ID, name);
-                q = generator.deleteQuery(em);
-                q.executeUpdate();
-                break;
-            case DATA_TRANSFER_DETAIL:
-                generator = new QueryGenerator(DATA_TRANSFER_DETAIL);
-                generator.setParameter(DataTransferDetailConstants.TRANSFER_ID, name);
-                q = generator.deleteQuery(em);
-                q.executeUpdate();
-                break;
-            case STATUS:
-                generator = new QueryGenerator(STATUS);
-                generator.setParameter(StatusConstants.TASK_ID, name);
-                q = generator.deleteQuery(em);
-                q.executeUpdate();
-                break;
-            case COMPUTATIONAL_RESOURCE_SCHEDULING:
-                generator = new QueryGenerator(COMPUTATIONAL_RESOURCE_SCHEDULING);
-                generator.setParameter(ComputationalResourceSchedulingConstants.TASK_ID, name);
-                q = generator.deleteQuery(em);
-                q.executeUpdate();
-                break;
-            case ADVANCE_INPUT_DATA_HANDLING:
-                generator = new QueryGenerator(ADVANCE_INPUT_DATA_HANDLING);
-                generator.setParameter(AdvancedInputDataHandlingConstants.TASK_ID, name);
-                q = generator.deleteQuery(em);
-                q.executeUpdate();
-                break;
-            case ADVANCE_OUTPUT_DATA_HANDLING:
-                generator = new QueryGenerator(ADVANCE_OUTPUT_DATA_HANDLING);
-                generator.setParameter(AdvancedOutputDataHandlingConstants.TASK_ID, name);
-                q = generator.deleteQuery(em);
-                q.executeUpdate();
-                break;
-            case QOS_PARAM:
-                generator = new QueryGenerator(QOS_PARAMS);
-                generator.setParameter(QosParamsConstants.TASK_ID, name);
-                q = generator.deleteQuery(em);
-                q.executeUpdate();
-                break;
-            default:
-                logger.error("Unsupported resource type for task detail 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 ERROR_DETAIL:
+                    generator = new QueryGenerator(ERROR_DETAIL);
+                    generator.setParameter(ErrorDetailConstants.TASK_ID, name);
+                    q = generator.deleteQuery(em);
+                    q.executeUpdate();
+                    break;
+                case APPLICATION_INPUT:
+                    generator = new QueryGenerator(APPLICATION_INPUT);
+                    generator.setParameter(ApplicationInputConstants.TASK_ID, name);
+                    q = generator.deleteQuery(em);
+                    q.executeUpdate();
+                    break;
+                case APPLICATION_OUTPUT:
+                    generator = new QueryGenerator(APPLICATION_OUTPUT);
+                    generator.setParameter(ApplicationOutputConstants.TASK_ID, name);
+                    q = generator.deleteQuery(em);
+                    q.executeUpdate();
+                    break;
+                case JOB_DETAIL:
+                    generator = new QueryGenerator(JOB_DETAIL);
+                    generator.setParameter(JobDetailConstants.TASK_ID, taskId);
+                    generator.setParameter(JobDetailConstants.JOB_ID, name);
+                    q = generator.deleteQuery(em);
+                    q.executeUpdate();
+                    break;
+                case DATA_TRANSFER_DETAIL:
+                    generator = new QueryGenerator(DATA_TRANSFER_DETAIL);
+                    generator.setParameter(DataTransferDetailConstants.TRANSFER_ID, name);
+                    q = generator.deleteQuery(em);
+                    q.executeUpdate();
+                    break;
+                case STATUS:
+                    generator = new QueryGenerator(STATUS);
+                    generator.setParameter(StatusConstants.TASK_ID, name);
+                    q = generator.deleteQuery(em);
+                    q.executeUpdate();
+                    break;
+                case COMPUTATIONAL_RESOURCE_SCHEDULING:
+                    generator = new QueryGenerator(COMPUTATIONAL_RESOURCE_SCHEDULING);
+                    generator.setParameter(ComputationalResourceSchedulingConstants.TASK_ID, name);
+                    q = generator.deleteQuery(em);
+                    q.executeUpdate();
+                    break;
+                case ADVANCE_INPUT_DATA_HANDLING:
+                    generator = new QueryGenerator(ADVANCE_INPUT_DATA_HANDLING);
+                    generator.setParameter(AdvancedInputDataHandlingConstants.TASK_ID, name);
+                    q = generator.deleteQuery(em);
+                    q.executeUpdate();
+                    break;
+                case ADVANCE_OUTPUT_DATA_HANDLING:
+                    generator = new QueryGenerator(ADVANCE_OUTPUT_DATA_HANDLING);
+                    generator.setParameter(AdvancedOutputDataHandlingConstants.TASK_ID, name);
+                    q = generator.deleteQuery(em);
+                    q.executeUpdate();
+                    break;
+                case QOS_PARAM:
+                    generator = new QueryGenerator(QOS_PARAMS);
+                    generator.setParameter(QosParamsConstants.TASK_ID, name);
+                    q = generator.deleteQuery(em);
+                    q.executeUpdate();
+                    break;
+                default:
+                    logger.error("Unsupported resource type for task detail 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();
     }
 
-    @Override
-    public Resource get(ResourceType type, Object name) {
-        EntityManager em = ResourceUtils.getEntityManager();
-        em.getTransaction().begin();
-        QueryGenerator generator;
-        Query q;
-        switch (type) {
-            case ERROR_DETAIL:
-                generator = new QueryGenerator(ERROR_DETAIL);
-                generator.setParameter(ErrorDetailConstants.TASK_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 APPLICATION_INPUT:
-                generator = new QueryGenerator(APPLICATION_INPUT);
-                generator.setParameter(ApplicationInputConstants.TASK_ID, name);
-                q = generator.selectQuery(em);
-                ApplicationInput applicationInput = (ApplicationInput)q.getSingleResult();
-                ApplicationInputResource inputResource = (ApplicationInputResource)Utils.getResource(ResourceType.APPLICATION_INPUT, applicationInput);
-                em.getTransaction().commit();
-                em.close();
-                return inputResource;
-            case APPLICATION_OUTPUT:
-                generator = new QueryGenerator(APPLICATION_OUTPUT);
-                generator.setParameter(ApplicationOutputConstants.TASK_ID, name);
-                q = generator.selectQuery(em);
-                ApplicationOutput applicationOutput = (ApplicationOutput)q.getSingleResult();
-                ApplicationOutputResource outputResource = (ApplicationOutputResource)Utils.getResource(ResourceType.APPLICATION_OUTPUT, applicationOutput);
-                em.getTransaction().commit();
-                em.close();
-                return outputResource;
-            case JOB_DETAIL:
-                generator = new QueryGenerator(JOB_DETAIL);
-                generator.setParameter(JobDetailConstants.JOB_ID, name);
-                generator.setParameter(JobDetailConstants.TASK_ID, taskId);
-                q = generator.selectQuery(em);
-                JobDetail jobDetail = (JobDetail)q.getSingleResult();
-                JobDetailResource jobDetailResource = (JobDetailResource)Utils.getResource(ResourceType.JOB_DETAIL, jobDetail);
-                em.getTransaction().commit();
-                em.close();
-                return jobDetailResource;
-            case DATA_TRANSFER_DETAIL:
-                generator = new QueryGenerator(DATA_TRANSFER_DETAIL);
-                generator.setParameter(DataTransferDetailConstants.TRANSFER_ID, name);
-                q = generator.selectQuery(em);
-                DataTransferDetail transferDetail = (DataTransferDetail)q.getSingleResult();
-                DataTransferDetailResource transferDetailResource = (DataTransferDetailResource)Utils.getResource(ResourceType.DATA_TRANSFER_DETAIL, transferDetail);
-                em.getTransaction().commit();
-                em.close();
-                return transferDetailResource;
-            case STATUS:
-                generator = new QueryGenerator(STATUS);
-                generator.setParameter(StatusConstants.TASK_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 COMPUTATIONAL_RESOURCE_SCHEDULING:
-                generator = new QueryGenerator(COMPUTATIONAL_RESOURCE_SCHEDULING);
-                generator.setParameter(ComputationalResourceSchedulingConstants.TASK_ID, name);
-                q = generator.selectQuery(em);
-                Computational_Resource_Scheduling resourceScheduling = (Computational_Resource_Scheduling)q.getSingleResult();
-                ComputationSchedulingResource schedulingResource = (ComputationSchedulingResource)Utils.getResource(ResourceType.COMPUTATIONAL_RESOURCE_SCHEDULING, resourceScheduling);
-                em.getTransaction().commit();
-                em.close();
-                return schedulingResource;
-            case ADVANCE_INPUT_DATA_HANDLING:
-                generator = new QueryGenerator(ADVANCE_INPUT_DATA_HANDLING);
-                generator.setParameter(AdvancedInputDataHandlingConstants.TASK_ID, name);
-                q = generator.selectQuery(em);
-                AdvancedInputDataHandling dataHandling = (AdvancedInputDataHandling)q.getSingleResult();
-                AdvanceInputDataHandlingResource inputDataHandlingResource = (AdvanceInputDataHandlingResource)Utils.getResource(ResourceType.ADVANCE_INPUT_DATA_HANDLING, dataHandling);
-                em.getTransaction().commit();
-                em.close();
-                return inputDataHandlingResource;
-            case ADVANCE_OUTPUT_DATA_HANDLING:
-                generator = new QueryGenerator(ADVANCE_OUTPUT_DATA_HANDLING);
-                generator.setParameter(AdvancedOutputDataHandlingConstants.TASK_ID, name);
-                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.TASK_ID, name);
-                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 ERROR_DETAIL:
+                    generator = new QueryGenerator(ERROR_DETAIL);
+                    generator.setParameter(ErrorDetailConstants.TASK_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 APPLICATION_INPUT:
+                    generator = new QueryGenerator(APPLICATION_INPUT);
+                    generator.setParameter(ApplicationInputConstants.TASK_ID, name);
+                    q = generator.selectQuery(em);
+                    ApplicationInput applicationInput = (ApplicationInput) q.getSingleResult();
+                    ApplicationInputResource inputResource = (ApplicationInputResource) Utils.getResource(ResourceType.APPLICATION_INPUT, applicationInput);
+                    em.getTransaction().commit();
+                    em.close();
+                    return inputResource;
+                case APPLICATION_OUTPUT:
+                    generator = new QueryGenerator(APPLICATION_OUTPUT);
+                    generator.setParameter(ApplicationOutputConstants.TASK_ID, name);
+                    q = generator.selectQuery(em);
+                    ApplicationOutput applicationOutput = (ApplicationOutput) q.getSingleResult();
+                    ApplicationOutputResource outputResource = (ApplicationOutputResource) Utils.getResource(ResourceType.APPLICATION_OUTPUT, applicationOutput);
+                    em.getTransaction().commit();
+                    em.close();
+                    return outputResource;
+                case JOB_DETAIL:
+                    generator = new QueryGenerator(JOB_DETAIL);
+                    generator.setParameter(JobDetailConstants.JOB_ID, name);
+                    generator.setParameter(JobDetailConstants.TASK_ID, taskId);
+                    q = generator.selectQuery(em);
+                    JobDetail jobDetail = (JobDetail) q.getSingleResult();
+                    JobDetailResource jobDetailResource = (JobDetailResource) Utils.getResource(ResourceType.JOB_DETAIL, jobDetail);
+                    em.getTransaction().commit();
+                    em.close();
+                    return jobDetailResource;
+                case DATA_TRANSFER_DETAIL:
+                    generator = new QueryGenerator(DATA_TRANSFER_DETAIL);
+                    generator.setParameter(DataTransferDetailConstants.TRANSFER_ID, name);
+                    q = generator.selectQuery(em);
+                    DataTransferDetail transferDetail = (DataTransferDetail) q.getSingleResult();
+                    DataTransferDetailResource transferDetailResource = (DataTransferDetailResource) Utils.getResource(ResourceType.DATA_TRANSFER_DETAIL, transferDetail);
+                    em.getTransaction().commit();
+                    em.close();
+                    return transferDetailResource;
+                case STATUS:
+                    generator = new QueryGenerator(STATUS);
+                    generator.setParameter(StatusConstants.TASK_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 COMPUTATIONAL_RESOURCE_SCHEDULING:
+                    generator = new QueryGenerator(COMPUTATIONAL_RESOURCE_SCHEDULING);
+                    generator.setParameter(ComputationalResourceSchedulingConstants.TASK_ID, name);
+                    q = generator.selectQuery(em);
+                    Computational_Resource_Scheduling resourceScheduling = (Computational_Resource_Scheduling) q.getSingleResult();
+                    ComputationSchedulingResource schedulingResource = (ComputationSchedulingResource) Utils.getResource(ResourceType.COMPUTATIONAL_RESOURCE_SCHEDULING, resourceScheduling);
+                    em.getTransaction().commit();
+                    em.close();
+                    return schedulingResource;
+                case ADVANCE_INPUT_DATA_HANDLING:
+                    generator = new QueryGenerator(ADVANCE_INPUT_DATA_HANDLING);
+                    generator.setParameter(AdvancedInputDataHandlingConstants.TASK_ID, name);
+                    q = generator.selectQuery(em);
+                    AdvancedInputDataHandling dataHandling = (AdvancedInputDataHandling) q.getSingleResult();
+                    AdvanceInputDataHandlingResource inputDataHandlingResource = (AdvanceInputDataHandlingResource) Utils.getResource(ResourceType.ADVANCE_INPUT_DATA_HANDLING, dataHandling);
+                    em.getTransaction().commit();
+                    em.close();
+                    return inputDataHandlingResource;
+                case ADVANCE_OUTPUT_DATA_HANDLING:
+                    generator = new QueryGenerator(ADVANCE_OUTPUT_DATA_HANDLING);
+                    generator.setParameter(AdvancedOutputDataHandlingConstants.TASK_ID, name);
+                    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.TASK_ID, name);
+                    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 workflow node resource.", new IllegalArgumentException());
+                    throw new IllegalArgumentException("Unsupported resource type for workflow node resource.");
+            }
+        } 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 workflow node resource.", new IllegalArgumentException());
-                throw new IllegalArgumentException("Unsupported resource type for workflow node resource.");
+            }
         }
     }
 
-    @Override
-    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 ERROR_DETAIL:
-                generator = new QueryGenerator(ERROR_DETAIL);
-                generator.setParameter(ErrorDetailConstants.TASK_ID, taskId);
-                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);
+        EntityManager em = null;
+        try {
+            em = ResourceUtils.getEntityManager();
+            em.getTransaction().begin();
+            Query q;
+            QueryGenerator generator;
+            List results;
+            switch (type) {
+                case ERROR_DETAIL:
+                    generator = new QueryGenerator(ERROR_DETAIL);
+                    generator.setParameter(ErrorDetailConstants.TASK_ID, taskId);
+                    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 APPLICATION_INPUT:
-                generator = new QueryGenerator(APPLICATION_INPUT);
-                generator.setParameter(ApplicationInputConstants.TASK_ID, taskId);
-                q = generator.selectQuery(em);
-                results = q.getResultList();
-                if (results.size() != 0) {
-                    for (Object result : results) {
-                        ApplicationInput applicationInput = (ApplicationInput) result;
-                        ApplicationInputResource inputResource =
-                                (ApplicationInputResource)Utils.getResource(ResourceType.APPLICATION_INPUT, applicationInput);
-                        resourceList.add(inputResource);
+                    break;
+                case APPLICATION_INPUT:
+                    generator = new QueryGenerator(APPLICATION_INPUT);
+                    generator.setParameter(ApplicationInputConstants.TASK_ID, taskId);
+                    q = generator.selectQuery(em);
+                    results = q.getResultList();
+                    if (results.size() != 0) {
+                        for (Object result : results) {
+                            ApplicationInput applicationInput = (ApplicationInput) result;
+                            ApplicationInputResource inputResource =
+                                    (ApplicationInputResource) Utils.getResource(ResourceType.APPLICATION_INPUT, applicationInput);
+                            resourceList.add(inputResource);
+                        }
                     }
-                }
-                break;
-            case APPLICATION_OUTPUT:
-                generator = new QueryGenerator(APPLICATION_OUTPUT);
-                generator.setParameter(ApplicationOutputConstants.TASK_ID, taskId);
-                q = generator.selectQuery(em);
-                results = q.getResultList();
-                if (results.size() != 0) {
-                    for (Object result : results) {
-                        ApplicationOutput applicationOutput = (ApplicationOutput) result;
-                        ApplicationOutputResource outputResource =
-                                (ApplicationOutputResource)Utils.getResource(ResourceType.APPLICATION_OUTPUT, applicationOutput);
-                        resourceList.add(outputResource);
+                    break;
+                case APPLICATION_OUTPUT:
+                    generator = new QueryGenerator(APPLICATION_OUTPUT);
+                    generator.setParameter(ApplicationOutputConstants.TASK_ID, taskId);
+                    q = generator.selectQuery(em);
+                    results = q.getResultList();
+                    if (results.size() != 0) {
+                        for (Object result : results) {
+                            ApplicationOutput applicationOutput = (ApplicationOutput) result;
+                            ApplicationOutputResource outputResource =
+                                    (ApplicationOutputResource) Utils.getResource(ResourceType.APPLICATION_OUTPUT, applicationOutput);
+                            resourceList.add(outputResource);
+                        }
                     }
-                }
-                break;
-            case JOB_DETAIL:
-                generator = new QueryGenerator(JOB_DETAIL);
-                generator.setParameter(JobDetailConstants.TASK_ID, taskId);
-                q = generator.selectQuery(em);
-                results = q.getResultList();
-                if (results.size() != 0) {
-                    for (Object result : results) {
-                        JobDetail jobDetail = (JobDetail) result;
-                        JobDetailResource jobDetailResource =
-                                (JobDetailResource)Utils.getResource(ResourceType.JOB_DETAIL, jobDetail);
-                        resourceList.add(jobDetailResource);
+                    break;
+                case JOB_DETAIL:
+                    generator = new QueryGenerator(JOB_DETAIL);
+                    generator.setParameter(JobDetailConstants.TASK_ID, taskId);
+                    q = generator.selectQuery(em);
+                    results = q.getResultList();
+                    if (results.size() != 0) {
+                        for (Object result : results) {
+                            JobDetail jobDetail = (JobDetail) result;
+                            JobDetailResource jobDetailResource =
+                                    (JobDetailResource) Utils.getResource(ResourceType.JOB_DETAIL, jobDetail);
+                            resourceList.add(jobDetailResource);
+                        }
                     }
-                }
-                break;
-            case DATA_TRANSFER_DETAIL:
-                generator = new QueryGenerator(DATA_TRANSFER_DETAIL);
-                generator.setParameter(DataTransferDetailConstants.TASK_ID, taskId);
-                q = generator.selectQuery(em);
-                results = q.getResultList();
-                if (results.size() != 0) {
-                    for (Object result : results) {
-                        DataTransferDetail transferDetail = (DataTransferDetail) result;
-                        DataTransferDetailResource transferDetailResource =
-                                (DataTransferDetailResource)Utils.getResource(ResourceType.DATA_TRANSFER_DETAIL, transferDetail);
-                        resourceList.add(transferDetailResource);
+                    break;
+                case DATA_TRANSFER_DETAIL:
+                    generator = new QueryGenerator(DATA_TRANSFER_DETAIL);
+                    generator.setParameter(DataTransferDetailConstants.TASK_ID, taskId);
+                    q = generator.selectQuery(em);
+                    results = q.getResultList();
+                    if (results.size() != 0) {
+                        for (Object result : results) {
+                            DataTransferDetail transferDetail = (DataTransferDetail) result;
+                            DataTransferDetailResource transferDetailResource =
+                                    (DataTransferDetailResource) Utils.getResource(ResourceType.DATA_TRANSFER_DETAIL, transferDetail);
+                            resourceList.add(transferDetailResource);
+                        }
                     }
-                }
-                break;
-            case STATUS:
-                generator = new QueryGenerator(STATUS);
-                generator.setParameter(StatusConstants.TASK_ID, taskId);
-                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.TASK_ID, taskId);
+                    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 workflow node details 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 workflow node details resource.", new UnsupportedOperationException());
-                throw new UnsupportedOperationException();
+            }
         }
-        em.getTransaction().commit();
-        em.close();
         return resourceList;
     }
 
-    @Override
-    public void save() {
-        EntityManager em = ResourceUtils.getEntityManager();
-        TaskDetail existingTaskDetail = em.find(TaskDetail.class, taskId);
-        em.close();
-
-        em = ResourceUtils.getEntityManager();
-        em.getTransaction().begin();
-        TaskDetail taskDetail = new TaskDetail();
-        taskDetail.setTaskId(taskId);
-        WorkflowNodeDetail workflowNodeDetail = em.find(WorkflowNodeDetail.class, workflowNodeDetailResource.getNodeInstanceId());
-        taskDetail.setNodeDetail(workflowNodeDetail);
-        taskDetail.setNodeId(workflowNodeDetailResource.getNodeInstanceId());
-        taskDetail.setCreationTime(creationTime);
-        taskDetail.setAppId(applicationId);
-        taskDetail.setAppVersion(applicationVersion);
-        if (existingTaskDetail != null){
-            existingTaskDetail.setTaskId(taskId);
-            existingTaskDetail.setNodeDetail(workflowNodeDetail);
-            existingTaskDetail.setNodeId(workflowNodeDetailResource.getNodeInstanceId());
-            existingTaskDetail.setCreationTime(creationTime);
-            existingTaskDetail.setAppId(applicationId);
-            existingTaskDetail.setAppVersion(applicationVersion);
-            taskDetail = em.merge(existingTaskDetail);
-        }else {
-            em.merge(taskDetail);
+    
+    public void save() throws RegistryException{
+        EntityManager em = null;
+        try {
+            em = ResourceUtils.getEntityManager();
+            TaskDetail existingTaskDetail = em.find(TaskDetail.class, taskId);
+            em.close();
+
+            em = ResourceUtils.getEntityManager();
+            em.getTransaction().begin();
+            TaskDetail taskDetail = new TaskDetail();
+            taskDetail.setTaskId(taskId);
+            WorkflowNodeDetail workflowNodeDetail = em.find(WorkflowNodeDetail.class, workflowNodeDetailResource.getNodeInstanceId());
+            taskDetail.setNodeDetail(workflowNodeDetail);
+            taskDetail.setNodeId(workflowNodeDetailResource.getNodeInstanceId());
+            taskDetail.setCreationTime(creationTime);
+            taskDetail.setAppId(applicationId);
+            taskDetail.setAppVersion(applicationVersion);
+            if (existingTaskDetail != null) {
+                existingTaskDetail.setTaskId(taskId);
+                existingTaskDetail.setNodeDetail(workflowNodeDetail);
+                existingTaskDetail.setNodeId(workflowNodeDetailResource.getNodeInstanceId());
+                existingTaskDetail.setCreationTime(creationTime);
+                existingTaskDetail.setAppId(applicationId);
+                existingTaskDetail.setAppVersion(applicationVersion);
+                taskDetail = em.merge(existingTaskDetail);
+            } else {
+                em.merge(taskDetail);
+            }
+            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();
     }
 
-    public List<ApplicationInputResource> getApplicationInputs() {
+    public List<ApplicationInputResource> getApplicationInputs() throws RegistryException{
         List<ApplicationInputResource> applicationInputResources = new ArrayList<ApplicationInputResource>();
         List<Resource> resources = get(ResourceType.APPLICATION_INPUT);
         for (Resource resource : resources) {
@@ -461,7 +499,7 @@ public class TaskDetailResource extends AbstractResource {
         return applicationInputResources;
     }
 
-    public List<ApplicationOutputResource> getApplicationOutputs(){
+    public List<ApplicationOutputResource> getApplicationOutputs() throws RegistryException{
         List<ApplicationOutputResource> outputResources = new ArrayList<ApplicationOutputResource>();
         List<Resource> resources = get(ResourceType.APPLICATION_OUTPUT);
         for (Resource resource : resources) {
@@ -471,7 +509,7 @@ public class TaskDetailResource extends AbstractResource {
         return outputResources;
     }
 
-    public StatusResource getTaskStatus(){
+    public StatusResource getTaskStatus() throws RegistryException{
         List<Resource> resources = get(ResourceType.STATUS);
         for (Resource resource : resources) {
             StatusResource taskStatus = (StatusResource) resource;
@@ -485,7 +523,7 @@ public class TaskDetailResource extends AbstractResource {
         return null;
     }
 
-    public List<JobDetailResource> getJobDetailList(){
+    public List<JobDetailResource> getJobDetailList() throws RegistryException{
         List<JobDetailResource> jobDetailResources = new ArrayList<JobDetailResource>();
         List<Resource> resources = get(ResourceType.JOB_DETAIL);
         for (Resource resource : resources) {
@@ -495,7 +533,7 @@ public class TaskDetailResource extends AbstractResource {
         return jobDetailResources;
     }
 
-    public List<DataTransferDetailResource> getDataTransferDetailList(){
+    public List<DataTransferDetailResource> getDataTransferDetailList() throws RegistryException{
         List<DataTransferDetailResource> transferDetails = new ArrayList<DataTransferDetailResource>();
         List<Resource> resources = get(ResourceType.DATA_TRANSFER_DETAIL);
         for (Resource resource : resources) {
@@ -505,7 +543,7 @@ public class TaskDetailResource extends AbstractResource {
         return transferDetails;
     }
 
-    public List<ErrorDetailResource> getErrorDetailList(){
+    public List<ErrorDetailResource> getErrorDetailList() throws RegistryException{
         List<ErrorDetailResource> errorDetailResources = new ArrayList<ErrorDetailResource>();
         List<Resource> resources = get(ResourceType.ERROR_DETAIL);
         for (Resource resource : resources) {
@@ -515,33 +553,33 @@ public class TaskDetailResource extends AbstractResource {
         return errorDetailResources;
     }
 
-    public ComputationSchedulingResource getComputationScheduling (String taskId){
+    public ComputationSchedulingResource getComputationScheduling (String taskId) throws RegistryException{
         return  (ComputationSchedulingResource)get(ResourceType.COMPUTATIONAL_RESOURCE_SCHEDULING, taskId);
     }
 
-    public AdvanceInputDataHandlingResource getInputDataHandling (String taskId){
+    public AdvanceInputDataHandlingResource getInputDataHandling (String taskId) throws RegistryException{
         return  (AdvanceInputDataHandlingResource)get(ResourceType.ADVANCE_INPUT_DATA_HANDLING, taskId);
     }
 
-    public AdvancedOutputDataHandlingResource getOutputDataHandling (String taskId){
+    public AdvancedOutputDataHandlingResource getOutputDataHandling (String taskId) throws RegistryException{
         return  (AdvancedOutputDataHandlingResource)get(ResourceType.ADVANCE_OUTPUT_DATA_HANDLING, taskId);
     }
 
-    public JobDetailResource createJobDetail (String jobId){
+    public JobDetailResource createJobDetail (String jobId) throws RegistryException{
         JobDetailResource resource = (JobDetailResource)create(ResourceType.JOB_DETAIL);
         resource.setJobId(jobId);
         return resource;
     }
 
-    public JobDetailResource getJobDetail (String jobId){
+    public JobDetailResource getJobDetail (String jobId) throws RegistryException{
         return (JobDetailResource)get(ResourceType.JOB_DETAIL, jobId);
     }
 
-    public DataTransferDetailResource getDataTransferDetail (String dataTransferId){
+    public DataTransferDetailResource getDataTransferDetail (String dataTransferId) throws RegistryException{
         return (DataTransferDetailResource)get(ResourceType.DATA_TRANSFER_DETAIL, dataTransferId);
     }
 
-    public  boolean isTaskStatusExist (String taskId){
+    public  boolean isTaskStatusExist (String taskId) throws RegistryException{
         return isExists(ResourceType.STATUS, taskId);
     }
 }

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/UserResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/UserResource.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/UserResource.java
index 072abd0..53dd172 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/UserResource.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/UserResource.java
@@ -32,6 +32,7 @@ import org.apache.airavata.registry.api.exception.RegistrySettingsException;
 import org.apache.airavata.registry.api.util.RegistrySettings;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.apache.airavata.registry.cpi.RegistryException;
 
 import javax.persistence.EntityManager;
 
@@ -67,7 +68,7 @@ public class UserResource extends AbstractResource {
      * @param type child resource type
      * @return child resource
      */
-    public Resource create(ResourceType type) {
+    public Resource create(ResourceType type) throws RegistryException {
         logger.error("Unsupported resource type for user resource.", new UnsupportedOperationException());
         throw new UnsupportedOperationException();
     }
@@ -77,7 +78,7 @@ public class UserResource extends AbstractResource {
      * @param type child resource type
      * @param name child resource name
      */
-    public void remove(ResourceType type, Object name) {
+    public void remove(ResourceType type, Object name) throws RegistryException{
         logger.error("Unsupported resource type for user resource.", new UnsupportedOperationException());
         throw new UnsupportedOperationException();
     }
@@ -88,7 +89,7 @@ public class UserResource extends AbstractResource {
      * @param name child resource name
      * @return UnsupportedOperationException
      */
-    public Resource get(ResourceType type, Object name) {
+    public Resource get(ResourceType type, Object name) throws RegistryException {
         logger.error("Unsupported resource type for user resource.", new UnsupportedOperationException());
         throw new UnsupportedOperationException();
     }
@@ -98,7 +99,7 @@ public class UserResource extends AbstractResource {
      * @param type child resource type
      * @return UnsupportedOperationException
      */
-    public List<Resource> get(ResourceType type) {
+    public List<Resource> get(ResourceType type) throws RegistryException{
         logger.error("Unsupported resource type for user resource.", new UnsupportedOperationException());
         throw new UnsupportedOperationException();
     }
@@ -106,29 +107,20 @@ public class UserResource extends AbstractResource {
     /**
      * save user to the database
      */
-    public void save() {
-        EntityManager em = ResourceUtils.getEntityManager();
-        Users existingUser = em.find(Users.class, userName);
-        em.close();
-
-        em = ResourceUtils.getEntityManager();
-        em.getTransaction().begin();
-        Users user = new Users();
-        user.setUser_name(userName);
-        if (password != null && !password.equals("")){
-            try {
-                user.setPassword(SecurityUtil.digestString(password,
-                        RegistrySettings.getSetting("default.registry.password.hash.method")));
-            } catch (NoSuchAlgorithmException e) {
-                throw new RuntimeException("Error hashing default admin password. Invalid hash algorithm.", e);
-            } catch (RegistrySettingsException e) {
-                throw new RuntimeException("Error reading hash algorithm from configurations", e);
-            }
-        }
-        if(existingUser != null){
-            if (password != null && !password.equals("")){
+    public void save() throws RegistryException {
+        EntityManager em = null;
+        try {
+            em = ResourceUtils.getEntityManager();
+            Users existingUser = em.find(Users.class, userName);
+            em.close();
+
+            em = ResourceUtils.getEntityManager();
+            em.getTransaction().begin();
+            Users user = new Users();
+            user.setUser_name(userName);
+            if (password != null && !password.equals("")) {
                 try {
-                    existingUser.setPassword(SecurityUtil.digestString(password,
+                    user.setPassword(SecurityUtil.digestString(password,
                             RegistrySettings.getSetting("default.registry.password.hash.method")));
                 } catch (NoSuchAlgorithmException e) {
                     throw new RuntimeException("Error hashing default admin password. Invalid hash algorithm.", e);
@@ -136,12 +128,30 @@ public class UserResource extends AbstractResource {
                     throw new RuntimeException("Error reading hash algorithm from configurations", e);
                 }
             }
-            user = em.merge(existingUser);
-        }else {
-            em.persist(user);
+            if (existingUser != null) {
+                if (password != null && !password.equals("")) {
+                    try {
+                        existingUser.setPassword(SecurityUtil.digestString(password,
+                                RegistrySettings.getSetting("default.registry.password.hash.method")));
+                    } catch (NoSuchAlgorithmException e) {
+                        throw new RuntimeException("Error hashing default admin password. Invalid hash algorithm.", e);
+                    } catch (RegistrySettingsException e) {
+                        throw new RuntimeException("Error reading hash algorithm from configurations", e);
+                    }
+                }
+                user = em.merge(existingUser);
+            } else {
+                em.persist(user);
+            }
+            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();
     }
 
     /**
@@ -150,7 +160,7 @@ public class UserResource extends AbstractResource {
      * @param name child resource name
      * @return UnsupportedOperationException
      */
-    public boolean isExists(ResourceType type, Object name) {
+    public boolean isExists(ResourceType type, Object name) throws RegistryException{
         logger.error("Unsupported resource type for user resource.", new UnsupportedOperationException());
         throw new UnsupportedOperationException();
     }

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/UserWorkflowResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/UserWorkflowResource.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/UserWorkflowResource.java
index 0ab78d1..c01aa72 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/UserWorkflowResource.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/UserWorkflowResource.java
@@ -23,18 +23,14 @@ package org.apache.airavata.persistance.registry.jpa.resources;
 import org.apache.airavata.persistance.registry.jpa.Resource;
 import org.apache.airavata.persistance.registry.jpa.ResourceType;
 import org.apache.airavata.persistance.registry.jpa.ResourceUtils;
-import org.apache.airavata.persistance.registry.jpa.model.Gateway;
 import org.apache.airavata.persistance.registry.jpa.model.User_Workflow;
 import org.apache.airavata.persistance.registry.jpa.model.User_Workflow_PK;
-import org.apache.airavata.persistance.registry.jpa.model.Users;
-import org.apache.airavata.persistance.registry.jpa.utils.QueryGenerator;
+import org.apache.airavata.registry.cpi.RegistryException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import javax.persistence.EntityManager;
-import javax.persistence.Query;
 import java.sql.Timestamp;
-import java.util.ArrayList;
 import java.util.List;
 
 public class UserWorkflowResource extends AbstractResource {
@@ -87,84 +83,71 @@ public class UserWorkflowResource extends AbstractResource {
         this.path = path;
     }
 
-    public Resource create(ResourceType type) {
+    public Resource create(ResourceType type) throws RegistryException{
         logger.error("Unsupported resource type for user workflow resource.", new UnsupportedOperationException());
         throw new UnsupportedOperationException();
     }
 
-    public void remove(ResourceType type, Object name) {
+    public void remove(ResourceType type, Object name) throws RegistryException{
         logger.error("Unsupported resource type for user workflow resource.", new UnsupportedOperationException());
         throw new UnsupportedOperationException();
     }
 
-    public Resource get(ResourceType type, Object name) {
+    public Resource get(ResourceType type, Object name) throws RegistryException{
         logger.error("Unsupported resource type for user workflow resource.", new UnsupportedOperationException());
         throw new UnsupportedOperationException();
     }
 
-    /**
-     *
-     * @param keys should be in the order of gateway_name,user_name and user_workflow_name
-     * @return resource list
-     */
-    public List<Resource> populate(Object[] keys) {
-        List<Resource> list = new ArrayList<Resource>();
-        EntityManager em = ResourceUtils.getEntityManager();
-        em.getTransaction().begin();
-        QueryGenerator queryGenerator = new QueryGenerator(USER_WORKFLOW);
-        queryGenerator.setParameter(UserWorkflowConstants.GATEWAY_NAME, keys[0]);
-        queryGenerator.setParameter(UserWorkflowConstants.OWNER, keys[1]);
-        queryGenerator.setParameter(UserWorkflowConstants.TEMPLATE_NAME, keys[2]);
-        Query q = queryGenerator.selectQuery(em);
-        User_Workflow userWorkflow = (User_Workflow)q.getSingleResult();
-        UserWorkflowResource userWorkflowResource = (UserWorkflowResource)Utils.getResource(
-                ResourceType.USER_WORKFLOW, userWorkflow);
-        em.getTransaction().commit();
-        em.close();
-        list.add(userWorkflowResource);
-        return list;
-    }
-
-    public List<Resource> get(ResourceType type) {
+
+    public List<Resource> get(ResourceType type) throws RegistryException{
         logger.error("Unsupported resource type for user workflow resource.", new UnsupportedOperationException());
         throw new UnsupportedOperationException();
     }
 
-    public void save() {
-        EntityManager em = ResourceUtils.getEntityManager();
-        User_Workflow existingWF = em.find(User_Workflow.class, new User_Workflow_PK(name, worker.getUser(), gateway.getGatewayName()));
-        em.close();
-
-        em = ResourceUtils.getEntityManager();
-        em.getTransaction().begin();
-        User_Workflow userWorkflow = new User_Workflow();
-        userWorkflow.setTemplate_name(name);
-        if(lastUpdateDate == null){
-            java.util.Date date= new java.util.Date();
-            lastUpdateDate = new Timestamp(date.getTime());
-        }
-        userWorkflow.setLast_updated_date(lastUpdateDate);
-        byte[] bytes = content.getBytes();
-        userWorkflow.setWorkflow_graph(bytes);
-        userWorkflow.setGateway_name(this.gateway.getGatewayName());
-        userWorkflow.setOwner(this.getWorker().getUser());
-        userWorkflow.setPath(path);
-        if(existingWF != null){
-            existingWF.setGateway_name(this.gateway.getGatewayName());
-            existingWF.setOwner(this.getWorker().getUser());
-            existingWF.setTemplate_name(name);
-            existingWF.setLast_updated_date(lastUpdateDate);
-            existingWF.setPath(path);
-            existingWF.setWorkflow_graph(bytes);
-            userWorkflow = em.merge(existingWF);
-        } else {
-            em.persist(userWorkflow);
+    public void save() throws RegistryException {
+        EntityManager em = null;
+        try {
+            em = ResourceUtils.getEntityManager();
+            User_Workflow existingWF = em.find(User_Workflow.class, new User_Workflow_PK(name, worker.getUser(), gateway.getGatewayName()));
+            em.close();
+
+            em = ResourceUtils.getEntityManager();
+            em.getTransaction().begin();
+            User_Workflow userWorkflow = new User_Workflow();
+            userWorkflow.setTemplate_name(name);
+            if (lastUpdateDate == null) {
+                java.util.Date date = new java.util.Date();
+                lastUpdateDate = new Timestamp(date.getTime());
+            }
+            userWorkflow.setLast_updated_date(lastUpdateDate);
+            byte[] bytes = content.getBytes();
+            userWorkflow.setWorkflow_graph(bytes);
+            userWorkflow.setGateway_name(this.gateway.getGatewayName());
+            userWorkflow.setOwner(this.getWorker().getUser());
+            userWorkflow.setPath(path);
+            if (existingWF != null) {
+                existingWF.setGateway_name(this.gateway.getGatewayName());
+                existingWF.setOwner(this.getWorker().getUser());
+                existingWF.setTemplate_name(name);
+                existingWF.setLast_updated_date(lastUpdateDate);
+                existingWF.setPath(path);
+                existingWF.setWorkflow_graph(bytes);
+                userWorkflow = em.merge(existingWF);
+            } else {
+                em.persist(userWorkflow);
+            }
+            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();
     }
 
-    public boolean isExists(ResourceType type, Object name) {
+    public boolean isExists(ResourceType type, Object name) throws RegistryException{
         logger.error("Unsupported resource type for user workflow resource.", new UnsupportedOperationException());
         throw new UnsupportedOperationException();
     }

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/WorkerResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/WorkerResource.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/WorkerResource.java
index 0c9b603..a818391 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/WorkerResource.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/WorkerResource.java
@@ -21,24 +21,21 @@
 
 package org.apache.airavata.persistance.registry.jpa.resources;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-
-import javax.persistence.EntityManager;
-import javax.persistence.Query;
-
 import org.apache.airavata.persistance.registry.jpa.Resource;
 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.openjpa.persistence.OpenJPAEntityManagerFactory;
-import org.apache.openjpa.persistence.OpenJPAPersistence;
-import org.apache.openjpa.persistence.QueryResultCache;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.apache.airavata.registry.cpi.RegistryException;
+
+import javax.persistence.EntityManager;
+import javax.persistence.Query;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
 
 public class WorkerResource extends AbstractResource {
     private final static Logger logger = LoggerFactory.getLogger(WorkerResource.class);
@@ -66,7 +63,7 @@ public class WorkerResource extends AbstractResource {
      * @param type child resource type
      * @return  child resource
      */
-	public Resource create(ResourceType type) {
+	public Resource create(ResourceType type) throws RegistryException{
 		Resource result = null;
 		switch (type) {
 			case PROJECT:
@@ -100,39 +97,48 @@ public class WorkerResource extends AbstractResource {
      * @param type child resource type
      * @param name child resource name
      */
-	public void remove(ResourceType type, Object name) {
-        EntityManager em = ResourceUtils.getEntityManager();
-        em.getTransaction().begin();
-        Query q;
-        QueryGenerator generator;
-		switch (type) {
-			case PROJECT:
-                generator = new QueryGenerator(PROJECT);
-                generator.setParameter(ProjectConstants.PROJECT_ID, name);
-                q = generator.deleteQuery(em);
-	            q.executeUpdate();
-				break;
-			case USER_WORKFLOW:
-                generator = new QueryGenerator(USER_WORKFLOW);
-                generator.setParameter(UserWorkflowConstants.OWNER, getUser());
-                generator.setParameter(UserWorkflowConstants.TEMPLATE_NAME, name);
-                generator.setParameter(UserWorkflowConstants.GATEWAY_NAME, gateway.getGatewayName());
-                q = generator.deleteQuery(em);
-	            q.executeUpdate();
-	            break;
-            case EXPERIMENT:
-                generator = new QueryGenerator(EXPERIMENT);
-                generator.setParameter(ExperimentConstants.EXPERIMENT_ID, name);
-                q = generator.deleteQuery(em);
-                q.executeUpdate();
-                break;
-			default:
-                logger.error("Unsupported resource type for worker resource.", new IllegalArgumentException());
-                break;
-		}
-        em.getTransaction().commit();
-        em.close();
-	}
+	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 PROJECT:
+                    generator = new QueryGenerator(PROJECT);
+                    generator.setParameter(ProjectConstants.PROJECT_ID, name);
+                    q = generator.deleteQuery(em);
+                    q.executeUpdate();
+                    break;
+                case USER_WORKFLOW:
+                    generator = new QueryGenerator(USER_WORKFLOW);
+                    generator.setParameter(UserWorkflowConstants.OWNER, getUser());
+                    generator.setParameter(UserWorkflowConstants.TEMPLATE_NAME, name);
+                    generator.setParameter(UserWorkflowConstants.GATEWAY_NAME, gateway.getGatewayName());
+                    q = generator.deleteQuery(em);
+                    q.executeUpdate();
+                    break;
+                case EXPERIMENT:
+                    generator = new QueryGenerator(EXPERIMENT);
+                    generator.setParameter(ExperimentConstants.EXPERIMENT_ID, name);
+                    q = generator.deleteQuery(em);
+                    q.executeUpdate();
+                    break;
+                default:
+                    logger.error("Unsupported resource type for worker resource.", new IllegalArgumentException());
+                    break;
+            }
+            em.getTransaction().commit();
+        } catch (Exception e) {
+            logger.error(e.getMessage(), e);
+            throw new RegistryException(e.getMessage());
+        } finally {
+            if (em != null && em.isOpen()) {
+                em.close();
+            }
+        }
+    }
 
     /**
      *
@@ -140,45 +146,53 @@ public class WorkerResource extends AbstractResource {
      * @param name child resource name
      * @return child resource
      */
-	public Resource get(ResourceType type, Object name) {
-		Resource result = null;
-        EntityManager em = ResourceUtils.getEntityManager();
-        em.getTransaction().begin();
-        QueryGenerator generator;
-        Query q;
-		switch (type) {
-			case PROJECT:
-                generator = new QueryGenerator(PROJECT);
-                generator.setParameter(ProjectConstants.PROJECT_ID, name);
-                q = generator.selectQuery(em);
-	            Project project = (Project) q.getSingleResult();
-                result= Utils.getResource(ResourceType.PROJECT, project);
-				break;
-			case USER_WORKFLOW:
-                generator = new QueryGenerator(USER_WORKFLOW);
-                generator.setParameter(UserWorkflowConstants.OWNER, getUser());
-                generator.setParameter(UserWorkflowConstants.TEMPLATE_NAME, name);
-                generator.setParameter(UserWorkflowConstants.GATEWAY_NAME, gateway.getGatewayName());
-                q = generator.selectQuery(em);
-	            User_Workflow userWorkflow = (User_Workflow) q.getSingleResult();
-                result= Utils.getResource(ResourceType.USER_WORKFLOW, userWorkflow);
-	            break;
-            case EXPERIMENT:
-                generator = new QueryGenerator(EXPERIMENT);
-                generator.setParameter(ExperimentConstants.EXPERIMENT_ID, name);
-                q = generator.selectQuery(em);
-                Experiment experiment = (Experiment) q.getSingleResult();
-                result= Utils.getResource(ResourceType.EXPERIMENT, experiment);
-                break;
-			default:
-                logger.error("Unsupported resource type for worker resource.", new IllegalArgumentException());
-                break;
-		}
-        em.getTransaction().commit();
-        em.close();
-		return result;
-	}
-	
+	public Resource get(ResourceType type, Object name) throws RegistryException{
+        Resource result = null;
+        EntityManager em = null;
+        try {
+            em = ResourceUtils.getEntityManager();
+            em.getTransaction().begin();
+            QueryGenerator generator;
+            Query q;
+            switch (type) {
+                case PROJECT:
+                    generator = new QueryGenerator(PROJECT);
+                    generator.setParameter(ProjectConstants.PROJECT_ID, name);
+                    q = generator.selectQuery(em);
+                    Project project = (Project) q.getSingleResult();
+                    result = Utils.getResource(ResourceType.PROJECT, project);
+                    break;
+                case USER_WORKFLOW:
+                    generator = new QueryGenerator(USER_WORKFLOW);
+                    generator.setParameter(UserWorkflowConstants.OWNER, getUser());
+                    generator.setParameter(UserWorkflowConstants.TEMPLATE_NAME, name);
+                    generator.setParameter(UserWorkflowConstants.GATEWAY_NAME, gateway.getGatewayName());
+                    q = generator.selectQuery(em);
+                    User_Workflow userWorkflow = (User_Workflow) q.getSingleResult();
+                    result = Utils.getResource(ResourceType.USER_WORKFLOW, userWorkflow);
+                    break;
+                case EXPERIMENT:
+                    generator = new QueryGenerator(EXPERIMENT);
+                    generator.setParameter(ExperimentConstants.EXPERIMENT_ID, name);
+                    q = generator.selectQuery(em);
+                    Experiment experiment = (Experiment) q.getSingleResult();
+                    result = Utils.getResource(ResourceType.EXPERIMENT, experiment);
+                    break;
+                default:
+                    logger.error("Unsupported resource type for worker resource.", new IllegalArgumentException());
+                    break;
+            }
+            em.getTransaction().commit();
+        } catch (Exception e) {
+            throw new RegistryException(e);
+        } finally {
+            if (em != null && em.isOpen()) {
+                em.close();
+            }
+        }
+        return result;
+    }
+
 //	public List<GFacJobDataResource> getGFacJobs(String serviceDescriptionId, String hostDescriptionId, String applicationDescriptionId){
 //		List<GFacJobDataResource> result = new ArrayList<GFacJobDataResource>();
 //        EntityManager em = ResourceUtils.getEntityManager();
@@ -222,84 +236,102 @@ public class WorkerResource extends AbstractResource {
      * @param type child resource type
      * @return list of child resources
      */
-    public List<Resource> get(ResourceType type) {
-		List<Resource> result = new ArrayList<Resource>();
-        EntityManager em = ResourceUtils.getEntityManager();
-        em.getTransaction().begin();
-        QueryGenerator generator;
-        Query q;
-		switch (type) {
-			case PROJECT:
-                generator = new QueryGenerator(PROJECT);
-                Users users = em.find(Users.class, getUser());
-                Gateway gatewayModel = em.find(Gateway.class, gateway.getGatewayName());
-                generator.setParameter("users", users);
-                generator.setParameter("gateway", gatewayModel);
+    public List<Resource> get(ResourceType type) throws RegistryException{
+        List<Resource> result = new ArrayList<Resource>();
+        EntityManager em = null;
+        try {
+            em = ResourceUtils.getEntityManager();
+            em.getTransaction().begin();
+            QueryGenerator generator;
+            Query q;
+            switch (type) {
+                case PROJECT:
+                    generator = new QueryGenerator(PROJECT);
+                    Users users = em.find(Users.class, getUser());
+                    Gateway gatewayModel = em.find(Gateway.class, gateway.getGatewayName());
+                    generator.setParameter("users", users);
+                    generator.setParameter("gateway", gatewayModel);
 //                generator.setParameter(ProjectConstants.USERNAME, getUser());
 //                generator.setParameter(ProjectConstants.GATEWAY_NAME, gateway.getGatewayName());
-                q = generator.selectQuery(em);
-	            for (Object o : q.getResultList()) {
-	            	Project project = (Project) o;
-		            ProjectResource projectResource = (ProjectResource)Utils.getResource(ResourceType.PROJECT, project);
-		            result.add(projectResource);
-				}
-				break;
-			case USER_WORKFLOW:
-                generator = new QueryGenerator(USER_WORKFLOW);
-                generator.setParameter(UserWorkflowConstants.OWNER, getUser());
-                q = generator.selectQuery(em);
+                    q = generator.selectQuery(em);
+                    for (Object o : q.getResultList()) {
+                        Project project = (Project) o;
+                        ProjectResource projectResource = (ProjectResource) Utils.getResource(ResourceType.PROJECT, project);
+                        result.add(projectResource);
+                    }
+                    break;
+                case USER_WORKFLOW:
+                    generator = new QueryGenerator(USER_WORKFLOW);
+                    generator.setParameter(UserWorkflowConstants.OWNER, getUser());
+                    q = generator.selectQuery(em);
 //	            q.setParameter("usr_name", getUser());
-	            for (Object o : q.getResultList()) {
-		            User_Workflow userWorkflow = (User_Workflow) o;
-		            UserWorkflowResource userWorkflowResource = (UserWorkflowResource)Utils.getResource(ResourceType.USER_WORKFLOW, userWorkflow);
-		            result.add(userWorkflowResource);
-	            }
-	            break;
-            case EXPERIMENT:
-                generator = new QueryGenerator(EXPERIMENT);
-                generator.setParameter(ExperimentConstants.EXECUTION_USER, getUser());
-                q = generator.selectQuery(em);
-                for (Object o : q.getResultList()) {
-                    Experiment experiment = (Experiment) o;
-                    ExperimentResource experimentResource = (ExperimentResource)Utils.getResource(ResourceType.EXPERIMENT, experiment);
-                    result.add(experimentResource);
-                }
-                break;
-			default:
-                logger.error("Unsupported resource type for worker resource.", new IllegalArgumentException());
-                break;
-		}
-        em.getTransaction().commit();
-        em.close();
-		return result;
-	}
+                    for (Object o : q.getResultList()) {
+                        User_Workflow userWorkflow = (User_Workflow) o;
+                        UserWorkflowResource userWorkflowResource = (UserWorkflowResource) Utils.getResource(ResourceType.USER_WORKFLOW, userWorkflow);
+                        result.add(userWorkflowResource);
+                    }
+                    break;
+                case EXPERIMENT:
+                    generator = new QueryGenerator(EXPERIMENT);
+                    generator.setParameter(ExperimentConstants.EXECUTION_USER, getUser());
+                    q = generator.selectQuery(em);
+                    for (Object o : q.getResultList()) {
+                        Experiment experiment = (Experiment) o;
+                        ExperimentResource experimentResource = (ExperimentResource) Utils.getResource(ResourceType.EXPERIMENT, experiment);
+                        result.add(experimentResource);
+                    }
+                    break;
+                default:
+                    logger.error("Unsupported resource type for worker 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();
+            }
+        }
+        return result;
+    }
 
     /**
      * save gateway worker to database
      */
-	public void save() {
-        EntityManager em = ResourceUtils.getEntityManager();
-        Gateway_Worker existingWorker = em.find(Gateway_Worker.class, new Gateway_Worker_PK(gateway.getGatewayName(), user));
-        em.close();
-
-        em = ResourceUtils.getEntityManager();
-        em.getTransaction().begin();
-        Gateway_Worker gatewayWorker = new Gateway_Worker();
-        Users users = new Users();
-        users.setUser_name(user);
-        gatewayWorker.setUser(users);
-        Gateway gatewaymodel = new Gateway();
-        gatewaymodel.setGateway_name(gateway.getGatewayName());
-        gatewaymodel.setOwner(gateway.getOwner());
-        gatewayWorker.setGateway(gatewaymodel);
-        if(existingWorker != null){
-            gatewayWorker = em.merge(existingWorker);
-        }else {
-            em.merge(gatewayWorker);
+	public void save() throws RegistryException{
+        EntityManager em = null;
+        try {
+            em = ResourceUtils.getEntityManager();
+            Gateway_Worker existingWorker = em.find(Gateway_Worker.class, new Gateway_Worker_PK(gateway.getGatewayName(), user));
+            em.close();
+
+            em = ResourceUtils.getEntityManager();
+            em.getTransaction().begin();
+            Gateway_Worker gatewayWorker = new Gateway_Worker();
+            Users users = new Users();
+            users.setUser_name(user);
+            gatewayWorker.setUser(users);
+            Gateway gatewaymodel = new Gateway();
+            gatewaymodel.setGateway_name(gateway.getGatewayName());
+            gatewaymodel.setOwner(gateway.getOwner());
+            gatewayWorker.setGateway(gatewaymodel);
+            if (existingWorker != null) {
+                gatewayWorker = em.merge(existingWorker);
+            } else {
+                em.merge(gatewayWorker);
+            }
+            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();
-	}
+    }
 
     /**
      *
@@ -338,7 +370,7 @@ public class WorkerResource extends AbstractResource {
      * @param id  project id
      * @return whether the project is available under the user
      */
-    public boolean isProjectExists(String id){
+    public boolean isProjectExists(String id) throws RegistryException{
 		return isExists(ResourceType.PROJECT, id);
 	}
 
@@ -347,7 +379,7 @@ public class WorkerResource extends AbstractResource {
      * @param projectId project id
      * @return project resource for the user
      */
-	public ProjectResource createProject(String projectId){
+	public ProjectResource createProject(String projectId) throws RegistryException{
 		ProjectResource project=(ProjectResource)create(ResourceType.PROJECT);
         project.setId(projectId);
 		return project;
@@ -363,7 +395,7 @@ public class WorkerResource extends AbstractResource {
      * @param id project id
      * @return project resource
      */
-	public ProjectResource getProject(String id){
+	public ProjectResource getProject(String id) throws RegistryException{
 		return (ProjectResource)get(ResourceType.PROJECT, id);
 	}
 
@@ -371,7 +403,7 @@ public class WorkerResource extends AbstractResource {
      *
      * @param id project id
      */
-	public void removeProject(String id){
+	public void removeProject(String id) throws RegistryException{
 		remove(ResourceType.PROJECT, id);
 	}
 
@@ -379,7 +411,7 @@ public class WorkerResource extends AbstractResource {
      *
      * @return  list of projects for the user
      */
-    public List<ProjectResource> getProjects(){
+    public List<ProjectResource> getProjects() throws RegistryException{
 		List<ProjectResource> result=new ArrayList<ProjectResource>();
 		List<Resource> list = get(ResourceType.PROJECT);
 		for (Resource resource : list) {
@@ -393,7 +425,7 @@ public class WorkerResource extends AbstractResource {
      * @param templateName user workflow template
      * @return whether the workflow is already exists under the given user
      */
-	public boolean isWorkflowTemplateExists(String templateName){
+	public boolean isWorkflowTemplateExists(String templateName) throws RegistryException{
 		return isExists(ResourceType.USER_WORKFLOW, templateName);
 	}
 
@@ -402,7 +434,7 @@ public class WorkerResource extends AbstractResource {
      * @param templateName user workflow template
      * @return user workflow resource
      */
-	public UserWorkflowResource createWorkflowTemplate(String templateName){
+	public UserWorkflowResource createWorkflowTemplate(String templateName) throws RegistryException{
 		UserWorkflowResource workflow=(UserWorkflowResource)create(ResourceType.USER_WORKFLOW);
 		workflow.setName(templateName);
 		return workflow;
@@ -413,7 +445,7 @@ public class WorkerResource extends AbstractResource {
      * @param templateName user workflow template
      * @return user workflow resource
      */
-	public UserWorkflowResource getWorkflowTemplate(String templateName){
+	public UserWorkflowResource getWorkflowTemplate(String templateName) throws RegistryException{
 		return (UserWorkflowResource)get(ResourceType.USER_WORKFLOW, templateName);
 	}
 
@@ -421,7 +453,7 @@ public class WorkerResource extends AbstractResource {
      *
      * @param templateName user workflow template
      */
-    public void removeWorkflowTemplate(String templateName){
+    public void removeWorkflowTemplate(String templateName) throws RegistryException{
 		remove(ResourceType.USER_WORKFLOW, templateName);
 	}
 
@@ -429,7 +461,7 @@ public class WorkerResource extends AbstractResource {
      *
      * @return list of user workflows for the given user
      */
-    public List<UserWorkflowResource> getWorkflowTemplates(){
+    public List<UserWorkflowResource> getWorkflowTemplates() throws RegistryException{
 		List<UserWorkflowResource> result=new ArrayList<UserWorkflowResource>();
 		List<Resource> list = get(ResourceType.USER_WORKFLOW);
 		for (Resource resource : list) {
@@ -443,7 +475,7 @@ public class WorkerResource extends AbstractResource {
      * @param name experiment name
      * @return whether experiment is already exist for the given user
      */
-	public boolean isExperimentExists(String name){
+	public boolean isExperimentExists(String name) throws RegistryException{
 		return isExists(ResourceType.EXPERIMENT, name);
 	}
 	
@@ -453,7 +485,7 @@ public class WorkerResource extends AbstractResource {
      * @param name experiment name
      * @return experiment resource
      */
-    public ExperimentResource getExperiment(String name){
+    public ExperimentResource getExperiment(String name) throws RegistryException{
 		return (ExperimentResource)get(ResourceType.EXPERIMENT, name);
 	}
 //
@@ -465,7 +497,7 @@ public class WorkerResource extends AbstractResource {
      *
      * @return list of experiments for the user
      */
-	public List<ExperimentResource> getExperiments(){
+	public List<ExperimentResource> getExperiments() throws RegistryException{
 		List<ExperimentResource> result=new ArrayList<ExperimentResource>();
 		List<Resource> list = get(ResourceType.EXPERIMENT);
 		for (Resource resource : list) {
@@ -478,57 +510,75 @@ public class WorkerResource extends AbstractResource {
      *
      * @param experimentId  experiment name
      */
-	public void removeExperiment(String experimentId){
+	public void removeExperiment(String experimentId) throws RegistryException{
 		remove(ResourceType.EXPERIMENT, experimentId);
 	}
 
-    public List<ProjectResource> searchProjects (Map<String, String> filters){
+    public List<ProjectResource> searchProjects (Map<String, String> filters) throws RegistryException{
         List<ProjectResource> result = new ArrayList<ProjectResource>();
-        String query = "SELECT p from Project p WHERE ";
-        if (filters != null && filters.size() != 0) {
-           for (String field : filters.keySet()){
-               query += "p." + field + " LIKE '" + filters.get(field) + "%' AND " ;
-           }
-        }
-        query = query.substring(0, query.length() - 5);
-        EntityManager em = ResourceUtils.getEntityManager();
-        em.getTransaction().begin();
-        Query q = em.createQuery(query);
-        List resultList = q.getResultList();
-        for (Object o : resultList){
-            Project project = (Project) o;
-            ProjectResource projectResource = (ProjectResource)Utils.getResource(ResourceType.PROJECT, project);
-            result.add(projectResource);
+        EntityManager em = null;
+        try {
+            String query = "SELECT p from Project p WHERE ";
+            if (filters != null && filters.size() != 0) {
+                for (String field : filters.keySet()) {
+                    query += "p." + field + " LIKE '" + filters.get(field) + "%' AND ";
+                }
+            }
+            query = query.substring(0, query.length() - 5);
+            em = ResourceUtils.getEntityManager();
+            em.getTransaction().begin();
+            Query q = em.createQuery(query);
+            List resultList = q.getResultList();
+            for (Object o : resultList) {
+                Project project = (Project) o;
+                ProjectResource projectResource = (ProjectResource) Utils.getResource(ResourceType.PROJECT, project);
+                result.add(projectResource);
+            }
+            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();
         return result;
     }
 
-    public List<ExperimentResource> searchExperiments (Map<String, String> filters){
+    public List<ExperimentResource> searchExperiments (Map<String, String> filters) throws RegistryException{
         List<ExperimentResource> result = new ArrayList<ExperimentResource>();
-        String query = "SELECT e from Experiment e WHERE ";
-        if (filters != null && filters.size() != 0) {
-            for (String field : filters.keySet()){
-                if (field.equals(ExperimentConstants.EXECUTION_USER)){
-                    query += "e." + field + "= '" + filters.get(field) + "' AND " ;
-                }else {
-                    query += "e." + field + " LIKE '%" + filters.get(field) + "%' AND " ;
+        EntityManager em = null;
+        try {
+            String query = "SELECT e from Experiment e WHERE ";
+            if (filters != null && filters.size() != 0) {
+                for (String field : filters.keySet()) {
+                    if (field.equals(ExperimentConstants.EXECUTION_USER)) {
+                        query += "e." + field + "= '" + filters.get(field) + "' AND ";
+                    } else {
+                        query += "e." + field + " LIKE '%" + filters.get(field) + "%' AND ";
+                    }
                 }
             }
+            query = query.substring(0, query.length() - 5);
+            em = ResourceUtils.getEntityManager();
+            em.getTransaction().begin();
+            Query q = em.createQuery(query);
+            List resultList = q.getResultList();
+            for (Object o : resultList) {
+                Experiment experiment = (Experiment) o;
+                ExperimentResource experimentResource = (ExperimentResource) Utils.getResource(ResourceType.EXPERIMENT, experiment);
+                result.add(experimentResource);
+            }
+            em.getTransaction().commit();
+        } catch (Exception e) {
+            logger.error(e.getMessage(), e);
+            throw new RegistryException(e);
+        } finally {
+            if (em != null && em.isOpen()) {
+                em.close();
+            }
         }
-        query = query.substring(0, query.length() - 5);
-        EntityManager em = ResourceUtils.getEntityManager();
-        em.getTransaction().begin();
-        Query q = em.createQuery(query);
-        List resultList = q.getResultList();
-        for (Object o : resultList){
-            Experiment experiment = (Experiment) o;
-            ExperimentResource experimentResource = (ExperimentResource)Utils.getResource(ResourceType.EXPERIMENT, experiment);
-            result.add(experimentResource);
-        }
-        em.getTransaction().commit();
-        em.close();
         return result;
     }
 
@@ -536,23 +586,32 @@ public class WorkerResource extends AbstractResource {
      *
      * @return list of experiments for the user
      */
-    public List<ExperimentResource> getExperimentsByCaching(String user){
-        List<ExperimentResource> result=new ArrayList<ExperimentResource>();
-        String query = "SELECT e from Experiment e WHERE e.executionUser = '" + user + "'";
-        EntityManager em = ResourceUtils.getEntityManager();
+    public List<ExperimentResource> getExperimentsByCaching(String user) throws RegistryException{
+        List<ExperimentResource> result = new ArrayList<ExperimentResource>();
+        EntityManager em = null;
+        try {
+            String query = "SELECT e from Experiment e WHERE e.executionUser = '" + user + "'";
+            em = ResourceUtils.getEntityManager();
 //        OpenJPAEntityManagerFactory oemf = OpenJPAPersistence.cast(em.getEntityManagerFactory());
 //        QueryResultCache qcache = oemf.getQueryResultCache();
-        // qcache.evictAll(Experiment.class);
-        em.getTransaction().begin();
-        Query q = em.createQuery(query);
-        List resultList = q.getResultList();
-        for (Object o : resultList){
-            Experiment experiment = (Experiment) o;
-            ExperimentResource experimentResource = (ExperimentResource)Utils.getResource(ResourceType.EXPERIMENT, experiment);
-            result.add(experimentResource);
+            // qcache.evictAll(Experiment.class);
+            em.getTransaction().begin();
+            Query q = em.createQuery(query);
+            List resultList = q.getResultList();
+            for (Object o : resultList) {
+                Experiment experiment = (Experiment) o;
+                ExperimentResource experimentResource = (ExperimentResource) Utils.getResource(ResourceType.EXPERIMENT, experiment);
+                result.add(experimentResource);
+            }
+            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();
         return result;
     }
 }