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/NodeOutputResource.java
----------------------------------------------------------------------
diff --git 
a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/NodeOutputResource.java
 
b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/NodeOutputResource.java
index 95745ec..e7354ea 100644
--- 
a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/NodeOutputResource.java
+++ 
b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/NodeOutputResource.java
@@ -31,6 +31,7 @@ import 
org.apache.airavata.persistance.registry.jpa.ResourceUtils;
 import org.apache.airavata.persistance.registry.jpa.model.NodeOutput;
 import org.apache.airavata.persistance.registry.jpa.model.NodeOutput_PK;
 import org.apache.airavata.persistance.registry.jpa.model.WorkflowNodeDetail;
+import org.apache.airavata.registry.cpi.RegistryException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -83,60 +84,69 @@ public class NodeOutputResource extends AbstractResource {
         this.value = value;
     }
 
-    @Override
-    public Resource create(ResourceType type) {
+    
+    public Resource create(ResourceType type) throws RegistryException {
         logger.error("Unsupported resource type for node output data 
resource.", new UnsupportedOperationException());
         throw new UnsupportedOperationException();
     }
 
-    @Override
-    public void remove(ResourceType type, Object name) {
+    
+    public void remove(ResourceType type, Object name) throws 
RegistryException{
         logger.error("Unsupported resource type for node output data 
resource.", new UnsupportedOperationException());
         throw new UnsupportedOperationException();
     }
 
-    @Override
-    public Resource get(ResourceType type, Object name) {
+    
+    public Resource get(ResourceType type, Object name) throws 
RegistryException{
         logger.error("Unsupported resource type for node output data 
resource.", new UnsupportedOperationException());
         throw new UnsupportedOperationException();
     }
 
-    @Override
-    public List<Resource> get(ResourceType type) {
+    
+    public List<Resource> get(ResourceType type) throws RegistryException{
         logger.error("Unsupported resource type for node output data 
resource.", new UnsupportedOperationException());
         throw new UnsupportedOperationException();
     }
 
-    @Override
-    public void save() {
-
-        EntityManager em = ResourceUtils.getEntityManager();
-        NodeOutput existingOutput = em.find(NodeOutput.class, new 
NodeOutput_PK(outputKey, nodeDetailResource.getNodeInstanceId()));
-        em.close();
-
-        em = ResourceUtils.getEntityManager();
-        em.getTransaction().begin();
-        NodeOutput nodeOutput = new NodeOutput();
-        WorkflowNodeDetail nodeDetail = em.find(WorkflowNodeDetail.class, 
nodeDetailResource.getNodeInstanceId());
-        nodeOutput.setNode(nodeDetail);
-        nodeOutput.setNodeId(nodeDetail.getNodeId());
-        nodeOutput.setOutputKey(outputKey);
-        nodeOutput.setOutputKeyType(outputType);
-        nodeOutput.setValue(value);
-        nodeOutput.setMetadata(metadata);
-        
-        if (existingOutput != null){
-            existingOutput.setNode(nodeDetail);
-            existingOutput.setNodeId(nodeDetail.getNodeId());
-            existingOutput.setOutputKey(outputKey);
-            existingOutput.setOutputKeyType(outputType);
-            existingOutput.setValue(value);
-            existingOutput.setMetadata(metadata);
-            nodeOutput = em.merge(existingOutput);
-        }else {
-            em.persist(nodeOutput);
+    
+    public void save() throws RegistryException{
+
+        EntityManager em = null;
+        try {
+            em = ResourceUtils.getEntityManager();
+            NodeOutput existingOutput = em.find(NodeOutput.class, new 
NodeOutput_PK(outputKey, nodeDetailResource.getNodeInstanceId()));
+            em.close();
+
+            em = ResourceUtils.getEntityManager();
+            em.getTransaction().begin();
+            NodeOutput nodeOutput = new NodeOutput();
+            WorkflowNodeDetail nodeDetail = em.find(WorkflowNodeDetail.class, 
nodeDetailResource.getNodeInstanceId());
+            nodeOutput.setNode(nodeDetail);
+            nodeOutput.setNodeId(nodeDetail.getNodeId());
+            nodeOutput.setOutputKey(outputKey);
+            nodeOutput.setOutputKeyType(outputType);
+            nodeOutput.setValue(value);
+            nodeOutput.setMetadata(metadata);
+
+            if (existingOutput != null) {
+                existingOutput.setNode(nodeDetail);
+                existingOutput.setNodeId(nodeDetail.getNodeId());
+                existingOutput.setOutputKey(outputKey);
+                existingOutput.setOutputKeyType(outputType);
+                existingOutput.setValue(value);
+                existingOutput.setMetadata(metadata);
+                nodeOutput = em.merge(existingOutput);
+            } else {
+                em.persist(nodeOutput);
+            }
+            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();
     }
 }

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/ProjectResource.java
----------------------------------------------------------------------
diff --git 
a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ProjectResource.java
 
b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ProjectResource.java
index 9d8b894..bb8755c 100644
--- 
a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ProjectResource.java
+++ 
b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ProjectResource.java
@@ -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.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -67,7 +68,7 @@ public class ProjectResource extends AbstractResource {
      * @param type child resource type
      * @return child resource
      */
-    public Resource create(ResourceType type) {
+    public Resource create(ResourceType type) throws RegistryException {
         if (type == ResourceType.EXPERIMENT) {
             ExperimentResource experimentResource = new ExperimentResource();
             experimentResource.setGateway(getGateway());
@@ -91,26 +92,35 @@ public class ProjectResource 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();
-        if (type == ResourceType.EXPERIMENT) {
-               QueryGenerator generator = new QueryGenerator(EXPERIMENT);
-               generator.setParameter(ExperimentConstants.EXPERIMENT_ID, name);
-               Query q = generator.deleteQuery(em);
-               q.executeUpdate();
-        }else if (type == ResourceType.PROJECT_USER){
-            QueryGenerator generator = new QueryGenerator(PROJECT_USER);
-            generator.setParameter(ProjectUserConstants.USERNAME, name);
-            generator.setParameter(ProjectUserConstants.PROJECT_ID, this.id);
-            Query q = generator.deleteQuery(em);
-            q.executeUpdate();
-        }else {
-            logger.error("Unsupported resource type for project resource.", 
new IllegalArgumentException());
-            throw new IllegalArgumentException("Unsupported resource type for 
project resource.");
+    public void remove(ResourceType type, Object name) throws 
RegistryException{
+        EntityManager em = null;
+        try {
+            em = ResourceUtils.getEntityManager();
+            em.getTransaction().begin();
+            if (type == ResourceType.EXPERIMENT) {
+                QueryGenerator generator = new QueryGenerator(EXPERIMENT);
+                generator.setParameter(ExperimentConstants.EXPERIMENT_ID, 
name);
+                Query q = generator.deleteQuery(em);
+                q.executeUpdate();
+            } else if (type == ResourceType.PROJECT_USER) {
+                QueryGenerator generator = new QueryGenerator(PROJECT_USER);
+                generator.setParameter(ProjectUserConstants.USERNAME, name);
+                generator.setParameter(ProjectUserConstants.PROJECT_ID, 
this.id);
+                Query q = generator.deleteQuery(em);
+                q.executeUpdate();
+            } else {
+                logger.error("Unsupported resource type for project 
resource.", new IllegalArgumentException());
+                throw new IllegalArgumentException("Unsupported resource type 
for project resource.");
+            }
+            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();
     }
 
     /**
@@ -119,35 +129,44 @@ public class ProjectResource extends AbstractResource {
      * @param name child resource name
      * @return child resource
      */
-    public Resource get(ResourceType type, Object name) {
-        if (type == ResourceType.EXPERIMENT) {
-            EntityManager em = ResourceUtils.getEntityManager();
-            em.getTransaction().begin();
-               QueryGenerator generator = new QueryGenerator(EXPERIMENT);
-               generator.setParameter(ExperimentConstants.EXPERIMENT_ID, name);
-               Query q = generator.selectQuery(em);
-            Experiment experiment = (Experiment) q.getSingleResult();
-            ExperimentResource experimentResource = (ExperimentResource)
-                    Utils.getResource(ResourceType.EXPERIMENT, experiment);
-            em.getTransaction().commit();
-            em.close();
-            return experimentResource;
-        } else if (type == ResourceType.PROJECT_USER){
-            EntityManager em = ResourceUtils.getEntityManager();
-            em.getTransaction().begin();
-            QueryGenerator generator = new QueryGenerator(PROJECT_USER);
-            generator.setParameter(ProjectUserConstants.USERNAME, name);
-            generator.setParameter(ProjectUserConstants.PROJECT_ID, this.id);
-            Query q = generator.selectQuery(em);
-            ProjectUser prUser = (ProjectUser) q.getSingleResult();
-            ExperimentResource experimentResource = (ExperimentResource)
-                    Utils.getResource(ResourceType.PROJECT_USER, prUser);
-            em.getTransaction().commit();
-            em.close();
-            return experimentResource;
-        }else{
-            logger.error("Unsupported resource type for project resource.", 
new IllegalArgumentException());
-            throw new IllegalArgumentException("Unsupported resource type for 
project resource.");
+    public Resource get(ResourceType type, Object name) throws 
RegistryException {
+        EntityManager em = null;
+        try {
+            if (type == ResourceType.EXPERIMENT) {
+                em = ResourceUtils.getEntityManager();
+                em.getTransaction().begin();
+                QueryGenerator generator = new QueryGenerator(EXPERIMENT);
+                generator.setParameter(ExperimentConstants.EXPERIMENT_ID, 
name);
+                Query q = generator.selectQuery(em);
+                Experiment experiment = (Experiment) q.getSingleResult();
+                ExperimentResource experimentResource = (ExperimentResource)
+                        Utils.getResource(ResourceType.EXPERIMENT, experiment);
+                em.getTransaction().commit();
+                em.close();
+                return experimentResource;
+            } else if (type == ResourceType.PROJECT_USER) {
+                em = ResourceUtils.getEntityManager();
+                em.getTransaction().begin();
+                QueryGenerator generator = new QueryGenerator(PROJECT_USER);
+                generator.setParameter(ProjectUserConstants.USERNAME, name);
+                generator.setParameter(ProjectUserConstants.PROJECT_ID, 
this.id);
+                Query q = generator.selectQuery(em);
+                ProjectUser prUser = (ProjectUser) q.getSingleResult();
+                ExperimentResource experimentResource = (ExperimentResource)
+                        Utils.getResource(ResourceType.PROJECT_USER, prUser);
+                em.getTransaction().commit();
+                em.close();
+                return experimentResource;
+            } else {
+                logger.error("Unsupported resource type for project 
resource.", new IllegalArgumentException());
+                throw new IllegalArgumentException("Unsupported resource type 
for project resource.");
+            }
+        } catch (Exception e) {
+            throw new RegistryException(e);
+        } finally {
+            if (em != null && em.isOpen()) {
+                em.close();
+            }
         }
     }
 
@@ -156,45 +175,55 @@ public class ProjectResource extends AbstractResource {
      * @param type child resource type
      * @return list of child resources
      */
-    public List<Resource> get(ResourceType type) {
+    public List<Resource> get(ResourceType type) throws RegistryException{
         List<Resource> resourceList = new ArrayList<Resource>();
-        if (type == ResourceType.EXPERIMENT) {
-            EntityManager em = ResourceUtils.getEntityManager();
-            em.getTransaction().begin();
-               QueryGenerator generator = new QueryGenerator(EXPERIMENT);
-               generator.setParameter(ExperimentConstants.PROJECT_ID, id);
-               Query q = generator.selectQuery(em);
-            List<?> results = q.getResultList();
-            if (results.size() != 0) {
-                for (Object result : results) {
-                    Experiment experiment = (Experiment) result;
-                    ExperimentResource experimentResource = 
(ExperimentResource)
-                            Utils.getResource(ResourceType.EXPERIMENT, 
experiment);
-                    resourceList.add(experimentResource);
+        EntityManager em = null;
+        try {
+            if (type == ResourceType.EXPERIMENT) {
+                em = ResourceUtils.getEntityManager();
+                em.getTransaction().begin();
+                QueryGenerator generator = new QueryGenerator(EXPERIMENT);
+                generator.setParameter(ExperimentConstants.PROJECT_ID, id);
+                Query q = generator.selectQuery(em);
+                List<?> results = q.getResultList();
+                if (results.size() != 0) {
+                    for (Object result : results) {
+                        Experiment experiment = (Experiment) result;
+                        ExperimentResource experimentResource = 
(ExperimentResource)
+                                Utils.getResource(ResourceType.EXPERIMENT, 
experiment);
+                        resourceList.add(experimentResource);
+                    }
                 }
-            }
-            em.getTransaction().commit();
-            em.close();
-        }else if (type == ResourceType.PROJECT_USER) {
-            EntityManager em = ResourceUtils.getEntityManager();
-            em.getTransaction().begin();
-            QueryGenerator generator = new QueryGenerator(PROJECT_USER);
-            generator.setParameter(ProjectUserConstants.PROJECT_ID, id);
-            Query q = generator.selectQuery(em);
-            List<?> results = q.getResultList();
-            if (results.size() != 0) {
-                for (Object result : results) {
-                    ProjectUser projectUser = (ProjectUser) result;
-                    ProjectUserResource pr = (ProjectUserResource)
-                            Utils.getResource(ResourceType.PROJECT_USER, 
projectUser);
-                    resourceList.add(pr);
+                em.getTransaction().commit();
+                em.close();
+            } else if (type == ResourceType.PROJECT_USER) {
+                em = ResourceUtils.getEntityManager();
+                em.getTransaction().begin();
+                QueryGenerator generator = new QueryGenerator(PROJECT_USER);
+                generator.setParameter(ProjectUserConstants.PROJECT_ID, id);
+                Query q = generator.selectQuery(em);
+                List<?> results = q.getResultList();
+                if (results.size() != 0) {
+                    for (Object result : results) {
+                        ProjectUser projectUser = (ProjectUser) result;
+                        ProjectUserResource pr = (ProjectUserResource)
+                                Utils.getResource(ResourceType.PROJECT_USER, 
projectUser);
+                        resourceList.add(pr);
+                    }
                 }
+                em.getTransaction().commit();
+                em.close();
+            } else {
+                logger.error("Unsupported resource type for project 
resource.", new IllegalArgumentException());
+                throw new IllegalArgumentException("Unsupported resource type 
for project resource.");
+            }
+        } 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();
-        }else {
-            logger.error("Unsupported resource type for project resource.", 
new IllegalArgumentException());
-            throw new IllegalArgumentException("Unsupported resource type for 
project resource.");
         }
         return resourceList;
     }
@@ -202,38 +231,47 @@ public class ProjectResource extends AbstractResource {
     /**
      * save project to the database
      */
-    public void save() {
-        EntityManager em = ResourceUtils.getEntityManager();
-        Project existingProject = em.find(Project.class, id);
-        em.close();
-
-        em = ResourceUtils.getEntityManager();
-        em.getTransaction().begin();
-        Project project = new Project();
-        project.setProject_id(id);
-        project.setProject_name(name);
-        Gateway modelGateway = em.find(Gateway.class, 
gateway.getGatewayName());
-        project.setGateway(modelGateway);
-        Users user = em.find(Users.class, worker.getUser());
-        project.setUsers(user);
-        project.setUser_name(user.getUser_name());
-        project.setDescription(description);
-        project.setCreationTime(creationTime);
-
-        if(existingProject != null){
-           existingProject.setProject_name(name);
-           existingProject.setGateway(modelGateway);
-           existingProject.setUsers(user);
-           existingProject.setUser_name(user.getUser_name());
-           existingProject.setDescription(description);
-           existingProject.setCreationTime(creationTime);
-           project = em.merge(existingProject);
-        }else {
-            em.persist(project);
-        }
+    public void save() throws RegistryException{
+        EntityManager em = null;
+        try {
+            em = ResourceUtils.getEntityManager();
+            Project existingProject = em.find(Project.class, id);
+            em.close();
+
+            em = ResourceUtils.getEntityManager();
+            em.getTransaction().begin();
+            Project project = new Project();
+            project.setProject_id(id);
+            project.setProject_name(name);
+            Gateway modelGateway = em.find(Gateway.class, 
gateway.getGatewayName());
+            project.setGateway(modelGateway);
+            Users user = em.find(Users.class, worker.getUser());
+            project.setUsers(user);
+            project.setUser_name(user.getUser_name());
+            project.setDescription(description);
+            project.setCreationTime(creationTime);
+
+            if (existingProject != null) {
+                existingProject.setProject_name(name);
+                existingProject.setGateway(modelGateway);
+                existingProject.setUsers(user);
+                existingProject.setUser_name(user.getUser_name());
+                existingProject.setDescription(description);
+                existingProject.setCreationTime(creationTime);
+                project = em.merge(existingProject);
+            } else {
+                em.persist(project);
+            }
 
-        em.getTransaction().commit();
-        em.close();
+            em.getTransaction().commit();
+        } catch (Exception e) {
+            logger.error(e.getMessage(), e);
+            throw new RegistryException(e);
+        } finally {
+            if (em != null && em.isOpen()) {
+                em.close();
+            }
+        }
     }
 
     public String getId() {
@@ -313,7 +351,7 @@ public class ProjectResource extends AbstractResource {
      * @param experimentId experiment ID
      * @return whether the experiment exist
      */
-    public boolean isExperimentExists(String experimentId){
+    public boolean isExperimentExists(String experimentId) throws 
RegistryException{
                return isExists(ResourceType.EXPERIMENT, experimentId);
        }
 
@@ -322,7 +360,7 @@ public class ProjectResource extends AbstractResource {
      * @param experimentId experiment ID
      * @return  experiment resource
      */
-    public ExperimentResource createExperiment(String experimentId){
+    public ExperimentResource createExperiment(String experimentId) throws 
RegistryException{
                ExperimentResource experimentResource = 
(ExperimentResource)create(ResourceType.EXPERIMENT);
                experimentResource.setExpID(experimentId);
                return experimentResource;
@@ -333,7 +371,7 @@ public class ProjectResource extends AbstractResource {
      * @param experimentId experiment ID
      * @return experiment resource
      */
-       public ExperimentResource getExperiment(String experimentId){
+       public ExperimentResource getExperiment(String experimentId) throws 
RegistryException{
                return 
(ExperimentResource)get(ResourceType.EXPERIMENT,experimentId);
        }
 
@@ -341,7 +379,7 @@ public class ProjectResource extends AbstractResource {
      *
      * @return  list of experiments
      */
-    public List<ExperimentResource> getExperiments(){
+    public List<ExperimentResource> getExperiments() throws RegistryException{
                List<Resource> list = get(ResourceType.EXPERIMENT);
                List<ExperimentResource> result=new 
ArrayList<ExperimentResource>();
                for (Resource resource : list) {
@@ -354,11 +392,11 @@ public class ProjectResource extends AbstractResource {
      *
      * @param experimentId experiment ID
      */
-    public void removeExperiment(String experimentId){
+    public void removeExperiment(String experimentId) throws RegistryException{
                remove(ResourceType.EXPERIMENT, experimentId);
        }
 
-    public List<ProjectUserResource> getProjectUserList (){
+    public List<ProjectUserResource> getProjectUserList () throws 
RegistryException{
         List<Resource> resources = get(ResourceType.PROJECT_USER);
         List<ProjectUserResource> projectUserResources = new 
ArrayList<ProjectUserResource>();
         if (resources != null && !resources.isEmpty()){

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/ProjectUserResource.java
----------------------------------------------------------------------
diff --git 
a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ProjectUserResource.java
 
b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ProjectUserResource.java
index 3eade6a..d1b34ee 100644
--- 
a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ProjectUserResource.java
+++ 
b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ProjectUserResource.java
@@ -25,6 +25,7 @@ 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.registry.cpi.RegistryException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -53,57 +54,66 @@ public class ProjectUserResource extends AbstractResource {
         this.userName = userName;
     }
 
-    @Override
-    public Resource create(ResourceType type) {
+    
+    public Resource create(ResourceType type) throws RegistryException {
         logger.error("Unsupported resource type for project resource data 
resource.", new UnsupportedOperationException());
         throw new UnsupportedOperationException();
     }
 
-    @Override
-    public void remove(ResourceType type, Object name) {
+    
+    public void remove(ResourceType type, Object name) throws 
RegistryException{
         logger.error("Unsupported resource type for project resource data 
resource.", new UnsupportedOperationException());
         throw new UnsupportedOperationException();
     }
 
-    @Override
-    public Resource get(ResourceType type, Object name) {
+    
+    public Resource get(ResourceType type, Object name) throws 
RegistryException{
         logger.error("Unsupported resource type for project resource data 
resource.", new UnsupportedOperationException());
         throw new UnsupportedOperationException();
     }
 
-    @Override
-    public List<Resource> get(ResourceType type) {
+    
+    public List<Resource> get(ResourceType type) throws RegistryException{
         logger.error("Unsupported resource type for project resource data 
resource.", new UnsupportedOperationException());
         throw new UnsupportedOperationException();
     }
 
-    @Override
-    public void save() {
-        EntityManager em = ResourceUtils.getEntityManager();
-        ProjectUser existingPrUser = em.find(ProjectUser.class, new 
ProjectUser_PK(projectId, userName));
-        em.close();
-
-        em = ResourceUtils.getEntityManager();
-        em.getTransaction().begin();
-        ProjectUser prUser = new ProjectUser();
-        prUser.setProjectID(projectId);
-        prUser.setUserName(userName);
-        Users user = em.find(Users.class, userName);
-        prUser.setUser(user);
-        Project project = em.find(Project.class, projectId);
-        prUser.setProject(project);
-
-        if(existingPrUser != null){
-            existingPrUser.setProjectID(projectId);
-            existingPrUser.setUserName(userName);
-            existingPrUser.setUser(user);
-            existingPrUser.setProject(project);
-            prUser = em.merge(existingPrUser);
-        }else {
-            em.persist(prUser);
+    
+    public void save() throws RegistryException{
+        EntityManager em = null;
+        try {
+            em = ResourceUtils.getEntityManager();
+            ProjectUser existingPrUser = em.find(ProjectUser.class, new 
ProjectUser_PK(projectId, userName));
+            em.close();
+
+            em = ResourceUtils.getEntityManager();
+            em.getTransaction().begin();
+            ProjectUser prUser = new ProjectUser();
+            prUser.setProjectID(projectId);
+            prUser.setUserName(userName);
+            Users user = em.find(Users.class, userName);
+            prUser.setUser(user);
+            Project project = em.find(Project.class, projectId);
+            prUser.setProject(project);
+
+            if (existingPrUser != null) {
+                existingPrUser.setProjectID(projectId);
+                existingPrUser.setUserName(userName);
+                existingPrUser.setUser(user);
+                existingPrUser.setProject(project);
+                prUser = em.merge(existingPrUser);
+            } else {
+                em.persist(prUser);
+            }
+
+            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();
     }
 }

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/PublishWorkflowResource.java
----------------------------------------------------------------------
diff --git 
a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/PublishWorkflowResource.java
 
b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/PublishWorkflowResource.java
index 0ee7da0..a4bbc52 100644
--- 
a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/PublishWorkflowResource.java
+++ 
b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/PublishWorkflowResource.java
@@ -27,14 +27,12 @@ import 
org.apache.airavata.persistance.registry.jpa.model.Gateway;
 import org.apache.airavata.persistance.registry.jpa.model.Published_Workflow;
 import 
org.apache.airavata.persistance.registry.jpa.model.Published_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 PublishWorkflowResource extends AbstractResource {
@@ -155,7 +153,7 @@ public class PublishWorkflowResource extends 
AbstractResource {
      * @param type type of the child resource
      * @return UnsupportedOperationException
      */
-    public Resource create(ResourceType type) {
+    public Resource create(ResourceType type) throws RegistryException {
         logger.error("Unsupported resource type for published workflow 
resource.", new UnsupportedOperationException());
         throw new UnsupportedOperationException();
     }
@@ -166,7 +164,7 @@ public class PublishWorkflowResource extends 
AbstractResource {
      * @param type type of the child resource
      * @param name name of the child resource
      */
-    public void remove(ResourceType type, Object name) {
+    public void remove(ResourceType type, Object name) throws 
RegistryException{
         logger.error("Unsupported resource type for published workflow 
resource.", new UnsupportedOperationException());
         throw new UnsupportedOperationException();
     }
@@ -178,40 +176,18 @@ public class PublishWorkflowResource extends 
AbstractResource {
      * @param name name of the child resource
      * @return UnsupportedOperationException
      */
-    public Resource get(ResourceType type, Object name) {
+    public Resource get(ResourceType type, Object name) throws 
RegistryException{
         logger.error("Unsupported resource type for published workflow 
resource.", new UnsupportedOperationException());
         throw new UnsupportedOperationException();
     }
 
     /**
-     *
-     * @param keys object list including gateway name and published workflow 
name
-     * @return published workflow resource
-     */
-    public List<Resource> populate(Object[] keys) {
-        List<Resource> list = new ArrayList<Resource>();
-        EntityManager em = ResourceUtils.getEntityManager();
-        em.getTransaction().begin();
-        QueryGenerator generator = new QueryGenerator(PUBLISHED_WORKFLOW);
-        generator.setParameter(PublishedWorkflowConstants.GATEWAY_NAME, 
keys[0]);
-        
generator.setParameter(PublishedWorkflowConstants.PUBLISH_WORKFLOW_NAME, 
keys[1]);
-        Query q = generator.selectQuery(em);
-        Published_Workflow publishedWorkflow = 
(Published_Workflow)q.getSingleResult();
-        PublishWorkflowResource publishWorkflowResource = 
(PublishWorkflowResource)
-                Utils.getResource(ResourceType.PUBLISHED_WORKFLOW, 
publishedWorkflow);
-        em.getTransaction().commit();
-        em.close();
-        list.add(publishWorkflowResource);
-        return list;
-    }
-
-    /**
      * since published workflows are at the leaf level of the
      * data structure, this method is not valid
      * @param type type of the child resource
      * @return UnsupportedOperationException
      */
-    public List<Resource> get(ResourceType type) {
+    public List<Resource> get(ResourceType type) throws RegistryException{
         logger.error("Unsupported resource type for published workflow 
resource.", new UnsupportedOperationException());
         throw new UnsupportedOperationException();
     }
@@ -219,38 +195,47 @@ public class PublishWorkflowResource extends 
AbstractResource {
     /**
      * save published workflow to the database
      */
-    public void save() {
-        EntityManager em = ResourceUtils.getEntityManager();
-        Published_Workflow existingWF = em.find(Published_Workflow.class, new 
Published_Workflow_PK(gateway.getGatewayName(), name));
-        em.close();
+    public void save() throws RegistryException{
+        EntityManager em = null;
+        try {
+            em = ResourceUtils.getEntityManager();
+            Published_Workflow existingWF = em.find(Published_Workflow.class, 
new Published_Workflow_PK(gateway.getGatewayName(), name));
+            em.close();
 
-        em = ResourceUtils.getEntityManager();
-        em.getTransaction().begin();
-        Published_Workflow publishedWorkflow = new Published_Workflow();
-        publishedWorkflow.setPublish_workflow_name(getName());
-        publishedWorkflow.setPublished_date(publishedDate);
-        publishedWorkflow.setVersion(version);
-        byte[] bytes = content.getBytes();
-        publishedWorkflow.setWorkflow_content(bytes);
-        Gateway gateway = new Gateway();
-        gateway.setGateway_name(this.gateway.getGatewayName());
-        publishedWorkflow.setGateway(gateway);
-        Users user = new Users();
-        user.setUser_name(createdUser);
-        publishedWorkflow.setUser(user);
-        if(existingWF != null){
-            existingWF.setUser(user);
-            existingWF.setPublished_date(publishedDate);
-            existingWF.setWorkflow_content(bytes);
-            existingWF.setVersion(version);
-            existingWF.setPath(path);
-            publishedWorkflow = em.merge(existingWF);
-        }else {
-            em.merge(publishedWorkflow);
-        }
+            em = ResourceUtils.getEntityManager();
+            em.getTransaction().begin();
+            Published_Workflow publishedWorkflow = new Published_Workflow();
+            publishedWorkflow.setPublish_workflow_name(getName());
+            publishedWorkflow.setPublished_date(publishedDate);
+            publishedWorkflow.setVersion(version);
+            byte[] bytes = content.getBytes();
+            publishedWorkflow.setWorkflow_content(bytes);
+            Gateway gateway = new Gateway();
+            gateway.setGateway_name(this.gateway.getGatewayName());
+            publishedWorkflow.setGateway(gateway);
+            Users user = new Users();
+            user.setUser_name(createdUser);
+            publishedWorkflow.setUser(user);
+            if (existingWF != null) {
+                existingWF.setUser(user);
+                existingWF.setPublished_date(publishedDate);
+                existingWF.setWorkflow_content(bytes);
+                existingWF.setVersion(version);
+                existingWF.setPath(path);
+                publishedWorkflow = em.merge(existingWF);
+            } else {
+                em.merge(publishedWorkflow);
+            }
 
-        em.getTransaction().commit();
-        em.close();
+            em.getTransaction().commit();
+        } catch (Exception e) {
+            logger.error(e.getMessage(), e);
+            throw new RegistryException(e);
+        } finally {
+            if (em != null && em.isOpen()) {
+                em.close();
+            }
+        }
     }
 
 
@@ -261,7 +246,7 @@ public class PublishWorkflowResource extends 
AbstractResource {
      * @param name name of the child resource
      * @return UnsupportedOperationException
      */
-    public boolean isExists(ResourceType type, Object name) {
+    public boolean isExists(ResourceType type, Object name) throws 
RegistryException{
         logger.error("Unsupported resource type for published 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/QosParamResource.java
----------------------------------------------------------------------
diff --git 
a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/QosParamResource.java
 
b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/QosParamResource.java
index eaef63f..f2ce6a0 100644
--- 
a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/QosParamResource.java
+++ 
b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/QosParamResource.java
@@ -29,6 +29,7 @@ import 
org.apache.airavata.persistance.registry.jpa.model.QosParam;
 import org.apache.airavata.persistance.registry.jpa.model.TaskDetail;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.apache.airavata.registry.cpi.RegistryException;
 
 import javax.persistence.EntityManager;
 import java.util.List;
@@ -90,49 +91,58 @@ public class QosParamResource extends AbstractResource {
         this.noOfRetries = noOfRetries;
     }
 
-    @Override
-    public Resource create(ResourceType type) {
+    
+    public Resource create(ResourceType type) throws RegistryException{
         logger.error("Unsupported resource type for qos params resource.", new 
UnsupportedOperationException());
         throw new UnsupportedOperationException();
     }
 
-    @Override
-    public void remove(ResourceType type, Object name) {
+    
+    public void remove(ResourceType type, Object name) throws 
RegistryException{
         logger.error("Unsupported resource type for qos params resource.", new 
UnsupportedOperationException());
         throw new UnsupportedOperationException();
     }
 
-    @Override
-    public Resource get(ResourceType type, Object name) {
+    
+    public Resource get(ResourceType type, Object name) throws 
RegistryException{
         logger.error("Unsupported resource type for qos params resource.", new 
UnsupportedOperationException());
         throw new UnsupportedOperationException();
     }
 
-    @Override
-    public List<Resource> get(ResourceType type) {
+    
+    public List<Resource> get(ResourceType type) throws RegistryException{
         logger.error("Unsupported resource type for qos params resource.", new 
UnsupportedOperationException());
         throw new UnsupportedOperationException();
     }
 
-    @Override
-    public void save() {
-        EntityManager em = ResourceUtils.getEntityManager();
-        em.getTransaction().begin();
-        QosParam qosParam = new QosParam();
-        Experiment experiment = em.find(Experiment.class, 
experimentResource.getExpID());
-        if (taskDetailResource != null){
-            TaskDetail taskDetail = em.find(TaskDetail.class, 
taskDetailResource.getTaskId());
-            qosParam.setTaskId(taskDetailResource.getTaskId());
-            qosParam.setTask(taskDetail);
+    
+    public void save() throws RegistryException{
+        EntityManager em = null;
+        try {
+            em = ResourceUtils.getEntityManager();
+            em.getTransaction().begin();
+            QosParam qosParam = new QosParam();
+            Experiment experiment = em.find(Experiment.class, 
experimentResource.getExpID());
+            if (taskDetailResource != null) {
+                TaskDetail taskDetail = em.find(TaskDetail.class, 
taskDetailResource.getTaskId());
+                qosParam.setTaskId(taskDetailResource.getTaskId());
+                qosParam.setTask(taskDetail);
+            }
+            qosParam.setExpId(experimentResource.getExpID());
+            qosParam.setExperiment(experiment);
+            qosParam.setStartExecutionAt(startExecutionAt);
+            qosParam.setExecuteBefore(executeBefore);
+            qosParam.setNoOfRetries(noOfRetries);
+            em.persist(qosParam);
+            qosId = qosParam.getQosId();
+            em.getTransaction().commit();
+        } catch (Exception e) {
+            logger.error(e.getMessage(), e);
+            throw new RegistryException(e);
+        } finally {
+            if (em != null && em.isOpen()) {
+                em.close();
+            }
         }
-        qosParam.setExpId(experimentResource.getExpID());
-        qosParam.setExperiment(experiment);
-        qosParam.setStartExecutionAt(startExecutionAt);
-        qosParam.setExecuteBefore(executeBefore);
-        qosParam.setNoOfRetries(noOfRetries);
-        em.persist(qosParam);
-        qosId = qosParam.getQosId();
-        em.getTransaction().commit();
-        em.close();
     }
 }

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/ServiceDescriptorResource.java
----------------------------------------------------------------------
diff --git 
a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ServiceDescriptorResource.java
 
b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ServiceDescriptorResource.java
index d0a93ba..371e4ea 100644
--- 
a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ServiceDescriptorResource.java
+++ 
b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ServiceDescriptorResource.java
@@ -27,6 +27,7 @@ import org.apache.airavata.persistance.registry.jpa.model.*;
 import org.apache.airavata.persistance.registry.jpa.utils.QueryGenerator;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.apache.airavata.registry.cpi.RegistryException;
 
 import javax.persistence.EntityManager;
 import javax.persistence.Query;
@@ -72,7 +73,7 @@ public class ServiceDescriptorResource extends 
AbstractResource {
         this.content = content;
     }
 
-    public Resource create(ResourceType type) {
+    public Resource create(ResourceType type) throws RegistryException{
         if (type == ResourceType.APPLICATION_DESCRIPTOR) {
             ApplicationDescriptorResource applicationDescriptorResource = new 
ApplicationDescriptorResource();
             applicationDescriptorResource.setGatewayName(gatewayName);
@@ -83,84 +84,86 @@ public class ServiceDescriptorResource extends 
AbstractResource {
         throw new IllegalArgumentException("Unsupported resource type for 
service descriptor resource.");
     }
 
-    public void remove(ResourceType type, Object name) {
+    public void remove(ResourceType type, Object name) throws 
RegistryException{
         logger.error("Unsupported resource type for service descriptor 
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 service descriptor 
resource.", new UnsupportedOperationException());
         throw new UnsupportedOperationException();
     }
 
-    public List<Resource> populate(Object[] keys) {
-        List<Resource> list = new ArrayList<Resource>();
-        EntityManager em = ResourceUtils.getEntityManager();
-        em.getTransaction().begin();
-        QueryGenerator generator = new QueryGenerator(SERVICE_DESCRIPTOR);
-        generator.setParameter(ServiceDescriptorConstants.GATEWAY_NAME, 
keys[0]);
-        generator.setParameter(ServiceDescriptorConstants.SERVICE_DESC_ID, 
keys[1]);
-        Query q = generator.selectQuery(em);
-        Service_Descriptor serviceDescriptor = 
(Service_Descriptor)q.getSingleResult();
-        ServiceDescriptorResource serviceDescriptorResource = 
(ServiceDescriptorResource)Utils.getResource(ResourceType.SERVICE_DESCRIPTOR, 
serviceDescriptor);
-        em.getTransaction().commit();
-        em.close();
-        list.add(serviceDescriptorResource);
-        return list;
-    }
 
-    public List<Resource> get(ResourceType type) {
+    public List<Resource> get(ResourceType type) throws RegistryException{
         List<Resource> resourceList = new ArrayList<Resource>();
-        if (type == ResourceType.APPLICATION_DESCRIPTOR) {
-            EntityManager em = ResourceUtils.getEntityManager();
-            em.getTransaction().begin();
-            QueryGenerator queryGenerator = new 
QueryGenerator(APPLICATION_DESCRIPTOR);
-            
queryGenerator.setParameter(ApplicationDescriptorConstants.GATEWAY_NAME, 
gatewayName);
-            
queryGenerator.setParameter(ApplicationDescriptorConstants.SERVICE_DESC_ID, 
serviceDescName);
-            Query q = queryGenerator.selectQuery(em);
-            List results = q.getResultList();
-            if (results.size() != 0) {
-                for (Object result : results) {
-                    Application_Descriptor applicationDescriptor = 
(Application_Descriptor) result;
-                    ApplicationDescriptorResource 
applicationDescriptorResource = 
(ApplicationDescriptorResource)Utils.getResource(ResourceType.APPLICATION_DESCRIPTOR,
 applicationDescriptor);
-                    resourceList.add(applicationDescriptorResource);
+        EntityManager em = null;
+        try {
+            if (type == ResourceType.APPLICATION_DESCRIPTOR) {
+                em = ResourceUtils.getEntityManager();
+                em.getTransaction().begin();
+                QueryGenerator queryGenerator = new 
QueryGenerator(APPLICATION_DESCRIPTOR);
+                
queryGenerator.setParameter(ApplicationDescriptorConstants.GATEWAY_NAME, 
gatewayName);
+                
queryGenerator.setParameter(ApplicationDescriptorConstants.SERVICE_DESC_ID, 
serviceDescName);
+                Query q = queryGenerator.selectQuery(em);
+                List results = q.getResultList();
+                if (results.size() != 0) {
+                    for (Object result : results) {
+                        Application_Descriptor applicationDescriptor = 
(Application_Descriptor) result;
+                        ApplicationDescriptorResource 
applicationDescriptorResource = (ApplicationDescriptorResource) 
Utils.getResource(ResourceType.APPLICATION_DESCRIPTOR, applicationDescriptor);
+                        resourceList.add(applicationDescriptorResource);
+                    }
                 }
+                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 resourceList;
     }
 
-    public void save() {
-        EntityManager em = ResourceUtils.getEntityManager();
-        Service_Descriptor existingServiceDesc = 
em.find(Service_Descriptor.class, new Service_Descriptor_PK(gatewayName, 
serviceDescName));
-        em.close();
-
-        em = ResourceUtils.getEntityManager();
-        em.getTransaction().begin();
-
-        Service_Descriptor serviceDescriptor = new Service_Descriptor();
-        serviceDescriptor.setService_descriptor_ID(getServiceDescName());
-        Gateway gateway = em.find(Gateway.class, gatewayName);
-        serviceDescriptor.setGateway(gateway);
-        byte[] bytes = content.getBytes();
-        serviceDescriptor.setService_descriptor_xml(bytes);
-        Users user = em.find(Users.class, userName);
-        serviceDescriptor.setUser(user);
-        if(existingServiceDesc != null) {
-            existingServiceDesc.setUser(user);
-            existingServiceDesc.setService_descriptor_xml(bytes);
-            serviceDescriptor = em.merge(existingServiceDesc);
-        }else {
-            em.merge(serviceDescriptor);
+    public void save() throws RegistryException{
+        EntityManager em = null;
+        try {
+            em = ResourceUtils.getEntityManager();
+            Service_Descriptor existingServiceDesc = 
em.find(Service_Descriptor.class, new Service_Descriptor_PK(gatewayName, 
serviceDescName));
+            em.close();
+
+            em = ResourceUtils.getEntityManager();
+            em.getTransaction().begin();
+            Service_Descriptor serviceDescriptor = new Service_Descriptor();
+            serviceDescriptor.setService_descriptor_ID(getServiceDescName());
+            Gateway gateway = em.find(Gateway.class, gatewayName);
+            serviceDescriptor.setGateway(gateway);
+            byte[] bytes = content.getBytes();
+            serviceDescriptor.setService_descriptor_xml(bytes);
+            Users user = em.find(Users.class, userName);
+            serviceDescriptor.setUser(user);
+            if (existingServiceDesc != null) {
+                existingServiceDesc.setUser(user);
+                existingServiceDesc.setService_descriptor_xml(bytes);
+                serviceDescriptor = em.merge(existingServiceDesc);
+            } else {
+                em.merge(serviceDescriptor);
+            }
+            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 service descriptor 
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/StatusResource.java
----------------------------------------------------------------------
diff --git 
a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/StatusResource.java
 
b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/StatusResource.java
index 426b9c4..f821e4d 100644
--- 
a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/StatusResource.java
+++ 
b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/StatusResource.java
@@ -27,6 +27,7 @@ import 
org.apache.airavata.persistance.registry.jpa.ResourceUtils;
 import org.apache.airavata.persistance.registry.jpa.model.*;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.apache.airavata.registry.cpi.RegistryException;
 
 import javax.persistence.EntityManager;
 import java.sql.Timestamp;
@@ -116,67 +117,75 @@ public class StatusResource extends AbstractResource {
         this.statusType = statusType;
     }
 
-    @Override
-    public Resource create(ResourceType type) {
+    
+    public Resource create(ResourceType type) throws RegistryException{
         logger.error("Unsupported resource type for status resource.", new 
UnsupportedOperationException());
         throw new UnsupportedOperationException();
     }
 
-    @Override
-    public void remove(ResourceType type, Object name) {
+    
+    public void remove(ResourceType type, Object name) throws 
RegistryException{
         logger.error("Unsupported resource type for status resource.", new 
UnsupportedOperationException());
         throw new UnsupportedOperationException();
     }
 
-    @Override
-    public Resource get(ResourceType type, Object name) {
+    
+    public Resource get(ResourceType type, Object name) throws 
RegistryException{
         logger.error("Unsupported resource type for status resource.", new 
UnsupportedOperationException());
         throw new UnsupportedOperationException();
     }
 
-    @Override
-    public List<Resource> get(ResourceType type) {
+    
+    public List<Resource> get(ResourceType type) throws RegistryException{
         logger.error("Unsupported resource type for status resource.", new 
UnsupportedOperationException());
         throw new UnsupportedOperationException();
     }
 
-    @Override
-    public void save() {
-        EntityManager em = ResourceUtils.getEntityManager();
-        em.getTransaction().begin();
-        Status status;
-        if (statusId != 0){
-            status = em.find(Status.class, statusId);
-            status.setStatusId(statusId);
-        }else {
-            status = new Status();
+    
+    public void save() throws RegistryException{
+        EntityManager em = null;
+        try {
+            em = ResourceUtils.getEntityManager();
+            em.getTransaction().begin();
+            Status status;
+            if (statusId != 0) {
+                status = em.find(Status.class, statusId);
+                status.setStatusId(statusId);
+            } else {
+                status = new Status();
+            }
+            Experiment experiment = em.find(Experiment.class, 
experimentResource.getExpID());
+            if (taskDetailResource != null) {
+                TaskDetail taskDetail = em.find(TaskDetail.class, 
taskDetailResource.getTaskId());
+                status.setTask(taskDetail);
+                status.setTaskId(taskDetailResource.getTaskId());
+            }
+            if (workflowNodeDetail != null) {
+                WorkflowNodeDetail nodeDetail = 
em.find(WorkflowNodeDetail.class, workflowNodeDetail.getNodeInstanceId());
+                status.setNode(nodeDetail);
+                status.setNodeId(workflowNodeDetail.getNodeInstanceId());
+            }
+            if (dataTransferDetail != null) {
+                DataTransferDetail transferDetail = 
em.find(DataTransferDetail.class, dataTransferDetail.getTransferId());
+                status.setTransferDetail(transferDetail);
+                status.setTransferId(dataTransferDetail.getTransferId());
+            }
+            status.setExperiment(experiment);
+            status.setJobId(jobId);
+            status.setExpId(experimentResource.getExpID());
+            status.setState(state);
+            status.setStatusUpdateTime(statusUpdateTime);
+            status.setStatusType(statusType);
+            em.persist(status);
+            statusId = status.getStatusId();
+            em.getTransaction().commit();
+        } catch (Exception e) {
+            logger.error(e.getMessage(), e);
+            throw new RegistryException(e);
+        } finally {
+            if (em != null && em.isOpen()) {
+                em.close();
+            }
         }
-
-        Experiment experiment = em.find(Experiment.class, 
experimentResource.getExpID());
-        if (taskDetailResource != null){
-            TaskDetail taskDetail = em.find(TaskDetail.class, 
taskDetailResource.getTaskId());
-            status.setTask(taskDetail);
-            status.setTaskId(taskDetailResource.getTaskId());
-        }
-        if (workflowNodeDetail != null){
-            WorkflowNodeDetail nodeDetail = em.find(WorkflowNodeDetail.class, 
workflowNodeDetail.getNodeInstanceId());
-            status.setNode(nodeDetail);
-            status.setNodeId(workflowNodeDetail.getNodeInstanceId());
-        }
-        if (dataTransferDetail != null){
-            DataTransferDetail transferDetail = 
em.find(DataTransferDetail.class, dataTransferDetail.getTransferId());
-            status.setTransferDetail(transferDetail);
-            status.setTransferId(dataTransferDetail.getTransferId());
-        }
-        status.setExperiment(experiment);
-        status.setJobId(jobId);
-        status.setExpId(experimentResource.getExpID());
-        status.setState(state);
-        status.setStatusUpdateTime(statusUpdateTime);
-        status.setStatusType(statusType);
-        em.persist(status);
-        statusId = status.getStatusId();
-        em.getTransaction().commit();
-        em.close();
     }
 }

Reply via email to