You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by sc...@apache.org on 2017/05/30 19:08:34 UTC

[4/4] airavata git commit: adding missing files back again from an old commit

adding missing files back again from an old commit


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

Branch: refs/heads/registry-refactoring
Commit: 208e5d3873debed16f27a236f7739e3b811cb9ab
Parents: 94d8ac2
Author: scnakandala <su...@gmail.com>
Authored: Tue May 30 15:08:27 2017 -0400
Committer: scnakandala <su...@gmail.com>
Committed: Tue May 30 15:08:27 2017 -0400

----------------------------------------------------------------------
 modules/registry-refactoring/pom.xml            | 150 +++---
 .../registry/core/RegistryException.java        |  28 ++
 .../ComputeResourceSchedulingEntity.java        | 170 +++++++
 .../entities/expcatalog/ExperimentEntity.java   | 224 +++++++++
 .../expcatalog/ExperimentErrorEntity.java       | 118 +++++
 .../entities/expcatalog/ExperimentErrorPK.java  |  75 +++
 .../expcatalog/ExperimentInputEntity.java       | 174 +++++++
 .../entities/expcatalog/ExperimentInputPK.java  |  74 +++
 .../expcatalog/ExperimentOutputEntity.java      | 165 +++++++
 .../entities/expcatalog/ExperimentOutputPK.java |  74 +++
 .../expcatalog/ExperimentStatusEntity.java      |  83 ++++
 .../entities/expcatalog/ExperimentStatusPK.java |  74 +++
 .../core/entities/expcatalog/JobEntity.java     | 165 +++++++
 .../entities/expcatalog/JobStatusEntity.java    |  83 ++++
 .../core/entities/expcatalog/JobStatusPK.java   |  74 +++
 .../core/entities/expcatalog/ProcessEntity.java | 276 +++++++++++
 .../entities/expcatalog/ProcessErrorEntity.java | 118 +++++
 .../entities/expcatalog/ProcessErrorPK.java     |  75 +++
 .../entities/expcatalog/ProcessInputEntity.java | 174 +++++++
 .../entities/expcatalog/ProcessInputPK.java     |  74 +++
 .../expcatalog/ProcessOutputEntity.java         | 165 +++++++
 .../entities/expcatalog/ProcessOutputPK.java    |  70 +++
 .../ProcessResourceSchedulingEntity.java        | 170 +++++++
 .../expcatalog/ProcessStatusEntity.java         |  83 ++++
 .../entities/expcatalog/ProcessStatusPK.java    |  74 +++
 .../core/entities/expcatalog/TaskEntity.java    | 147 ++++++
 .../entities/expcatalog/TaskErrorEntity.java    | 118 +++++
 .../core/entities/expcatalog/TaskErrorPK.java   |  75 +++
 .../entities/expcatalog/TaskStatusEntity.java   |  83 ++++
 .../core/entities/expcatalog/TaskStatusPK.java  |  74 +++
 .../expcatalog/UserConfigurationEntity.java     | 131 +++++
 .../workspacecatalog/GatewayEntity.java         | 221 +++++++++
 .../workspacecatalog/NSFDemographicsEntity.java |  94 ++++
 .../workspacecatalog/NotificationEntity.java    | 110 +++++
 .../workspacecatalog/ProjectEntity.java         |  92 ++++
 .../workspacecatalog/UserProfileEntity.java     | 247 ++++++++++
 .../core/repositories/AbstractRepository.java   |  98 ++++
 .../expcatalog/ExperimentRepository.java        | 101 ++++
 .../ComponentStatusRepository.java              |  37 ++
 .../workflowcatalog/EdgeRepository.java         |  38 ++
 .../workflowcatalog/WorkflowRepository.java     |  37 ++
 .../workspacecatalog/GatewayRepository.java     |  36 ++
 .../NotificationRepository.java                 |  35 ++
 .../workspacecatalog/ProjectRepository.java     |  35 ++
 .../workspacecatalog/UserProfileRepository.java |  88 ++++
 .../airavata/registry/core/utils/Committer.java |  27 +
 .../airavata/registry/core/utils/JPAUtils.java  |  82 ++++
 .../core/utils/ObjectMapperSingleton.java       |  39 ++
 .../src/main/resources/META-INF/persistence.xml | 131 +++++
 .../src/main/resources/experiment_catalog.sql   | 285 +++++++++++
 .../src/main/resources/workspace_catalog.sql    | 125 +++++
 .../repositories/ExperimentRepositoryTest.java  | 247 +++++-----
 .../ReplicaCatalogRepositoryTest.java           | 200 ++++----
 .../repositories/WorkflowRepositoryTest.java    | 193 ++++----
 .../repositories/WorkspaceRepositoryTest.java   | 491 ++++++++++---------
 55 files changed, 6092 insertions(+), 635 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/airavata/blob/208e5d38/modules/registry-refactoring/pom.xml
----------------------------------------------------------------------
diff --git a/modules/registry-refactoring/pom.xml b/modules/registry-refactoring/pom.xml
index 7939a45..b794349 100644
--- a/modules/registry-refactoring/pom.xml
+++ b/modules/registry-refactoring/pom.xml
@@ -1,26 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied.  See the License for the
-    specific language governing permissions and limitations
-    under the License.
-
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
 
     <parent>
         <groupId>org.apache.airavata</groupId>
@@ -29,112 +11,104 @@
         <relativePath>../../pom.xml</relativePath>
     </parent>
 
-    <modelVersion>4.0.0</modelVersion>
+    <groupId>org.apache.airavata</groupId>
     <artifactId>registry-refactoring</artifactId>
-    <packaging>pom</packaging>
-    <name>Airavata Registry Refactoring</name>
-    <url>http://airavata.apache.org/</url>
+
+    <properties>
+        <derby.version>10.11.1.1</derby.version>
+        <surefire.version>2.18.1</surefire.version>
+        <skipTests>false</skipTests>
+        <mysql.connector.version>5.1.34</mysql.connector.version>
+    </properties>
 
     <dependencies>
         <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
-        </dependency>
-        <dependency>
             <groupId>org.apache.airavata</groupId>
-            <artifactId>airavata-commons</artifactId>
+            <artifactId>airavata-data-models</artifactId>
             <version>${project.version}</version>
         </dependency>
-        <!-- Test -->
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>jcl-over-slf4j</artifactId>
-            <scope>test</scope>
-        </dependency>
         <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-log4j12</artifactId>
-            <scope>test</scope>
+            <groupId>net.sf.dozer</groupId>
+            <artifactId>dozer</artifactId>
+            <version>5.4.0</version>
         </dependency>
         <dependency>
             <groupId>org.apache.openjpa</groupId>
             <artifactId>openjpa-all</artifactId>
-            <version>2.2.0</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.airavata</groupId>
-            <artifactId>airavata-data-models</artifactId>
-            <version>${project.version}</version>
+            <version>2.3.0</version>
         </dependency>
+
         <dependency>
-            <groupId>org.apache.airavata</groupId>
-            <artifactId>airavata-registry-cpi</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <!--dependency>
             <groupId>mysql</groupId>
             <artifactId>mysql-connector-java</artifactId>
             <version>${mysql.connector.version}</version>
-        </dependency-->
+        </dependency>
         <dependency>
             <groupId>org.apache.derby</groupId>
             <artifactId>derby</artifactId>
             <version>${derby.version}</version>
-            <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.derby</groupId>
             <artifactId>derbyclient</artifactId>
             <version>${derby.version}</version>
-            <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.derby</groupId>
             <artifactId>derbynet</artifactId>
             <version>${derby.version}</version>
-            <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.derby</groupId>
             <artifactId>derbytools</artifactId>
             <version>${derby.version}</version>
-            <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>org.apache.airavata</groupId>
-            <artifactId>airavata-server-configuration</artifactId>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>4.12</version>
             <scope>test</scope>
         </dependency>
     </dependencies>
 
     <build>
         <plugins>
-            <!--<plugin>-->
-            <!--<groupId>org.apache.maven.plugins</groupId>-->
-            <!--<artifactId>maven-antrun-plugin</artifactId>-->
-            <!--<version>${antrun.version}</version>-->
-            <!--<executions>-->
-            <!--<execution>-->
-            <!--<phase>process-classes</phase>-->
-            <!--<configuration>-->
-            <!--<tasks>-->
-            <!--<taskdef name="openjpac" classname="org.apache.openjpa.ant.PCEnhancerTask" classpathref="maven.compile.classpath" />-->
-            <!--<openjpac>-->
-            <!--<classpath refid="maven.compile.classpath" />-->
-            <!--</openjpac>-->
-            <!--</tasks>-->
-            <!--</configuration>-->
-            <!--<goals>-->
-            <!--<goal>run</goal>-->
-            <!--</goals>-->
-            <!--</execution>-->
-            <!--</executions>-->
-            <!--</plugin>-->
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.1</version>
+                <configuration>
+                    <source>1.8</source>
+                    <target>1.8</target>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.openjpa</groupId>
+                <artifactId>openjpa-maven-plugin</artifactId>
+                <version>2.2.0</version>
+                <configuration>
+                    <includes>**/entities/*.class</includes>
+                    <excludes>**/entities/XML*.class</excludes>
+                    <addDefaultConstructor>true</addDefaultConstructor>
+                    <enforcePropertyRestrictions>true</enforcePropertyRestrictions>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>enhancer</id>
+                        <phase>process-classes</phase>
+                        <goals>
+                            <goal>enhance</goal>
+                        </goals>
+                    </execution>
+                </executions>
+                <dependencies>
+                    <dependency>
+                        <groupId>org.apache.openjpa</groupId>
+                        <artifactId>openjpa</artifactId>
+                        <version>2.2.0</version>
+                    </dependency>
+                </dependencies>
+            </plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-surefire-plugin</artifactId>
@@ -142,12 +116,12 @@
                 <inherited>true</inherited>
                 <configuration>
                     <failIfNoTests>false</failIfNoTests>
-                    <skipTests>${skipTests}</skipTests>
+                    <!--<skipTests>${skipTests}</skipTests>-->
+                    <skipTests>true</skipTests>
                     <workingDirectory>${project.build.testOutputDirectory}</workingDirectory>
-                    <!-- making sure that the sure-fire plugin doesn't run the integration tests-->
-                    <!-- Integration tests are run using the fail-safe plugin in the module pom-->
                 </configuration>
             </plugin>
         </plugins>
     </build>
-</project>
+
+</project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/208e5d38/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/RegistryException.java
----------------------------------------------------------------------
diff --git a/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/RegistryException.java b/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/RegistryException.java
new file mode 100644
index 0000000..8893b34
--- /dev/null
+++ b/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/RegistryException.java
@@ -0,0 +1,28 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+package org.apache.airavata.registry.core;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class RegistryException extends Exception {
+    private final static Logger logger = LoggerFactory.getLogger(RegistryException.class);
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/208e5d38/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/ComputeResourceSchedulingEntity.java
----------------------------------------------------------------------
diff --git a/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/ComputeResourceSchedulingEntity.java b/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/ComputeResourceSchedulingEntity.java
new file mode 100644
index 0000000..bfbb3e2
--- /dev/null
+++ b/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/ComputeResourceSchedulingEntity.java
@@ -0,0 +1,170 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+package org.apache.airavata.registry.core.entities.expcatalog;
+
+import javax.persistence.*;
+
+@Entity
+@Table(name = "EXPCAT_COMPUTE_RESOURCE_SCHEDULING")
+public class ComputeResourceSchedulingEntity {
+    private String experimentId;
+    private String resourceHostId;
+    private int totalCPUCount;
+    private int nodeCount;
+    private int numberOfThreads;
+    private String queueName;
+    private int wallTimeLimit;
+    private int totalPhysicalMemory;
+    private String chessisNumber;
+    private String staticWorkingDir;
+    private String overrideLoginUserName;
+    private String overrideScratchLocation;
+    private String overrideAllocationProjectNumber;
+    private UserConfigurationEntity userConfiguration;
+
+    @Id
+    @Column(name = "EXPERIMENT_ID")
+    public String getExperimentId() {
+        return experimentId;
+    }
+
+    public void setExperimentId(String experimentId) {
+        this.experimentId = experimentId;
+    }
+
+    @Column(name = "RESOURCE_HOST_ID")
+    public String getResourceHostId() {
+        return resourceHostId;
+    }
+
+    public void setResourceHostId(String resourceHostId) {
+        this.resourceHostId = resourceHostId;
+    }
+
+    @Column(name = "CPU_COUNT")
+    public int getTotalCPUCount() {
+        return totalCPUCount;
+    }
+
+    public void setTotalCPUCount(int totalCPUCount) {
+        this.totalCPUCount = totalCPUCount;
+    }
+
+    @Column(name = "NODE_COUNT")
+    public int getNodeCount() {
+        return nodeCount;
+    }
+
+    public void setNodeCount(int nodeCount) {
+        this.nodeCount = nodeCount;
+    }
+
+    @Column(name = "NUMBER_OF_THREADS")
+    public int getNumberOfThreads() {
+        return numberOfThreads;
+    }
+
+    public void setNumberOfThreads(int numberOfThreads) {
+        this.numberOfThreads = numberOfThreads;
+    }
+
+    @Column(name = "QUEUE_NAME")
+    public String getQueueName() {
+        return queueName;
+    }
+
+    public void setQueueName(String queueName) {
+        this.queueName = queueName;
+    }
+
+    @Column(name = "WALL_TIME_LIMIT")
+    public int getWallTimeLimit() {
+        return wallTimeLimit;
+    }
+
+    public void setWallTimeLimit(int wallTimeLimit) {
+        this.wallTimeLimit = wallTimeLimit;
+    }
+
+    @Column(name = "TOTAL_PHYSICAL_MEMORY")
+    public int getTotalPhysicalMemory() {
+        return totalPhysicalMemory;
+    }
+
+    public void setTotalPhysicalMemory(int totalPhysicalMemory) {
+        this.totalPhysicalMemory = totalPhysicalMemory;
+    }
+
+    @Column(name = "CHESSIS_NUMBER")
+    public String getChessisNumber() {
+        return chessisNumber;
+    }
+
+    public void setChessisNumber(String chessisNumber) {
+        this.chessisNumber = chessisNumber;
+    }
+
+    @Column(name = "STATIC_WORKING_DIRECTORY")
+    public String getStaticWorkingDir() {
+        return staticWorkingDir;
+    }
+
+    public void setStaticWorkingDir(String staticWorkingDir) {
+        this.staticWorkingDir = staticWorkingDir;
+    }
+
+    @Column(name = "OVERRIDE_LOGIN_USERNAME")
+    public String getOverrideLoginUserName() {
+        return overrideLoginUserName;
+    }
+
+    public void setOverrideLoginUserName(String overrideLoginUserName) {
+        this.overrideLoginUserName = overrideLoginUserName;
+    }
+
+    @Column(name = "OVERRIDE_SCRATCH_LOCATION")
+    public String getOverrideScratchLocation() {
+        return overrideScratchLocation;
+    }
+
+    public void setOverrideScratchLocation(String overrideScratchLocation) {
+        this.overrideScratchLocation = overrideScratchLocation;
+    }
+
+    @Column(name = "OVERRIDE_ALLOCATION_PROJECT_NUMBER")
+    public String getOverrideAllocationProjectNumber() {
+        return overrideAllocationProjectNumber;
+    }
+
+    public void setOverrideAllocationProjectNumber(String overrideAllocationProjectNumber) {
+        this.overrideAllocationProjectNumber = overrideAllocationProjectNumber;
+    }
+
+    @OneToOne(targetEntity = UserConfigurationEntity.class, cascade = CascadeType.ALL)
+    @PrimaryKeyJoinColumn(name = "EXPERIMENT_ID", referencedColumnName = "EXPERIMENT_ID")
+    public UserConfigurationEntity getUserConfiguration() {
+        return userConfiguration;
+    }
+
+    public void setUserConfiguration(UserConfigurationEntity userConfiguration) {
+        this.userConfiguration = userConfiguration;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/208e5d38/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/ExperimentEntity.java
----------------------------------------------------------------------
diff --git a/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/ExperimentEntity.java b/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/ExperimentEntity.java
new file mode 100644
index 0000000..e7ea3f6
--- /dev/null
+++ b/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/ExperimentEntity.java
@@ -0,0 +1,224 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+package org.apache.airavata.registry.core.entities.expcatalog;
+
+import javax.persistence.*;
+import java.util.List;
+
+@Entity
+@Table(name = "EXPCAT_EXPERIMENT")
+public class ExperimentEntity {
+    public String experimentId;
+    public String projectId;
+    public String gatewayId;
+    public String experimentType;
+    public String userName;
+    public String experimentName;
+    public long creationTime;
+    public String description;
+    public String executionId;
+    public String gatewayExecutionId;
+    public String gatewayInstanceId;
+    public boolean enableEmailNotification;
+    public List<String> emailAddresses;
+
+    private List<ExperimentInputEntity> experimentInputs;
+    private List<ExperimentOutputEntity> experimentOutputs;
+    private List<ExperimentErrorEntity> experimentErrors;
+    private List<ExperimentStatusEntity> experimentStatuses;
+
+    private UserConfigurationEntity userConfigurationData;
+
+    private List<ProcessEntity> processes;
+
+    @Id
+    @Column(name = "EXPERIMENT_ID")
+    public String getExperimentId() {
+        return experimentId;
+    }
+
+    public void setExperimentId(String experimentId) {
+        this.experimentId = experimentId;
+    }
+
+    @Column(name = "PROJECT_ID")
+    public String getProjectId() {
+        return projectId;
+    }
+
+    public void setProjectId(String projectId) {
+        this.projectId = projectId;
+    }
+
+    @Column(name = "GATEWAY_ID")
+    public String getGatewayId() {
+        return gatewayId;
+    }
+
+    public void setGatewayId(String gatewayId) {
+        this.gatewayId = gatewayId;
+    }
+
+    @Column(name = "EXPERIMENT_TYPE")
+    public String getExperimentType() {
+        return experimentType;
+    }
+
+    public void setExperimentType(String experimentType) {
+        this.experimentType = experimentType;
+    }
+
+    @Column(name = "USER_NAME")
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    @Column(name = "EXPERIMENT_NAME")
+    public String getExperimentName() {
+        return experimentName;
+    }
+
+    public void setExperimentName(String experimentName) {
+        this.experimentName = experimentName;
+    }
+
+    @Column(name = "CREATION_TIME")
+    public long getCreationTime() {
+        return creationTime;
+    }
+
+    public void setCreationTime(long creationTime) {
+        this.creationTime = creationTime;
+    }
+
+    @Column(name = "DESCRIPTION")
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    @Column(name = "EXECUTION_ID")
+    public String getExecutionId() {
+        return executionId;
+    }
+
+    public void setExecutionId(String executionId) {
+        this.executionId = executionId;
+    }
+
+    @Column(name = "GATEWAY_EXECUTION_ID")
+    public String getGatewayExecutionId() {
+        return gatewayExecutionId;
+    }
+
+    public void setGatewayExecutionId(String gatewayExecutionId) {
+        this.gatewayExecutionId = gatewayExecutionId;
+    }
+
+    @Column(name = "GATEWAY_INSTANCE_ID")
+    public String getGatewayInstanceId() {
+        return gatewayInstanceId;
+    }
+
+    public void setGatewayInstanceId(String gatewayInstanceId) {
+        this.gatewayInstanceId = gatewayInstanceId;
+    }
+
+    @Column(name = "ENABLE_EMAIL_NOTIFICATION")
+    public boolean isEnableEmailNotification() {
+        return enableEmailNotification;
+    }
+
+    public void setEnableEmailNotification(boolean enableEmailNotification) {
+        this.enableEmailNotification = enableEmailNotification;
+    }
+
+    @ElementCollection
+    @CollectionTable(name="EXPCAT_EXPERIMENT_EMAIL", joinColumns = @JoinColumn(name="EXPERIMENT_ID"))
+    public List<String> getEmailAddresses() {
+        return emailAddresses;
+    }
+
+    public void setEmailAddresses(List<String> emailAddresses) {
+        this.emailAddresses = emailAddresses;
+    }
+
+    @OneToOne(targetEntity = UserConfigurationEntity.class, cascade = CascadeType.ALL, mappedBy = "experiment")
+    public UserConfigurationEntity getUserConfigurationData() {
+        return userConfigurationData;
+    }
+
+    public void setUserConfigurationData(UserConfigurationEntity userConfiguration) {
+        this.userConfigurationData = userConfiguration;
+    }
+
+    @OneToMany(targetEntity = ExperimentInputEntity.class, cascade = CascadeType.ALL, mappedBy = "experiment")
+    public List<ExperimentInputEntity> getExperimentInputs() {
+        return experimentInputs;
+    }
+
+    public void setExperimentInputs(List<ExperimentInputEntity> experimentInputs) {
+        this.experimentInputs = experimentInputs;
+    }
+
+    @OneToMany(targetEntity = ExperimentOutputEntity.class, cascade = CascadeType.ALL, mappedBy = "experiment")
+    public List<ExperimentOutputEntity> getExperimentOutputs() {
+        return experimentOutputs;
+    }
+
+    public void setExperimentOutputs(List<ExperimentOutputEntity> experimentOutputs) {
+        this.experimentOutputs = experimentOutputs;
+    }
+
+    @OneToMany(targetEntity = ExperimentErrorEntity.class, cascade = CascadeType.ALL, mappedBy = "experiment")
+    public List<ExperimentErrorEntity> getExperimentErrors() {
+        return experimentErrors;
+    }
+
+    public void setExperimentErrors(List<ExperimentErrorEntity> experimentErrors) {
+        this.experimentErrors = experimentErrors;
+    }
+
+    @OneToMany(targetEntity = ExperimentStatusEntity.class, cascade = CascadeType.ALL, mappedBy = "experiment")
+    public List<ExperimentStatusEntity> getExperimentStatuses() {
+        return experimentStatuses;
+    }
+
+    public void setExperimentStatuses(List<ExperimentStatusEntity> experimentStatuses) {
+        this.experimentStatuses = experimentStatuses;
+    }
+
+    @OneToMany(targetEntity = ProcessEntity.class, cascade = CascadeType.ALL, mappedBy = "experiment")
+    public List<ProcessEntity> getProcesses() {
+        return processes;
+    }
+
+    public void setProcesses(List<ProcessEntity> processes) {
+        this.processes = processes;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/208e5d38/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/ExperimentErrorEntity.java
----------------------------------------------------------------------
diff --git a/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/ExperimentErrorEntity.java b/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/ExperimentErrorEntity.java
new file mode 100644
index 0000000..37df525
--- /dev/null
+++ b/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/ExperimentErrorEntity.java
@@ -0,0 +1,118 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+package org.apache.airavata.registry.core.entities.expcatalog;
+
+import javax.persistence.*;
+import java.util.List;
+
+@Entity
+@Table(name = "EXPCAT_EXPERIMENT_ERROR")
+@IdClass(ExperimentErrorPK.class)
+public class ExperimentErrorEntity {
+    private String errorId;
+    private String experimentId;
+    private long creationTime;
+    private String actualErrorMessage;
+    private String userFriendlyMessage;
+    private boolean transientOrPersistent;
+    private List<String> rootCauseErrorIdList;
+
+    private ExperimentEntity experiment;
+
+    @Id
+    @Column(name = "ERROR_ID")
+    public String getErrorId() {
+        return errorId;
+    }
+
+    public void setErrorId(String errorId) {
+        this.errorId = errorId;
+    }
+
+    @Id
+    @Column(name = "EXPERIMENT_ID")
+    public String getExperimentId() {
+        return experimentId;
+    }
+
+    public void setExperimentId(String experimentId) {
+        this.experimentId = experimentId;
+    }
+
+    @Column(name = "CREATION_TIME")
+    public long getCreationTime() {
+        return creationTime;
+    }
+
+    public void setCreationTime(long creationTime) {
+        this.creationTime = creationTime;
+    }
+
+    @Column(name = "ACTUAL_ERROR_MESSAGE")
+    public String getActualErrorMessage() {
+        return actualErrorMessage;
+    }
+
+    public void setActualErrorMessage(String actualErrorMessage) {
+        this.actualErrorMessage = actualErrorMessage;
+    }
+
+    @Column(name = "USER_FRIENDLY_MESSAGE")
+    public String getUserFriendlyMessage() {
+        return userFriendlyMessage;
+    }
+
+    public void setUserFriendlyMessage(String userFriendlyMessage) {
+        this.userFriendlyMessage = userFriendlyMessage;
+    }
+
+
+    @Column(name = "TRANSIENT_OR_PERSISTENT")
+    public boolean isTransientOrPersistent() {
+        return transientOrPersistent;
+    }
+
+    public void setTransientOrPersistent(boolean transientOrPersistent) {
+        this.transientOrPersistent = transientOrPersistent;
+    }
+
+
+    @ElementCollection
+    @CollectionTable(name="EXPERIMENT_ERROR_ROOT_CAUSE_ERROR_ID", joinColumns = @JoinColumn(name="ERROR_ID"))
+    public List<String> getRootCauseErrorIdList() {
+        return rootCauseErrorIdList;
+    }
+
+    public void setRootCauseErrorIdList(List<String> rootCauseErrorIdList) {
+        this.rootCauseErrorIdList = rootCauseErrorIdList;
+    }
+
+
+    @ManyToOne(targetEntity = ExperimentEntity.class, cascade = CascadeType.ALL, fetch = FetchType.LAZY)
+    @JoinColumn(name = "EXPERIMENT_ID", referencedColumnName = "EXPERIMENT_ID")
+    public ExperimentEntity getExperiment() {
+        return experiment;
+    }
+
+    public void setExperiment(ExperimentEntity experiment) {
+        this.experiment = experiment;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/208e5d38/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/ExperimentErrorPK.java
----------------------------------------------------------------------
diff --git a/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/ExperimentErrorPK.java b/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/ExperimentErrorPK.java
new file mode 100644
index 0000000..add5616
--- /dev/null
+++ b/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/ExperimentErrorPK.java
@@ -0,0 +1,75 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+package org.apache.airavata.registry.core.entities.expcatalog;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.persistence.Column;
+import javax.persistence.Id;
+import java.io.Serializable;
+
+public class ExperimentErrorPK implements Serializable {
+    private final static Logger logger = LoggerFactory.getLogger(ExperimentErrorPK.class);
+    private String errorId;
+    private String experimentId;
+
+    @Column(name = "ERROR_ID")
+    @Id
+    public String getErrorId() {
+        return errorId;
+    }
+
+    public void setErrorId(String errorId) {
+        this.errorId = errorId;
+    }
+
+    @Column(name = "EXPERIMENT_ID")
+    @Id
+    public String getExperimentId() {
+        return experimentId;
+    }
+
+    public void setExperimentId(String experimentId) {
+        this.experimentId = experimentId;
+    }
+
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        ExperimentErrorPK that = (ExperimentErrorPK) o;
+
+        if (getErrorId() != null ? !getErrorId().equals(that.getErrorId()) : that.getErrorId() != null) return false;
+        if (getExperimentId() != null ? !getExperimentId().equals(that.getExperimentId()) : that.getExperimentId() != null) return false;
+
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int result = getErrorId() != null ? getErrorId().hashCode() : 0;
+        result = 31 * result + (getExperimentId() != null ? getExperimentId().hashCode() : 0);
+        return result;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/208e5d38/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/ExperimentInputEntity.java
----------------------------------------------------------------------
diff --git a/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/ExperimentInputEntity.java b/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/ExperimentInputEntity.java
new file mode 100644
index 0000000..4a9b2c0
--- /dev/null
+++ b/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/ExperimentInputEntity.java
@@ -0,0 +1,174 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+package org.apache.airavata.registry.core.entities.expcatalog;
+
+import javax.persistence.*;
+
+@Entity
+@Table(name = "EXPCAT_EXPERIMENT_INPUT")
+@IdClass(ExperimentInputPK.class)
+public class ExperimentInputEntity {
+    private String experimentId;
+    public String name;
+    public String value;
+    public String type;
+    public String applicationArgument;
+    public boolean standardInput;
+    public String userFriendlyDescription;
+    public String metaData;
+    public int inputOrder;
+    public boolean isRequired;
+    public boolean requiredToAddedToCommandLine;
+    public boolean dataStaged;
+    public String storageResourceId;
+
+    private ExperimentEntity experiment;
+
+    @Id
+    @Column(name = "EXPERIMENT_ID")
+    public String getExperimentId() {
+        return experimentId;
+    }
+
+    public void setExperimentId(String experimentId) {
+        this.experimentId = experimentId;
+    }
+
+    @Id
+    @Column(name = "INPUT_NAME")
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    @Column(name = "INPUT_VALUE")
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    @Column(name = "INPUT_TYPE")
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    @Column(name = "APPLICATION_ARGUMENT")
+    public String getApplicationArgument() {
+        return applicationArgument;
+    }
+
+    public void setApplicationArgument(String applicationArgument) {
+        this.applicationArgument = applicationArgument;
+    }
+
+    @Column(name = "STANDARD_INPUT")
+    public boolean isStandardInput() {
+        return standardInput;
+    }
+
+    public void setStandardInput(boolean standardInput) {
+        this.standardInput = standardInput;
+    }
+
+    @Column(name = "USER_FRIENDLY_DESCRIPTION")
+    public String getUserFriendlyDescription() {
+        return userFriendlyDescription;
+    }
+
+    public void setUserFriendlyDescription(String userFriendlyDescription) {
+        this.userFriendlyDescription = userFriendlyDescription;
+    }
+
+    @Lob
+    @Column(name = "METADATA")
+    public String getMetaData() {
+        return metaData;
+    }
+
+    public void setMetaData(String metaData) {
+        this.metaData = metaData;
+    }
+
+    @Column(name = "INPUT_ORDER")
+    public int getInputOrder() {
+        return inputOrder;
+    }
+
+    public void setInputOrder(int inputOrder) {
+        this.inputOrder = inputOrder;
+    }
+
+    @Column(name = "REQUIRED")
+    public boolean isRequired() {
+        return isRequired;
+    }
+
+    public void setRequired(boolean isRequired) {
+        this.isRequired = isRequired;
+    }
+
+    @Column(name = "REQUIRED_TO_ADDED_TO_COMMANDLINE")
+    public boolean isRequiredToAddedToCommandLine() {
+        return requiredToAddedToCommandLine;
+    }
+
+    public void setRequiredToAddedToCommandLine(boolean requiredToAddedToCommandLine) {
+        this.requiredToAddedToCommandLine = requiredToAddedToCommandLine;
+    }
+
+    @Column(name = "DATA_STAGED")
+    public boolean isDataStaged() {
+        return dataStaged;
+    }
+
+    public void setDataStaged(boolean dataStaged) {
+        this.dataStaged = dataStaged;
+    }
+
+    @Column(name = "STORAGE_RESOURCE_ID")
+    public String getStorageResourceId() {
+        return storageResourceId;
+    }
+
+    public void setStorageResourceId(String storageResourceId) {
+        this.storageResourceId = storageResourceId;
+    }
+
+    @ManyToOne(targetEntity = ExperimentEntity.class, cascade = CascadeType.ALL, fetch = FetchType.LAZY)
+    @JoinColumn(name = "EXPERIMENT_ID", referencedColumnName = "EXPERIMENT_ID")
+    public ExperimentEntity getExperiment() {
+        return experiment;
+    }
+
+    public void setExperiment(ExperimentEntity experiment) {
+        this.experiment = experiment;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/208e5d38/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/ExperimentInputPK.java
----------------------------------------------------------------------
diff --git a/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/ExperimentInputPK.java b/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/ExperimentInputPK.java
new file mode 100644
index 0000000..3479878
--- /dev/null
+++ b/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/ExperimentInputPK.java
@@ -0,0 +1,74 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+package org.apache.airavata.registry.core.entities.expcatalog;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.persistence.Column;
+import javax.persistence.Id;
+import java.io.Serializable;
+
+public class ExperimentInputPK implements Serializable {
+    private final static Logger logger = LoggerFactory.getLogger(ExperimentInputPK.class);
+    private String experimentId;
+    private String name;
+
+    @Id
+    @Column(name = "EXPERIMENT_ID")
+    public String getExperimentId() {
+        return experimentId;
+    }
+
+    public void setExperimentId(String experimentId) {
+        this.experimentId = experimentId;
+    }
+
+    @Id
+    @Column(name = "INPUT_NAME")
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        ExperimentInputPK that = (ExperimentInputPK) o;
+
+        if (getExperimentId() != null ? !getExperimentId().equals(that.getExperimentId()) : that.getExperimentId() != null) return false;
+        if (getName() != null ? !getName().equals(that.getName()) : that.getName() != null) return false;
+
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int result = getExperimentId() != null ? getExperimentId().hashCode() : 0;
+        result = 31 * result + (getName() != null ? getName().hashCode() : 0);
+        return result;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/208e5d38/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/ExperimentOutputEntity.java
----------------------------------------------------------------------
diff --git a/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/ExperimentOutputEntity.java b/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/ExperimentOutputEntity.java
new file mode 100644
index 0000000..871fcd7
--- /dev/null
+++ b/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/ExperimentOutputEntity.java
@@ -0,0 +1,165 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+package org.apache.airavata.registry.core.entities.expcatalog;
+
+import javax.persistence.*;
+
+@Entity
+@Table(name = "EXPCAT_EXPERIMENT_OUTPUT")
+@IdClass(ExperimentOutputPK.class)
+public class ExperimentOutputEntity {
+    private String experimentId;
+    public String name;
+    public String value;
+    public String type;
+    public String applicationArgument;
+    public boolean isRequired;
+    public boolean requiredToAddedToCommandLine;
+    public boolean dataMovement;
+    public String location;
+    public String searchQuery;
+    public boolean outputStreaming;
+    public String storageResourceId;
+
+    private ExperimentEntity experiment;
+
+
+    @Id
+    @Column(name = "EXPERIMENT_ID")
+    public String getExperimentId() {
+        return experimentId;
+    }
+
+    public void setExperimentId(String experimentId) {
+        this.experimentId = experimentId;
+    }
+
+    @Id
+    @Column(name = "OUTPUT_NAME")
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    @Column(name = "OUTPUT_VALUE")
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    @Column(name = "OUTPUT_TYPE")
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    @Column(name = "APPLICATION_ARGUMENT")
+    public String getApplicationArgument() {
+        return applicationArgument;
+    }
+
+    public void setApplicationArgument(String applicationArgument) {
+        this.applicationArgument = applicationArgument;
+    }
+
+    @Column(name = "REQUIRED")
+    public boolean isRequired() {
+        return isRequired;
+    }
+
+    public void setRequired(boolean isRequired) {
+        this.isRequired = isRequired;
+    }
+
+
+    @Column(name = "REQUIRED_TO_ADDED_TO_COMMANDLINE")
+    public boolean isRequiredToAddedToCommandLine() {
+        return requiredToAddedToCommandLine;
+    }
+
+    public void setRequiredToAddedToCommandLine(boolean requiredToAddedToCommandLine) {
+        this.requiredToAddedToCommandLine = requiredToAddedToCommandLine;
+    }
+
+    @Column(name = "DATA_MOVEMENT")
+    public boolean isDataMovement() {
+        return dataMovement;
+    }
+
+    public void setDataMovement(boolean dataMovement) {
+        this.dataMovement = dataMovement;
+    }
+
+    @Column(name = "LOCATION")
+    public String getLocation() {
+        return location;
+    }
+
+    public void setLocation(String location) {
+        this.location = location;
+    }
+
+    @Column(name = "SEARCH_QUERY")
+    public String getSearchQuery() {
+        return searchQuery;
+    }
+
+    public void setSearchQuery(String searchQuery) {
+        this.searchQuery = searchQuery;
+    }
+
+    @Column(name = "OUTPUT_STREAMING")
+    public boolean isOutputStreaming() {
+        return outputStreaming;
+    }
+
+    public void setOutputStreaming(boolean outputStreaming) {
+        this.outputStreaming = outputStreaming;
+    }
+
+    @Column(name = "STORAGE_RESOURCE_ID")
+    public String getStorageResourceId() {
+        return storageResourceId;
+    }
+
+    public void setStorageResourceId(String storageResourceId) {
+        this.storageResourceId = storageResourceId;
+    }
+
+    @ManyToOne(targetEntity = ExperimentEntity.class, cascade = CascadeType.ALL, fetch = FetchType.LAZY)
+    @JoinColumn(name = "EXPERIMENT_ID", referencedColumnName = "EXPERIMENT_ID")
+    public ExperimentEntity getExperiment() {
+        return experiment;
+    }
+
+    public void setExperiment(ExperimentEntity experiment) {
+        this.experiment = experiment;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/208e5d38/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/ExperimentOutputPK.java
----------------------------------------------------------------------
diff --git a/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/ExperimentOutputPK.java b/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/ExperimentOutputPK.java
new file mode 100644
index 0000000..da2864c
--- /dev/null
+++ b/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/ExperimentOutputPK.java
@@ -0,0 +1,74 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+package org.apache.airavata.registry.core.entities.expcatalog;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.persistence.Column;
+import javax.persistence.Id;
+import java.io.Serializable;
+
+public class ExperimentOutputPK implements Serializable {
+    private final static Logger logger = LoggerFactory.getLogger(ExperimentOutputPK.class);
+    private String experimentId;
+    private String name;
+
+    @Id
+    @Column(name = "EXPERIMENT_ID")
+    public String getExperimentId() {
+        return experimentId;
+    }
+
+    public void setExperimentId(String experimentId) {
+        this.experimentId = experimentId;
+    }
+
+    @Id
+    @Column(name = "OUTPUT_NAME")
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        ExperimentOutputPK that = (ExperimentOutputPK) o;
+
+        if (getExperimentId() != null ? !getExperimentId().equals(that.getExperimentId()) : that.getExperimentId() != null) return false;
+        if (getName() != null ? !getName().equals(that.getName()) : that.getName() != null) return false;
+
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int result = getExperimentId() != null ? getExperimentId().hashCode() : 0;
+        result = 31 * result + (getName() != null ? getName().hashCode() : 0);
+        return result;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/208e5d38/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/ExperimentStatusEntity.java
----------------------------------------------------------------------
diff --git a/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/ExperimentStatusEntity.java b/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/ExperimentStatusEntity.java
new file mode 100644
index 0000000..7a73e78
--- /dev/null
+++ b/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/ExperimentStatusEntity.java
@@ -0,0 +1,83 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+package org.apache.airavata.registry.core.entities.expcatalog;
+
+import javax.persistence.*;
+
+@Entity
+@Table(name = "EXPCAT_EXPERIMENT_STATUS")
+@IdClass(ExperimentStatusPK.class)
+public class ExperimentStatusEntity {
+    private String experimentId;
+    private String state;
+    private long timeOfStateChange;
+    private String reason;
+
+    private ExperimentEntity experiment;
+
+    @Id
+    @Column(name = "EXPERIMENT_ID")
+    public String getExperimentId() {
+        return experimentId;
+    }
+
+    public void setExperimentId(String experimentId) {
+        this.experimentId = experimentId;
+    }
+
+    @Id
+    @Column(name = "STATE")
+    public String getState() {
+        return state;
+    }
+
+    public void setState(String state) {
+        this.state = state;
+    }
+
+    @Column(name = "TIME_OF_STATE_CHANGE")
+    public long getTimeOfStateChange() {
+        return timeOfStateChange;
+    }
+
+    public void setTimeOfStateChange(long timeOfStateChange) {
+        this.timeOfStateChange = timeOfStateChange;
+    }
+
+    @Column(name = "REASON")
+    public String getReason() {
+        return reason;
+    }
+
+    public void setReason(String reason) {
+        this.reason = reason;
+    }
+
+    @ManyToOne(targetEntity = ExperimentEntity.class, cascade = CascadeType.ALL, fetch = FetchType.LAZY)
+    @JoinColumn(name = "EXPERIMENT_ID", referencedColumnName = "EXPERIMENT_ID")
+    public ExperimentEntity getExperiment() {
+        return experiment;
+    }
+
+    public void setExperiment(ExperimentEntity experiment) {
+        this.experiment = experiment;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/208e5d38/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/ExperimentStatusPK.java
----------------------------------------------------------------------
diff --git a/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/ExperimentStatusPK.java b/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/ExperimentStatusPK.java
new file mode 100644
index 0000000..4c52ec6
--- /dev/null
+++ b/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/ExperimentStatusPK.java
@@ -0,0 +1,74 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+package org.apache.airavata.registry.core.entities.expcatalog;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.persistence.Column;
+import javax.persistence.Id;
+import java.io.Serializable;
+
+public class ExperimentStatusPK implements Serializable {
+    private final static Logger logger = LoggerFactory.getLogger(ExperimentStatusPK.class);
+    private String state;
+    private String experimentId;
+
+    @Id
+    @Column(name = "STATUS_ID")
+    public String getState() {
+        return state;
+    }
+
+    public void setState(String state) {
+        this.state = state;
+    }
+
+    @Id
+    @Column(name = "EXPERIMENT_ID")
+    public String getExperimentId() {
+        return experimentId;
+    }
+
+    public void setExperimentId(String experimentId) {
+        this.experimentId = experimentId;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        ExperimentStatusPK that = (ExperimentStatusPK) o;
+
+        if (getState() != null ? !getState().equals(that.getState()) : that.getState() != null) return false;
+        if (getExperimentId() != null ? !getExperimentId().equals(that.getExperimentId()) : that.getExperimentId() != null) return false;
+
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int result = getState() != null ? getState().hashCode() : 0;
+        result = 31 * result + (getExperimentId() != null ? getExperimentId().hashCode() : 0);
+        return result;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/208e5d38/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/JobEntity.java
----------------------------------------------------------------------
diff --git a/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/JobEntity.java b/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/JobEntity.java
new file mode 100644
index 0000000..763f5da
--- /dev/null
+++ b/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/JobEntity.java
@@ -0,0 +1,165 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+package org.apache.airavata.registry.core.entities.expcatalog;
+
+import javax.persistence.*;
+import java.util.List;
+
+@Entity
+@Table(name = "EXPCAT_JOB")
+public class JobEntity {
+    private String jobId;
+    private String taskId;
+    private String processId;
+    private String jobDescription;
+    private long creationTime;
+    private String computeResourceConsumed;
+    private String jobName;
+    private String workingDir;
+    private String stdOut;
+    private String stdErr;
+    private int exitCode;
+
+    private List<JobStatusEntity> jobStatuses;
+
+    private TaskEntity task;
+
+    @Id
+    @Column(name = "JOB_ID")
+    public String getJobId() {
+        return jobId;
+    }
+
+    public void setJobId(String jobId) {
+        this.jobId = jobId;
+    }
+
+    @Column(name = "TASK_ID")
+    public String getTaskId() {
+        return taskId;
+    }
+
+    public void setTaskId(String taskId) {
+        this.taskId = taskId;
+    }
+
+    @Column(name = "PROCESS_ID")
+    public String getProcessId() {
+        return processId;
+    }
+
+    public void setProcessId(String processId) {
+        this.processId = processId;
+    }
+
+    @Column(name = "JOB_DESCRIPTION")
+    public String getJobDescription() {
+        return jobDescription;
+    }
+
+    public void setJobDescription(String jobDescription) {
+        this.jobDescription = jobDescription;
+    }
+
+    @Column(name = "CREATION_TIME")
+    public long getCreationTime() {
+        return creationTime;
+    }
+
+    public void setCreationTime(long creationTime) {
+        this.creationTime = creationTime;
+    }
+
+    @Column(name = "COMPUTE_RESOURCE_CONSUMED")
+    public String getComputeResourceConsumed() {
+        return computeResourceConsumed;
+    }
+
+    public void setComputeResourceConsumed(String computeResourceConsumed) {
+        this.computeResourceConsumed = computeResourceConsumed;
+    }
+
+    @Column(name = "JOB_NAME")
+    public String getJobName() {
+        return jobName;
+    }
+
+    public void setJobName(String jobName) {
+        this.jobName = jobName;
+    }
+
+    @Column(name = "WORKING_DIR")
+    public String getWorkingDir() {
+        return workingDir;
+    }
+
+    public void setWorkingDir(String workingDir) {
+        this.workingDir = workingDir;
+    }
+
+    @Lob
+    @Column(name = "STDOUT")
+    public String getStdOut() {
+        return stdOut;
+    }
+
+    public void setStdOut(String stdOut) {
+        this.stdOut = stdOut;
+    }
+
+    @Lob
+    @Column(name = "STDERR")
+    public String getStdErr() {
+        return stdErr;
+    }
+
+    public void setStdErr(String stdErr) {
+        this.stdErr = stdErr;
+    }
+
+    @Column(name = "EXIT_CODE")
+    public int getExitCode() {
+        return exitCode;
+    }
+
+    public void setExitCode(int exitCode) {
+        this.exitCode = exitCode;
+    }
+
+    @OneToMany(targetEntity = JobStatusEntity.class, cascade = CascadeType.ALL, mappedBy = "job")
+    public List<JobStatusEntity> getJobStatuses() {
+        return jobStatuses;
+    }
+
+    public void setJobStatuses(List<JobStatusEntity> jobStatus) {
+        this.jobStatuses = jobStatus;
+    }
+
+    @ManyToOne(targetEntity = TaskEntity.class, cascade = CascadeType.ALL, fetch = FetchType.LAZY)
+    @JoinColumn(name = "TASK_ID", referencedColumnName = "TASK_ID")
+    public TaskEntity getTask() {
+        return task;
+    }
+
+    public void setTask(TaskEntity task) {
+        this.task = task;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/208e5d38/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/JobStatusEntity.java
----------------------------------------------------------------------
diff --git a/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/JobStatusEntity.java b/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/JobStatusEntity.java
new file mode 100644
index 0000000..bcc902b
--- /dev/null
+++ b/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/JobStatusEntity.java
@@ -0,0 +1,83 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+package org.apache.airavata.registry.core.entities.expcatalog;
+
+import javax.persistence.*;
+
+@Entity
+@Table(name = "EXPCAT_JOB_STATUS")
+@IdClass(JobStatusPK.class)
+public class JobStatusEntity {
+    private String jobId;
+    private String state;
+    private long timeOfStateChange;
+    private String reason;
+
+    private JobEntity job;
+
+    @Id
+    @Column(name = "JOB_ID")
+    public String getJobId() {
+        return jobId;
+    }
+
+    public void setJobId(String jobId) {
+        this.jobId = jobId;
+    }
+
+    @Id
+    @Column(name = "STATE")
+    public String getState() {
+        return state;
+    }
+
+    public void setState(String state) {
+        this.state = state;
+    }
+
+    @Column(name = "TIME_OF_STATE_CHANGE")
+    public long getTimeOfStateChange() {
+        return timeOfStateChange;
+    }
+
+    public void setTimeOfStateChange(long timeOfStateChange) {
+        this.timeOfStateChange = timeOfStateChange;
+    }
+
+    @Column(name = "REASON")
+    public String getReason() {
+        return reason;
+    }
+
+    public void setReason(String reason) {
+        this.reason = reason;
+    }
+
+    @ManyToOne(targetEntity = JobEntity.class, cascade = CascadeType.ALL, fetch = FetchType.LAZY)
+    @JoinColumn(name = "JOB_ID", referencedColumnName = "JOB_ID")
+    public JobEntity getJob() {
+        return job;
+    }
+
+    public void setJob(JobEntity job) {
+        this.job = job;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/208e5d38/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/JobStatusPK.java
----------------------------------------------------------------------
diff --git a/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/JobStatusPK.java b/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/JobStatusPK.java
new file mode 100644
index 0000000..fa8964f
--- /dev/null
+++ b/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/JobStatusPK.java
@@ -0,0 +1,74 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+package org.apache.airavata.registry.core.entities.expcatalog;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.persistence.Column;
+import javax.persistence.Id;
+import java.io.Serializable;
+
+public class JobStatusPK implements Serializable {
+    private final static Logger logger = LoggerFactory.getLogger(JobStatusPK.class);
+    private String state;
+    private String jobId;
+
+    @Id
+    @Column(name = "STATUS_ID")
+    public String getState() {
+        return state;
+    }
+
+    public void setState(String state) {
+        this.state = state;
+    }
+
+    @Id
+    @Column(name = "JOB_ID")
+    public String getJobId() {
+        return jobId;
+    }
+
+    public void setJobId(String jobId) {
+        this.jobId = jobId;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        JobStatusPK that = (JobStatusPK) o;
+
+        if (getState() != null ? !getState().equals(that.getState()) : that.getState() != null) return false;
+        if (getJobId() != null ? !getJobId().equals(that.getJobId()) : that.getJobId() != null) return false;
+
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int result = getState() != null ? getState().hashCode() : 0;
+        result = 31 * result + (getJobId() != null ? getJobId().hashCode() : 0);
+        return result;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/208e5d38/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/ProcessEntity.java
----------------------------------------------------------------------
diff --git a/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/ProcessEntity.java b/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/ProcessEntity.java
new file mode 100644
index 0000000..a379ef6
--- /dev/null
+++ b/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/ProcessEntity.java
@@ -0,0 +1,276 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+package org.apache.airavata.registry.core.entities.expcatalog;
+
+
+import javax.persistence.*;
+import java.util.List;
+
+@Entity
+@Table(name = "EXPCAT_PROCESS")
+public class ProcessEntity {
+    private String processId;
+    private String experimentId;
+    private long creationTime;
+    private long lastUpdateTime;
+    private String processDetail;
+    private String applicationInterfaceId;
+    private String applicationDeploymentId;
+    private String computeResourceId;
+    private String taskDag;
+    private String gatewayExecutionId;
+    private boolean enableEmailNotification;
+    private List<String> emailAddresses;
+    private String storageResourceId;
+    private String userDn;
+    private boolean generateCert;
+    private String experimentDataDir;
+    private String userName;
+
+    private List<ProcessStatusEntity> processStatuses;
+    private List<ProcessErrorEntity> processErrors;
+    private List<ProcessInputEntity> processInputs;
+    private List<ProcessOutputEntity> processOutputs;
+    private ProcessResourceSchedulingEntity processResourceSchedule;
+    private List<TaskEntity> tasks;
+
+    private ExperimentEntity experiment;
+
+    @Id
+    @Column(name = "PROCESS_ID")
+    public String getProcessId() {
+        return processId;
+    }
+
+    public void setProcessId(String processId) {
+        this.processId = processId;
+    }
+
+    @Column(name = "EXPERIMENT_ID")
+    public String getExperimentId() {
+        return experimentId;
+    }
+
+    public void setExperimentId(String experimentId) {
+        this.experimentId = experimentId;
+    }
+
+    @Column(name = "CREATION_TIME")
+    public long getCreationTime() {
+        return creationTime;
+    }
+
+    public void setCreationTime(long creationTime) {
+        this.creationTime = creationTime;
+    }
+
+    @Column(name = "LAST_UPDATE_TIME")
+    public long getLastUpdateTime() {
+        return lastUpdateTime;
+    }
+
+    public void setLastUpdateTime(long lastUpdateTime) {
+        this.lastUpdateTime = lastUpdateTime;
+    }
+
+    @Column(name = "PROCESS_DETAIL")
+    public String getProcessDetail() {
+        return processDetail;
+    }
+
+    public void setProcessDetail(String processDetail) {
+        this.processDetail = processDetail;
+    }
+
+    @Column(name = "APPLICATION_INTERFACE_ID")
+    public String getApplicationInterfaceId() {
+        return applicationInterfaceId;
+    }
+
+    public void setApplicationInterfaceId(String applicationInterfaceId) {
+        this.applicationInterfaceId = applicationInterfaceId;
+    }
+
+    @Column(name = "APPLICATION_DEPLOYMENT_ID")
+    public String getApplicationDeploymentId() {
+        return applicationDeploymentId;
+    }
+
+    public void setApplicationDeploymentId(String applicationDeploymentId) {
+        this.applicationDeploymentId = applicationDeploymentId;
+    }
+
+
+    @Column(name = "COMPUTE_RESOURCE_ID")
+    public String getComputeResourceId() {
+        return computeResourceId;
+    }
+
+    public void setComputeResourceId(String computeResourceId) {
+        this.computeResourceId = computeResourceId;
+    }
+
+    @Column(name = "TASK_DAG")
+    public String getTaskDag() {
+        return taskDag;
+    }
+
+    public void setTaskDag(String taskDag) {
+        this.taskDag = taskDag;
+    }
+
+    @Column(name = "GATEWAY_EXECUTION_ID")
+    public String getGatewayExecutionId() {
+        return gatewayExecutionId;
+    }
+
+    public void setGatewayExecutionId(String gatewayExecutionId) {
+        this.gatewayExecutionId = gatewayExecutionId;
+    }
+
+    @Column(name = "ENABLE_EMAIL_NOTIFICATION")
+    public boolean isEnableEmailNotification() {
+        return enableEmailNotification;
+    }
+
+    public void setEnableEmailNotification(boolean enableEmailNotification) {
+        this.enableEmailNotification = enableEmailNotification;
+    }
+
+    @ElementCollection
+    @CollectionTable(name="PROCESS_EMAIL", joinColumns = @JoinColumn(name="PROCESS_ID"))
+    public List<String> getEmailAddresses() {
+        return emailAddresses;
+    }
+
+    public void setEmailAddresses(List<String> emailAddresses) {
+        this.emailAddresses = emailAddresses;
+    }
+
+    @Column(name = "STORAGE_RESOURCE_ID")
+    public String getStorageResourceId() {
+        return storageResourceId;
+    }
+
+    public void setStorageResourceId(String storageResourceId) {
+        this.storageResourceId = storageResourceId;
+    }
+
+    @Column(name = "USER_DN")
+    public String getUserDn() {
+        return userDn;
+    }
+
+    public void setUserDn(String userDn) {
+        this.userDn = userDn;
+    }
+
+    @Column(name = "GENERATE_CERT")
+    public boolean isGenerateCert() {
+        return generateCert;
+    }
+
+    public void setGenerateCert(boolean generateCert) {
+        this.generateCert = generateCert;
+    }
+
+    @Column(name = "EXPERIMENT_DATA_DIR")
+    public String getExperimentDataDir() {
+        return experimentDataDir;
+    }
+
+    public void setExperimentDataDir(String experimentDataDir) {
+        this.experimentDataDir = experimentDataDir;
+    }
+
+    @Column(name = "USER_NAME")
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    @OneToMany(targetEntity = ProcessStatusEntity.class, cascade = CascadeType.ALL, mappedBy = "process")
+    public List<ProcessStatusEntity> getProcessStatuses() {
+        return processStatuses;
+    }
+
+    public void setProcessStatuses(List<ProcessStatusEntity> processStatus) {
+        this.processStatuses = processStatus;
+    }
+
+    @OneToMany(targetEntity = ProcessErrorEntity.class, cascade = CascadeType.ALL, mappedBy = "process")
+    public List<ProcessErrorEntity> getProcessErrors() {
+        return processErrors;
+    }
+
+    public void setProcessErrors(List<ProcessErrorEntity> processError) {
+        this.processErrors = processError;
+    }
+
+    @OneToMany(targetEntity = ProcessInputEntity.class, cascade = CascadeType.ALL, mappedBy = "process")
+    public List<ProcessInputEntity> getProcessInputs() {
+        return processInputs;
+    }
+
+    public void setProcessInputs(List<ProcessInputEntity> processInputs) {
+        this.processInputs = processInputs;
+    }
+
+    @OneToMany(targetEntity = ProcessOutputEntity.class, cascade = CascadeType.ALL, mappedBy = "process")
+    public List<ProcessOutputEntity> getProcessOutputs() {
+        return processOutputs;
+    }
+
+    public void setProcessOutputs(List<ProcessOutputEntity> processOutputs) {
+        this.processOutputs = processOutputs;
+    }
+
+    @OneToOne(targetEntity = ProcessResourceSchedulingEntity.class, cascade = CascadeType.ALL, mappedBy = "process")
+    public ProcessResourceSchedulingEntity getProcessResourceSchedule() {
+        return processResourceSchedule;
+    }
+
+    public void setProcessResourceSchedule(ProcessResourceSchedulingEntity proceeResourceSchedule) {
+        this.processResourceSchedule = proceeResourceSchedule;
+    }
+
+    @OneToMany(targetEntity = TaskEntity.class, cascade = CascadeType.ALL, mappedBy = "process")
+    public List<TaskEntity> getTasks() {
+        return tasks;
+    }
+
+    public void setTasks(List<TaskEntity> tasks) {
+        this.tasks = tasks;
+    }
+
+    @ManyToOne(targetEntity = ExperimentEntity.class, cascade = CascadeType.ALL, fetch = FetchType.LAZY)
+    @JoinColumn(name = "EXPERIMENT_ID", referencedColumnName = "EXPERIMENT_ID")
+    public ExperimentEntity getExperiment() {
+        return experiment;
+    }
+
+    public void setExperiment(ExperimentEntity experiment) {
+        this.experiment = experiment;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/208e5d38/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/ProcessErrorEntity.java
----------------------------------------------------------------------
diff --git a/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/ProcessErrorEntity.java b/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/ProcessErrorEntity.java
new file mode 100644
index 0000000..60ad9b2
--- /dev/null
+++ b/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/ProcessErrorEntity.java
@@ -0,0 +1,118 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+package org.apache.airavata.registry.core.entities.expcatalog;
+
+import javax.persistence.*;
+import java.util.List;
+
+@Entity
+@Table(name = "EXPCAT_PROCESS_ERROR")
+@IdClass(ProcessErrorPK.class)
+public class ProcessErrorEntity {
+    private String errorId;
+    private String processId;
+    private long creationTime;
+    private String actualErrorMessage;
+    private String userFriendlyMessage;
+    private boolean transientOrPersistent;
+    private List<String> rootCauseErrorIdList;
+
+    private ProcessEntity process;
+
+    @Id
+    @Column(name = "ERROR_ID")
+    public String getErrorId() {
+        return errorId;
+    }
+
+    public void setErrorId(String errorId) {
+        this.errorId = errorId;
+    }
+
+    @Id
+    @Column(name = "PROCESS_ID")
+    public String getProcessId() {
+        return processId;
+    }
+
+    public void setProcessId(String processId) {
+        this.processId = processId;
+    }
+
+    @Column(name = "CREATION_TIME")
+    public long getCreationTime() {
+        return creationTime;
+    }
+
+    public void setCreationTime(long creationTime) {
+        this.creationTime = creationTime;
+    }
+
+    @Column(name = "ACTUAL_ERROR_MESSAGE")
+    public String getActualErrorMessage() {
+        return actualErrorMessage;
+    }
+
+    public void setActualErrorMessage(String actualErrorMessage) {
+        this.actualErrorMessage = actualErrorMessage;
+    }
+
+    @Column(name = "USER_FRIENDLY_MESSAGE")
+    public String getUserFriendlyMessage() {
+        return userFriendlyMessage;
+    }
+
+    public void setUserFriendlyMessage(String userFriendlyMessage) {
+        this.userFriendlyMessage = userFriendlyMessage;
+    }
+
+
+    @Column(name = "TRANSIENT_OR_PERSISTENT")
+    public boolean isTransientOrPersistent() {
+        return transientOrPersistent;
+    }
+
+    public void setTransientOrPersistent(boolean transientOrPersistent) {
+        this.transientOrPersistent = transientOrPersistent;
+    }
+
+
+    @ElementCollection
+    @CollectionTable(name="EXPCAT_EXPERIMENT_ERROR_ROOT_CAUSE_ERROR_ID", joinColumns = @JoinColumn(name="ERROR_ID"))
+    public List<String> getRootCauseErrorIdList() {
+        return rootCauseErrorIdList;
+    }
+
+    public void setRootCauseErrorIdList(List<String> rootCauseErrorIdList) {
+        this.rootCauseErrorIdList = rootCauseErrorIdList;
+    }
+
+
+    @ManyToOne(targetEntity = ProcessEntity.class, cascade = CascadeType.ALL, fetch = FetchType.LAZY)
+    @JoinColumn(name = "PROCESS_ID", referencedColumnName = "PROCESS_ID")
+    public ProcessEntity getProcess() {
+        return process;
+    }
+
+    public void setProcess(ProcessEntity process) {
+        this.process = process;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/208e5d38/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/ProcessErrorPK.java
----------------------------------------------------------------------
diff --git a/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/ProcessErrorPK.java b/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/ProcessErrorPK.java
new file mode 100644
index 0000000..e7cc6ee
--- /dev/null
+++ b/modules/registry-refactoring/src/main/java/org/apache/airavata/registry/core/entities/expcatalog/ProcessErrorPK.java
@@ -0,0 +1,75 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+package org.apache.airavata.registry.core.entities.expcatalog;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.persistence.Column;
+import javax.persistence.Id;
+import java.io.Serializable;
+
+public class ProcessErrorPK implements Serializable {
+    private final static Logger logger = LoggerFactory.getLogger(ProcessErrorPK.class);
+    private String errorId;
+    private String processId;
+
+    @Column(name = "ERROR_ID")
+    @Id
+    public String getErrorId() {
+        return errorId;
+    }
+
+    public void setErrorId(String errorId) {
+        this.errorId = errorId;
+    }
+
+    @Column(name = "PROCESS_ID")
+    @Id
+    public String getProcessId() {
+        return processId;
+    }
+
+    public void setProcessId(String processId) {
+        this.processId = processId;
+    }
+
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        ProcessErrorPK that = (ProcessErrorPK) o;
+
+        if (getErrorId() != null ? !getErrorId().equals(that.getErrorId()) : that.getErrorId() != null) return false;
+        if (getProcessId() != null ? !getProcessId().equals(that.getProcessId()) : that.getProcessId() != null) return false;
+
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int result = getErrorId() != null ? getErrorId().hashCode() : 0;
+        result = 31 * result + (getProcessId() != null ? getProcessId().hashCode() : 0);
+        return result;
+    }
+}
\ No newline at end of file