You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by di...@apache.org on 2021/06/01 03:03:15 UTC

[airavata-data-lake] 08/42: gRCP saving path

This is an automated email from the ASF dual-hosted git repository.

dimuthuupe pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/airavata-data-lake.git

commit 0bac93c24100bee2b24c2ba4d4a75c28b32e23ed
Author: Isuru Ranawaka <ir...@gmail.com>
AuthorDate: Wed Mar 17 14:47:29 2021 -0400

    gRCP saving path
---
 airavata-data-lake.ipr                             |   4 +-
 metadata-service/db-service/client/client.iml      | 109 +++
 .../client/db-service-client.iml}                  |   4 +-
 metadata-service/db-service/client/pom.xml         |  28 +
 .../metadata/clients/MetadataServiceClient.java    |  35 +
 .../clients/MetadataServiceClientBuilder.java      |  12 +
 .../airavata/datalake/metadata/clients/Test.java   |  78 ++
 metadata-service/db-service/db-service.iml         |  10 +-
 metadata-service/db-service/pom.xml                |  37 +-
 .../db-service-server.iml}                         |  66 +-
 metadata-service/db-service/server/pom.xml         |  69 ++
 metadata-service/db-service/server/server.iml      | 109 +++
 .../airavata/datalake/metadata/AppConfig.java      | 149 ++++
 .../metadata}/Neo4JServiceInitializer.java         |   2 +-
 .../datalake/metadata}/XmlConfiguration.java       |   2 +-
 .../datalake/metadata/backend/Connector.java       |  10 +
 .../datalake/metadata}/backend/Person.java         |   6 +-
 .../metadata}/backend/neo4j/Neo4JConnector.java    |   8 +-
 .../neo4j/curd/operators/GenericService.java       |  90 +++
 .../backend/neo4j/curd/operators/GroupService.java |   4 +
 .../neo4j/curd/operators/GroupServiceImpl.java     |  16 +
 .../neo4j/curd/operators/ResourceService.java      |   4 +
 .../neo4j/curd/operators/ResourceServiceImpl.java  |  16 +
 .../neo4j/curd/operators/SearchOperator.java       |   2 +-
 .../backend/neo4j/curd/operators/Service.java      |   7 +-
 .../neo4j/curd/operators/TenantService.java        |   4 +
 .../neo4j/curd/operators/TenantServiceImpl.java    |  15 +
 .../backend/neo4j/curd/operators/UserService.java  |   4 +
 .../neo4j/curd/operators/UserServiceImpl.java      |  16 +
 .../backend/neo4j/model/nodes/Entity.java          |   4 +-
 .../metadata}/backend/neo4j/model/nodes/Group.java |  16 +-
 .../backend/neo4j/model/nodes/Resource.java        |  14 +-
 .../metadata}/backend/neo4j/model/nodes/Role.java  |   4 +-
 .../backend/neo4j/model/nodes/ServiceAccount.java  |   4 +-
 .../backend/neo4j/model/nodes/Tenant.java          |   8 +-
 .../metadata}/backend/neo4j/model/nodes/User.java  |  22 +-
 .../backend/neo4j/model/relationships/Belongs.java |   2 +-
 .../neo4j/model/relationships/ConfiguredWith.java  |   2 +-
 .../backend/neo4j/model/relationships/Has.java     |   2 +-
 .../neo4j/model/relationships/HasAccess.java       |   2 +-
 .../neo4j/model/relationships/HasChildGroup.java   |   2 +-
 .../model/relationships/HasChildResource.java      |   2 +-
 .../neo4j/model/relationships/HasChildUser.java    |   2 +-
 .../neo4j/model/relationships/HasParentGroup.java  |   2 +-
 .../model/relationships/HasParentResource.java     |   2 +-
 .../backend/neo4j/model/relationships/HasRole.java |   2 +-
 .../neo4j/model/relationships/MemberOf.java        |   2 +-
 .../neo4j/model/relationships/Relationship.java    |   4 +-
 .../neo4j/model/relationships/SharedWith.java      |   2 +-
 .../metadata}/exceptions/DBConnectorException.java |   2 +-
 .../metadata/handlers/GroupServiceHandler.java     |  38 +
 .../metadata/handlers/ResourceServiceHandler.java  |  38 +
 .../metadata/handlers/TenantServiceHandler.java    |  83 +++
 .../metadata/handlers/UserServiceHandler.java      |  29 +
 .../datalake/metadata/parsers/GroupParser.java     |  68 ++
 .../datalake/metadata/parsers/ResourceParser.java  |  77 ++
 .../datalake/metadata/parsers/TenantParser.java    |  79 +++
 .../datalake/metadata/parsers/UserParser.java      |  22 +
 .../src/main/resources/application.properties      |   6 +-
 .../src/main/resources/applicationContext.xml      |   2 +-
 .../datalake/metadata/db/service/AppConfig.java    | 108 ---
 .../metadata/db/service/backend/Connector.java     |  10 -
 .../neo4j/curd/operators/GenericService.java       |  79 ---
 .../backend/neo4j/curd/operators/GroupService.java |   4 -
 .../neo4j/curd/operators/ResourceService.java      |   4 -
 .../backend/neo4j/curd/operators/UserService.java  |   4 -
 .../db-service/stub/db-service-stub.iml            |  84 +++
 metadata-service/db-service/stub/pom.xml           |  57 ++
 .../stub/src/main/proto/common/Common.proto        |  12 +
 .../stub/src/main/proto/group/Group.proto          |  88 +++
 .../stub/src/main/proto/resource/Resource.proto    |  97 +++
 .../stub/src/main/proto/tenant/Tenant.proto        |  67 ++
 .../db-service/stub/src/main/proto/user/User.proto |  66 ++
 metadata-service/db-service/stub/stub.iml          | 111 +++
 metadata-service/metadata-service.iml              | 790 +++++++++++++++++++++
 metadata-service/pom.xml                           | 157 ++--
 pom.xml                                            |   3 +
 77 files changed, 2767 insertions(+), 434 deletions(-)

diff --git a/airavata-data-lake.ipr b/airavata-data-lake.ipr
index 3bec1ac..d5244b1 100644
--- a/airavata-data-lake.ipr
+++ b/airavata-data-lake.ipr
@@ -102,8 +102,10 @@ under the License.
       <module filepath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-api/data-orchestrator-api.iml"/>
       <module filepath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-core/data-orchestrator-core.iml"/>
       <module filepath="$PROJECT_DIR$/data-orchestrator/data-orchestrator.iml"/>
-      <module filepath="$PROJECT_DIR$/metadata-service/neo4j-service/neo4j-service.iml"/>
       <module filepath="$PROJECT_DIR$/metadata-service/metadata-service.iml"/>
+      <module filepath="$PROJECT_DIR$/metadata-service/db-service/server/server.iml"/>
+      <module filepath="$PROJECT_DIR$/metadata-service/db-service/stub/stub.iml"/>
+      <module filepath="$PROJECT_DIR$/metadata-service/db-service/client/client.iml"/>
     </modules> 
   </component>  
   <UsedPathMacros> 
diff --git a/metadata-service/db-service/client/client.iml b/metadata-service/db-service/client/client.iml
new file mode 100644
index 0000000..64181aa
--- /dev/null
+++ b/metadata-service/db-service/client/client.iml
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
+  <component name="FacetManager">
+    <facet type="web" name="Web">
+      <configuration>
+        <webroots />
+        <sourceRoots>
+          <root url="file://$MODULE_DIR$/src/main/java" />
+          <root url="file://$MODULE_DIR$/src/main/resources" />
+        </sourceRoots>
+      </configuration>
+    </facet>
+    <facet type="Spring" name="Spring">
+      <configuration />
+    </facet>
+  </component>
+  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_11">
+    <output url="file://$MODULE_DIR$/target/classes" />
+    <output-test url="file://$MODULE_DIR$/target/test-classes" />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
+      <excludeFolder url="file://$MODULE_DIR$/target" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="module" module-name="stub" />
+    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-core:3.2.20" level="project" />
+    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-api:3.2.20" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.9" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.0" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.9.9" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.9" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.9" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.8" level="project" />
+    <orderEntry type="library" name="Maven: io.github.classgraph:classgraph:4.8.86" level="project" />
+    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-bolt-driver:3.2.20" level="project" />
+    <orderEntry type="library" name="Maven: org.neo4j.driver:neo4j-java-driver:4.0.2" level="project" />
+    <orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.3" level="project" />
+    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java:3.10.0" level="project" />
+    <orderEntry type="library" name="Maven: io.github.lognet:grpc-spring-boot-starter:3.5.1" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-netty:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-core:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-api:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-context:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: com.google.errorprone:error_prone_annotations:2.3.3" level="project" />
+    <orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:3.0.2" level="project" />
+    <orderEntry type="library" name="Maven: org.codehaus.mojo:animal-sniffer-annotations:1.17" level="project" />
+    <orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.5" level="project" />
+    <orderEntry type="library" name="Maven: com.google.android:annotations:4.1.1.4" level="project" />
+    <orderEntry type="library" name="Maven: io.perfmark:perfmark-api:0.19.0" level="project" />
+    <orderEntry type="library" name="Maven: io.opencensus:opencensus-api:0.21.0" level="project" />
+    <orderEntry type="library" name="Maven: io.opencensus:opencensus-contrib-grpc-metrics:0.21.0" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec-http2:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec-http:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-handler-proxy:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec-socks:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-services:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: com.google.guava:guava:28.1-android" level="project" />
+    <orderEntry type="library" name="Maven: com.google.guava:failureaccess:1.0.1" level="project" />
+    <orderEntry type="library" name="Maven: com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava" level="project" />
+    <orderEntry type="library" name="Maven: org.checkerframework:checker-compat-qual:2.5.5" level="project" />
+    <orderEntry type="library" name="Maven: com.google.j2objc:j2objc-annotations:1.3" level="project" />
+    <orderEntry type="library" name="Maven: com.google.api.grpc:proto-google-common-protos:1.12.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf-lite:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-stub:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java-util:3.10.0" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-tcnative-boringssl-static:2.0.25.Final" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" />
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.13.3" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.13.3" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.30" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.27" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.11.4" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.41" level="project" />
+    <orderEntry type="library" name="Maven: org.glassfish:jakarta.el:3.0.3" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.41" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-web:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-context:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: net.sf.dozer:dozer:5.5.1" level="project" />
+    <orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.9.1" level="project" />
+    <orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.1" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.5" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:jcl-over-slf4j:1.7.5" level="project" />
+  </component>
+</module>
\ No newline at end of file
diff --git a/metadata-service/metadata-service.iml b/metadata-service/db-service/client/db-service-client.iml
similarity index 71%
copy from metadata-service/metadata-service.iml
copy to metadata-service/db-service/client/db-service-client.iml
index 5fa3710..3d5413d 100644
--- a/metadata-service/metadata-service.iml
+++ b/metadata-service/db-service/client/db-service-client.iml
@@ -4,7 +4,9 @@
     <output url="file://$MODULE_DIR$/target/classes" />
     <output-test url="file://$MODULE_DIR$/target/test-classes" />
     <content url="file://$MODULE_DIR$">
-      <sourceFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
       <sourceFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" isTestSource="false" />
       <excludeFolder url="file://$MODULE_DIR$/target" />
     </content>
diff --git a/metadata-service/db-service/client/pom.xml b/metadata-service/db-service/client/pom.xml
new file mode 100644
index 0000000..f2d89d3
--- /dev/null
+++ b/metadata-service/db-service/client/pom.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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">
+    <parent>
+        <artifactId>metadata-service</artifactId>
+        <groupId>org.apache.airavata.data.lake</groupId>
+        <version>0.01-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>client</artifactId>
+
+    <properties>
+        <maven.compiler.source>11</maven.compiler.source>
+        <maven.compiler.target>11</maven.compiler.target>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.airavata.data.lake</groupId>
+            <artifactId>stub</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
+
+</project>
\ No newline at end of file
diff --git a/metadata-service/db-service/client/src/main/java/org/apache/airavata/datalake/metadata/clients/MetadataServiceClient.java b/metadata-service/db-service/client/src/main/java/org/apache/airavata/datalake/metadata/clients/MetadataServiceClient.java
new file mode 100644
index 0000000..423befb
--- /dev/null
+++ b/metadata-service/db-service/client/src/main/java/org/apache/airavata/datalake/metadata/clients/MetadataServiceClient.java
@@ -0,0 +1,35 @@
+package org.apache.airavata.datalake.metadata.clients;
+
+import io.grpc.ManagedChannel;
+import org.apache.airavata.datalake.metadata.service.GroupMetadataServiceGrpc;
+import org.apache.airavata.datalake.metadata.service.ResourceMetadataServiceGrpc;
+import org.apache.airavata.datalake.metadata.service.TenantMetadataServiceGrpc;
+import org.apache.airavata.datalake.metadata.service.UserMetadataServiceGrpc;
+
+public class MetadataServiceClient {
+
+    private ManagedChannel channel;
+
+    MetadataServiceClient(ManagedChannel channel) {
+        this.channel = channel;
+    }
+
+
+    public TenantMetadataServiceGrpc.TenantMetadataServiceBlockingStub tenant() {
+        return TenantMetadataServiceGrpc.newBlockingStub(channel);
+    }
+
+    public GroupMetadataServiceGrpc.GroupMetadataServiceBlockingStub group() {
+        return GroupMetadataServiceGrpc.newBlockingStub(channel);
+    }
+
+    public UserMetadataServiceGrpc.UserMetadataServiceBlockingStub user() {
+        return UserMetadataServiceGrpc.newBlockingStub(channel);
+    }
+
+    public ResourceMetadataServiceGrpc.ResourceMetadataServiceBlockingStub resource() {
+        return ResourceMetadataServiceGrpc.newBlockingStub(channel);
+    }
+
+
+}
diff --git a/metadata-service/db-service/client/src/main/java/org/apache/airavata/datalake/metadata/clients/MetadataServiceClientBuilder.java b/metadata-service/db-service/client/src/main/java/org/apache/airavata/datalake/metadata/clients/MetadataServiceClientBuilder.java
new file mode 100644
index 0000000..8dd01bc
--- /dev/null
+++ b/metadata-service/db-service/client/src/main/java/org/apache/airavata/datalake/metadata/clients/MetadataServiceClientBuilder.java
@@ -0,0 +1,12 @@
+package org.apache.airavata.datalake.metadata.clients;
+
+import io.grpc.ManagedChannel;
+import io.grpc.ManagedChannelBuilder;
+
+public class MetadataServiceClientBuilder {
+
+    public static MetadataServiceClient buildClient(String hostName, int port) {
+        ManagedChannel channel = ManagedChannelBuilder.forAddress(hostName, port).usePlaintext().build();
+        return new MetadataServiceClient(channel);
+    }
+}
diff --git a/metadata-service/db-service/client/src/main/java/org/apache/airavata/datalake/metadata/clients/Test.java b/metadata-service/db-service/client/src/main/java/org/apache/airavata/datalake/metadata/clients/Test.java
new file mode 100644
index 0000000..dd8b392
--- /dev/null
+++ b/metadata-service/db-service/client/src/main/java/org/apache/airavata/datalake/metadata/clients/Test.java
@@ -0,0 +1,78 @@
+package org.apache.airavata.datalake.metadata.clients;
+
+import org.apache.airavata.datalake.metadata.service.*;
+
+public class Test {
+    public static void main(String[] args) {
+
+        MetadataServiceClient serviceClient = MetadataServiceClientBuilder.buildClient("localhost", 9090);
+
+        TenantMetadataServiceGrpc.TenantMetadataServiceBlockingStub stub = serviceClient.tenant();
+
+        Tenant tenant = Tenant.newBuilder()
+                .setTenantId("asdcfvf")
+                .setName("TenantA")
+                .build();
+        Group group = Group.newBuilder()
+                .setName("g1")
+                .build();
+        Group group2 = Group.newBuilder()
+                .setName("g3")
+                .build();
+        Group group1 = Group.newBuilder()
+                .setName("g2")
+                .addChildGroups(group2)
+                .build();
+
+        User user = User.newBuilder()
+                .setUsername("TestingUserA")
+                .setFirstName("Isuru")
+                .setLastName("Ranawaka")
+                .build();
+
+        GroupMembership groupMemberships = GroupMembership
+                .newBuilder()
+                .setUser(user)
+                .setMembershipType("ADMIN")
+                .build();
+
+        group1 = group1.toBuilder()
+                .addGroupMembership(groupMemberships)
+                .build();
+        group = group.toBuilder()
+                .addChildGroups(group1)
+                .build();
+
+        Resource resource = Resource.newBuilder()
+                .setName("R1")
+                .build();
+        Resource resource1 = Resource.newBuilder()
+                .setName("R2")
+                .build();
+        Resource resource2 = Resource.newBuilder()
+                .setName("R3")
+                .build();
+
+        resource1 = resource1.toBuilder()
+                .addChildResources(resource2)
+                .build();
+        resource = resource.toBuilder()
+                .addChildResources(resource1)
+                .build();
+
+        tenant = tenant.toBuilder()
+                .addGroups(group)
+                .build();
+        tenant = tenant.toBuilder()
+                .addResources(resource)
+                .build();
+
+        TenantMetadataAPIRequest request = TenantMetadataAPIRequest
+                .newBuilder()
+                .setTenant(tenant)
+                .build();
+
+        stub.createTenant(request);
+
+    }
+}
diff --git a/metadata-service/db-service/db-service.iml b/metadata-service/db-service/db-service.iml
index a137c71..3851d1d 100644
--- a/metadata-service/db-service/db-service.iml
+++ b/metadata-service/db-service/db-service.iml
@@ -5,8 +5,8 @@
       <configuration>
         <webroots />
         <sourceRoots>
-          <root url="file://$MODULE_DIR$/src/main/java" />
-          <root url="file://$MODULE_DIR$/src/main/resources" />
+          <root url="file://$MODULE_DIR$/server/src/main/java" />
+          <root url="file://$MODULE_DIR$/server/src/main/resources" />
         </sourceRoots>
       </configuration>
     </facet>
@@ -18,9 +18,9 @@
     <output url="file://$MODULE_DIR$/target/classes" />
     <output-test url="file://$MODULE_DIR$/target/test-classes" />
     <content url="file://$MODULE_DIR$">
-      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/server/src/main/java" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/server/src/test/java" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/server/src/main/resources" type="java-resource" />
       <sourceFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" isTestSource="true" />
       <excludeFolder url="file://$MODULE_DIR$/target" />
     </content>
diff --git a/metadata-service/db-service/pom.xml b/metadata-service/db-service/pom.xml
index 594f50f..c0f14fb 100644
--- a/metadata-service/db-service/pom.xml
+++ b/metadata-service/db-service/pom.xml
@@ -6,44 +6,23 @@
         <artifactId>metadata-service</artifactId>
         <groupId>org.apache.airavata.data.lake</groupId>
         <version>0.01-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
     <artifactId>db-service</artifactId>
+    <packaging>pom</packaging>
+
+    <modules>
+        <module>db-service-server</module>
+        <module>db-service-client</module>
+        <module>db-service-stub</module>
+    </modules>
 
     <properties>
         <maven.compiler.source>11</maven.compiler.source>
         <maven.compiler.target>11</maven.compiler.target>
     </properties>
 
-    <dependencies>
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-web</artifactId>
-        </dependency>
-
-<!--        <dependency>-->
-<!--            <groupId>org.springframework.data</groupId>-->
-<!--            <artifactId>spring-data-neo4j</artifactId>-->
-<!--        </dependency>-->
-        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-neo4j -->
-<!--        <dependency>-->
-<!--            <groupId>org.springframework.boot</groupId>-->
-<!--            <artifactId>spring-boot-starter-data-neo4j</artifactId>-->
-<!--        </dependency>-->
-
-        <dependency>
-            <groupId>org.neo4j</groupId>
-            <artifactId>neo4j-ogm-core</artifactId>
-        </dependency>
-
-        <!-- Only add if you're using the Bolt driver -->
-        <dependency>
-            <groupId>org.neo4j</groupId>
-            <artifactId>neo4j-ogm-bolt-driver</artifactId>
-        </dependency>
-
-    </dependencies>
-
 
 </project>
\ No newline at end of file
diff --git a/metadata-service/db-service/db-service.iml b/metadata-service/db-service/server/db-service-server.iml
similarity index 76%
copy from metadata-service/db-service/db-service.iml
copy to metadata-service/db-service/server/db-service-server.iml
index a137c71..fe7fa68 100644
--- a/metadata-service/db-service/db-service.iml
+++ b/metadata-service/db-service/server/db-service-server.iml
@@ -7,6 +7,7 @@
         <sourceRoots>
           <root url="file://$MODULE_DIR$/src/main/java" />
           <root url="file://$MODULE_DIR$/src/main/resources" />
+          <root url="file://$MODULE_DIR$/target/maven-shared-archive-resources" />
         </sourceRoots>
       </configuration>
     </facet>
@@ -21,7 +22,7 @@
       <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
       <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
       <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" isTestSource="false" />
       <excludeFolder url="file://$MODULE_DIR$/target" />
     </content>
     <orderEntry type="inheritedJdk" />
@@ -378,19 +379,19 @@
       </library>
     </orderEntry>
     <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.2.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.2.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.2.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.2.1.RELEASE" level="project" />
     <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" />
     <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.13.3" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.13.3" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.30" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.12.1" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.12.1" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.29" level="project" />
     <orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.27" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.2.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.2.1.RELEASE" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: org.yaml:snakeyaml:1.25" level="project" />
     <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.4.2" level="project" />
     <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.11.4" level="project" />
     <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.11.4" level="project" />
@@ -408,9 +409,50 @@
     <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.3.3" level="project" />
     <orderEntry type="library" name="Maven: org.springframework:spring-context:5.3.3" level="project" />
     <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.3.3" level="project" />
+    <orderEntry type="module" module-name="db-service-stub" />
+    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java:3.10.0" level="project" />
+    <orderEntry type="library" name="Maven: io.github.lognet:grpc-spring-boot-starter:3.5.1" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-netty:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-core:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-api:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-context:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: com.google.errorprone:error_prone_annotations:2.3.3" level="project" />
+    <orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:3.0.2" level="project" />
+    <orderEntry type="library" name="Maven: org.codehaus.mojo:animal-sniffer-annotations:1.17" level="project" />
+    <orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.5" level="project" />
+    <orderEntry type="library" name="Maven: com.google.android:annotations:4.1.1.4" level="project" />
+    <orderEntry type="library" name="Maven: io.perfmark:perfmark-api:0.19.0" level="project" />
+    <orderEntry type="library" name="Maven: io.opencensus:opencensus-api:0.21.0" level="project" />
+    <orderEntry type="library" name="Maven: io.opencensus:opencensus-contrib-grpc-metrics:0.21.0" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec-http2:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec-http:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-handler-proxy:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec-socks:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-services:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: com.google.guava:guava:28.1-android" level="project" />
+    <orderEntry type="library" name="Maven: com.google.guava:failureaccess:1.0.1" level="project" />
+    <orderEntry type="library" name="Maven: com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava" level="project" />
+    <orderEntry type="library" name="Maven: org.checkerframework:checker-compat-qual:2.5.5" level="project" />
+    <orderEntry type="library" name="Maven: com.google.j2objc:j2objc-annotations:1.3" level="project" />
+    <orderEntry type="library" name="Maven: com.google.api.grpc:proto-google-common-protos:1.12.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf-lite:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-stub:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java-util:3.10.0" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-tcnative-boringssl-static:2.0.25.Final" level="project" />
+    <orderEntry type="library" name="Maven: net.sf.dozer:dozer:5.5.1" level="project" />
+    <orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.9.1" level="project" />
+    <orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.1" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.5" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:jcl-over-slf4j:1.7.5" level="project" />
     <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-core:3.2.20" level="project" />
     <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-api:3.2.20" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.25" level="project" />
     <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.8" level="project" />
     <orderEntry type="library" name="Maven: io.github.classgraph:classgraph:4.8.86" level="project" />
     <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-bolt-driver:3.2.20" level="project" />
diff --git a/metadata-service/db-service/server/pom.xml b/metadata-service/db-service/server/pom.xml
new file mode 100644
index 0000000..29ccc22
--- /dev/null
+++ b/metadata-service/db-service/server/pom.xml
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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">
+    <parent>
+        <artifactId>db-service</artifactId>
+        <groupId>org.apache.airavata.data.lake</groupId>
+        <version>0.01-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>server</artifactId>
+
+    <properties>
+        <maven.compiler.source>11</maven.compiler.source>
+        <maven.compiler.target>11</maven.compiler.target>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.neo4j</groupId>
+            <artifactId>neo4j-ogm-core</artifactId>
+            <version>3.2.20</version>
+        </dependency>
+        <dependency>
+            <groupId>org.neo4j</groupId>
+            <artifactId>neo4j-ogm-bolt-driver</artifactId>
+            <version>3.2.20</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.airavata.data.lake</groupId>
+            <artifactId>stub</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.google.protobuf</groupId>
+            <artifactId>protobuf-java</artifactId>
+            <version>${protobuf.java}</version>
+        </dependency>
+        <dependency>
+            <groupId>io.github.lognet</groupId>
+            <artifactId>grpc-spring-boot-starter</artifactId>
+            <version>${grpc.spring.boot}</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.springframework.boot</groupId>
+                    <artifactId>spring-boot-starter</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+            <version>2.4.2</version>
+        </dependency>
+        <dependency>
+            <groupId>net.sf.dozer</groupId>
+            <artifactId>dozer</artifactId>
+            <version>${dozer}</version>
+        </dependency>
+        <dependency>
+            <groupId>io.grpc</groupId>
+            <artifactId>grpc-services</artifactId>
+            <version>1.25.0</version>
+        </dependency>
+    </dependencies>
+
+</project>
\ No newline at end of file
diff --git a/metadata-service/db-service/server/server.iml b/metadata-service/db-service/server/server.iml
new file mode 100644
index 0000000..a06d26e
--- /dev/null
+++ b/metadata-service/db-service/server/server.iml
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
+  <component name="FacetManager">
+    <facet type="web" name="Web">
+      <configuration>
+        <webroots />
+        <sourceRoots>
+          <root url="file://$MODULE_DIR$/src/main/java" />
+          <root url="file://$MODULE_DIR$/src/main/resources" />
+        </sourceRoots>
+      </configuration>
+    </facet>
+    <facet type="Spring" name="Spring">
+      <configuration />
+    </facet>
+  </component>
+  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_11">
+    <output url="file://$MODULE_DIR$/target/classes" />
+    <output-test url="file://$MODULE_DIR$/target/test-classes" />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
+      <excludeFolder url="file://$MODULE_DIR$/target" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-core:3.2.20" level="project" />
+    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-api:3.2.20" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.9" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.0" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.9.9" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.9" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.9" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.8" level="project" />
+    <orderEntry type="library" name="Maven: io.github.classgraph:classgraph:4.8.86" level="project" />
+    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-bolt-driver:3.2.20" level="project" />
+    <orderEntry type="library" name="Maven: org.neo4j.driver:neo4j-java-driver:4.0.2" level="project" />
+    <orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.3" level="project" />
+    <orderEntry type="module" module-name="stub" />
+    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java:3.10.0" level="project" />
+    <orderEntry type="library" name="Maven: io.github.lognet:grpc-spring-boot-starter:3.5.1" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-netty:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec-http2:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec-http:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-handler-proxy:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec-socks:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-tcnative-boringssl-static:2.0.25.Final" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" />
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.13.3" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.13.3" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.30" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.27" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.11.4" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.41" level="project" />
+    <orderEntry type="library" name="Maven: org.glassfish:jakarta.el:3.0.3" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.41" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-web:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-context:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: net.sf.dozer:dozer:5.5.1" level="project" />
+    <orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.9.1" level="project" />
+    <orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.1" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.5" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:jcl-over-slf4j:1.7.5" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-services:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-api:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-context:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: com.google.errorprone:error_prone_annotations:2.3.3" level="project" />
+    <orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:3.0.2" level="project" />
+    <orderEntry type="library" name="Maven: org.codehaus.mojo:animal-sniffer-annotations:1.17" level="project" />
+    <orderEntry type="library" name="Maven: com.google.guava:guava:28.1-android" level="project" />
+    <orderEntry type="library" name="Maven: com.google.guava:failureaccess:1.0.1" level="project" />
+    <orderEntry type="library" name="Maven: com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava" level="project" />
+    <orderEntry type="library" name="Maven: org.checkerframework:checker-compat-qual:2.5.5" level="project" />
+    <orderEntry type="library" name="Maven: com.google.j2objc:j2objc-annotations:1.3" level="project" />
+    <orderEntry type="library" name="Maven: com.google.api.grpc:proto-google-common-protos:1.12.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf-lite:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-stub:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-core:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.5" level="project" />
+    <orderEntry type="library" name="Maven: com.google.android:annotations:4.1.1.4" level="project" />
+    <orderEntry type="library" name="Maven: io.perfmark:perfmark-api:0.19.0" level="project" />
+    <orderEntry type="library" name="Maven: io.opencensus:opencensus-api:0.21.0" level="project" />
+    <orderEntry type="library" name="Maven: io.opencensus:opencensus-contrib-grpc-metrics:0.21.0" level="project" />
+    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java-util:3.10.0" level="project" />
+  </component>
+</module>
\ No newline at end of file
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/AppConfig.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/AppConfig.java
new file mode 100644
index 0000000..2c0f692
--- /dev/null
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/AppConfig.java
@@ -0,0 +1,149 @@
+package org.apache.airavata.datalake.metadata;
+
+import org.apache.airavata.datalake.metadata.backend.Connector;
+import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Group;
+import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Resource;
+import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Tenant;
+import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.User;
+import org.dozer.DozerBeanMapper;
+import org.dozer.loader.api.BeanMappingBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+
+@Configuration
+public class AppConfig {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(AppConfig.class);
+
+    @Autowired
+    private Connector connector;
+
+
+    @Bean
+    public DozerBeanMapper dozerBeanMapper() {
+        DozerBeanMapper mapper = new DozerBeanMapper();
+        BeanMappingBuilder tenantMapping = new BeanMappingBuilder() {
+            @Override
+            protected void configure() {
+                mapping(org.apache.airavata.datalake.metadata.service.Tenant.class, Tenant.class);
+            }
+        };
+
+        BeanMappingBuilder groupMapping = new BeanMappingBuilder() {
+            @Override
+            protected void configure() {
+                mapping(org.apache.airavata.datalake.metadata.service.Group.class, Group.class);
+            }
+        };
+        BeanMappingBuilder resourceMapping = new BeanMappingBuilder() {
+            @Override
+            protected void configure() {
+                mapping(org.apache.airavata.datalake.metadata.service.Resource.class, Resource.class);
+            }
+        };
+
+        BeanMappingBuilder userMapping = new BeanMappingBuilder() {
+            @Override
+            protected void configure() {
+                mapping(org.apache.airavata.datalake.metadata.service.User.class, User.class);
+            }
+        };
+        mapper.addMapping(tenantMapping);
+        mapper.addMapping(groupMapping);
+        mapper.addMapping(resourceMapping);
+        mapper.addMapping(userMapping);
+        return mapper;
+    }
+
+
+    @Bean
+    Tenant getTenant() {
+        LOGGER.info("Calling get tenant############");
+        Tenant tenant = new Tenant();
+        tenant.setTenantId("123456789");
+        tenant.setName("Tenant");
+
+        User user = new User();
+        user.setFirstName("UserA");
+        user.setUsername("user_a");
+
+        User user1 = new User();
+        user1.setFirstName("UserB");
+        user1.setUsername("user_b");
+
+        User user2 = new User();
+        user2.setFirstName("UserC");
+        user2.setUsername("user_c");
+
+        Group group = new Group();
+        group.setName("g1");
+
+        Group group2 = new Group();
+        group2.setName("g2");
+
+        Group group3 = new Group();
+        group3.setName("g3");
+
+        group.addChildGroup(group2, 0, 0, null);
+        group2.addChildGroup(group3, 0, 0, null);
+
+
+        Resource resource = new Resource();
+        resource.setName("R1");
+
+        Resource resource1 = new Resource();
+        resource1.setName("R2");
+
+        Resource resource2 = new Resource();
+        resource2.setName("R3");
+
+        Resource resource3 = new Resource();
+        resource3.setName("R4");
+
+
+        group.addChildUser(user, "ADMIN", 0, 0, null);
+        resource.addChildResource(resource1, 0, 0, null);
+        resource.shareWithAUser(user, "READ", 0, 0, null);
+
+
+        group2.addChildUser(user1, "ADMIN", 0, 0, null);
+        group3.addChildUser(user2, "ADMIN", 0, 0, null);
+
+        resource1.shareWithAGroup(group2, "WRITE", 0, 0, null);
+        resource2.shareWithAGroup(group3, "WRITE", 0, 0, null);
+
+        tenant.add(user, 0, 0, null);
+        tenant.add(group, 0, 0, null);
+        tenant.add(resource, 0, 0, null);
+
+
+//        TenantServiceImpl tenantService = new TenantServiceImpl(connector);
+//        tenantService.createOrUpdate(tenant);
+//
+//        Filter filter = new Filter("name", ComparisonOperator.EQUALS, "R3");
+//
+//
+//        ResourceServiceImpl resourceService = new ResourceServiceImpl(connector);
+//        SearchOperator searchOperator = new SearchOperator();
+//        searchOperator.setKey("name");
+//        searchOperator.setValue("R2");
+//        searchOperator.setComparisonOperator(ComparisonOperator.EQUALS);
+//        List searchList = new ArrayList<>();
+//        searchList.add(searchOperator);
+//        List<Resource> collections = (List<Resource>) resourceService.search(searchList);
+//        LOGGER.info("Size", collections.size());
+//        for (Resource collection : collections) {
+//            LOGGER.info("#############" + collection.getName() + "Created At" + collection.getCreatedAt());
+//        }
+
+
+        return tenant;
+
+    }
+
+
+}
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/Neo4JServiceInitializer.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/Neo4JServiceInitializer.java
similarity index 87%
rename from metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/Neo4JServiceInitializer.java
rename to metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/Neo4JServiceInitializer.java
index 9a3d9c8..0850cc7 100644
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/Neo4JServiceInitializer.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/Neo4JServiceInitializer.java
@@ -1,4 +1,4 @@
-package org.apache.airavata.datalake.metadata.db.service;
+package org.apache.airavata.datalake.metadata;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/XmlConfiguration.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/XmlConfiguration.java
similarity index 79%
rename from metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/XmlConfiguration.java
rename to metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/XmlConfiguration.java
index bd8e468..d506b69 100644
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/XmlConfiguration.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/XmlConfiguration.java
@@ -1,4 +1,4 @@
-package org.apache.airavata.datalake.metadata.db.service;
+package org.apache.airavata.datalake.metadata;
 
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.ImportResource;
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/Connector.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/Connector.java
new file mode 100644
index 0000000..1853d4f
--- /dev/null
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/Connector.java
@@ -0,0 +1,10 @@
+package org.apache.airavata.datalake.metadata.backend;
+
+import java.io.Closeable;
+
+public interface Connector extends Closeable {
+
+    boolean init();
+
+
+}
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/Person.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/Person.java
similarity index 91%
rename from metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/Person.java
rename to metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/Person.java
index 83988ac..27758c1 100644
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/Person.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/Person.java
@@ -1,4 +1,4 @@
-package org.apache.airavata.datalake.metadata.db.service.backend;
+package org.apache.airavata.datalake.metadata.backend;
 
 
 import org.neo4j.ogm.annotation.Properties;
@@ -22,14 +22,12 @@ public class Person {
     private String name;
 
     @Properties(allowCast = true)
-    private Map<String, Object> valueProperties = new HashMap<>();
+    private final Map<String, Object> valueProperties = new HashMap<>();
 
     private Person() {
         // Empty constructor required as of Neo4j API 2.0.5
     }
 
-    ;
-
     public Person(String name) {
         this.name = name;
     }
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/Neo4JConnector.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/Neo4JConnector.java
similarity index 82%
rename from metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/Neo4JConnector.java
rename to metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/Neo4JConnector.java
index befa1cd..f94f305 100644
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/Neo4JConnector.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/Neo4JConnector.java
@@ -1,7 +1,7 @@
-package org.apache.airavata.datalake.metadata.db.service.backend.neo4j;
+package org.apache.airavata.datalake.metadata.backend.neo4j;
 
-import org.apache.airavata.datalake.metadata.db.service.backend.Connector;
-import org.apache.airavata.datalake.metadata.db.service.exceptions.DBConnectorException;
+import org.apache.airavata.datalake.metadata.backend.Connector;
+import org.apache.airavata.datalake.metadata.exceptions.DBConnectorException;
 import org.neo4j.ogm.config.Configuration;
 import org.neo4j.ogm.session.Session;
 import org.neo4j.ogm.session.SessionFactory;
@@ -29,7 +29,7 @@ public class Neo4JConnector implements Connector {
                     .uri(neo4JURI)
                     .build();
             factory =
-                    new SessionFactory(configuration, "org.apache.airavata.datalake.metadata.db.service");
+                    new SessionFactory(configuration, "org.apache.airavata.datalake.metadata.backend");
             return true;
         } catch (Exception ex) {
             String msg = "Neo4J Connection Failure, " + ex.getMessage();
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/GenericService.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/GenericService.java
new file mode 100644
index 0000000..a199dfe
--- /dev/null
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/GenericService.java
@@ -0,0 +1,90 @@
+package org.apache.airavata.datalake.metadata.backend.neo4j.curd.operators;
+
+import org.apache.airavata.datalake.metadata.backend.Connector;
+import org.apache.airavata.datalake.metadata.backend.neo4j.Neo4JConnector;
+import org.neo4j.ogm.cypher.Filter;
+import org.neo4j.ogm.cypher.query.Pagination;
+import org.neo4j.ogm.cypher.query.SortOrder;
+import org.neo4j.ogm.session.Session;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.atomic.AtomicReference;
+
+
+public abstract class GenericService<T> implements Service<T> {
+
+    private final Logger LOGGER = LoggerFactory.getLogger(this.getClass());
+
+    private static final int DEPTH_LIST = 0;
+    private static final int DEPTH_ENTITY = 1;
+
+    private final Connector connector;
+
+    private final Session session;
+
+    public GenericService(Connector connector) {
+        this.connector = connector;
+        this.session = ((Neo4JConnector) this.connector).openConnection();
+    }
+
+
+    @Override
+    public Iterable<T> findAll() {
+        return session.loadAll(getEntityType(), DEPTH_LIST);
+    }
+
+    @Override
+    public T find(Long id) {
+        return session.load(getEntityType(), id, DEPTH_ENTITY);
+    }
+
+    @Override
+    public void delete(Long id) {
+        session.delete(session.load(getEntityType(), id));
+    }
+
+    @Override
+    public Collection<T> search(List<SearchOperator> searchOperatorList) {
+        AtomicReference<Filter> filter = new AtomicReference<>();
+        searchOperatorList.forEach(operator -> {
+            if (filter.get() == null) {
+                LOGGER.info("Setting filter###");
+                filter.set(new Filter(operator.getKey(), operator.getComparisonOperator(), operator.getValue()));
+            } else {
+                filter.get().and(new Filter(operator.getKey(), operator.getComparisonOperator(), operator.getValue()));
+            }
+
+        });
+        LOGGER.info("Loading ###" + getEntityType());
+        return session.loadAll(getEntityType(), filter.get(), DEPTH_ENTITY);
+    }
+
+    @Override
+    public Iterable<T> sort(SortOrder.Direction sortOrder, String property) {
+        return session.loadAll(getEntityType(), new SortOrder().add(sortOrder, property));
+    }
+
+    @Override
+    public Iterable<T> sortAndPaging(SortOrder.Direction sortOrder, int pageNumber,
+                                     int itemsPerPage, String property) {
+        return session.loadAll(getEntityType(),
+                new SortOrder().add(sortOrder, property), new Pagination(pageNumber, itemsPerPage));
+    }
+
+    @Override
+    public Iterable<Map<String, Object>> execute(String query) {
+        return session.query(query, Collections.EMPTY_MAP);
+    }
+
+    @Override
+    public void createOrUpdate(T entity) {
+        session.save(entity);
+    }
+
+    abstract Class<T> getEntityType();
+}
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/GroupService.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/GroupService.java
new file mode 100644
index 0000000..8e870fa
--- /dev/null
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/GroupService.java
@@ -0,0 +1,4 @@
+package org.apache.airavata.datalake.metadata.backend.neo4j.curd.operators;
+
+public interface GroupService {
+}
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/GroupServiceImpl.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/GroupServiceImpl.java
new file mode 100644
index 0000000..1b7c9ad
--- /dev/null
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/GroupServiceImpl.java
@@ -0,0 +1,16 @@
+package org.apache.airavata.datalake.metadata.backend.neo4j.curd.operators;
+
+import org.apache.airavata.datalake.metadata.backend.Connector;
+import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Group;
+
+public class GroupServiceImpl extends GenericService<Group> implements GroupService {
+
+    public GroupServiceImpl(Connector connector) {
+        super(connector);
+    }
+
+    @Override
+    Class<Group> getEntityType() {
+        return Group.class;
+    }
+}
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/ResourceService.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/ResourceService.java
new file mode 100644
index 0000000..be6d06c
--- /dev/null
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/ResourceService.java
@@ -0,0 +1,4 @@
+package org.apache.airavata.datalake.metadata.backend.neo4j.curd.operators;
+
+public interface ResourceService {
+}
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/ResourceServiceImpl.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/ResourceServiceImpl.java
new file mode 100644
index 0000000..e1b8a35
--- /dev/null
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/ResourceServiceImpl.java
@@ -0,0 +1,16 @@
+package org.apache.airavata.datalake.metadata.backend.neo4j.curd.operators;
+
+import org.apache.airavata.datalake.metadata.backend.Connector;
+import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Resource;
+
+public class ResourceServiceImpl extends GenericService<Resource> implements UserService {
+
+    public ResourceServiceImpl(Connector connector) {
+        super(connector);
+    }
+
+    @Override
+    Class<Resource> getEntityType() {
+        return Resource.class;
+    }
+}
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/SearchOperator.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/SearchOperator.java
similarity index 88%
rename from metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/SearchOperator.java
rename to metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/SearchOperator.java
index 1717d1a..6822af9 100644
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/SearchOperator.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/SearchOperator.java
@@ -1,4 +1,4 @@
-package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.curd.operators;
+package org.apache.airavata.datalake.metadata.backend.neo4j.curd.operators;
 
 import org.neo4j.ogm.cypher.ComparisonOperator;
 
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/Service.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/Service.java
similarity index 70%
rename from metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/Service.java
rename to metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/Service.java
index ee73d18..1694973 100644
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/Service.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/Service.java
@@ -1,9 +1,10 @@
-package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.curd.operators;
+package org.apache.airavata.datalake.metadata.backend.neo4j.curd.operators;
 
 import org.neo4j.ogm.cypher.query.SortOrder;
 
 import java.util.Collection;
 import java.util.List;
+import java.util.Map;
 
 public interface Service<T> {
 
@@ -19,6 +20,8 @@ public interface Service<T> {
 
     Iterable<T> sortAndPaging(SortOrder.Direction direction, int pageNumber, int itemsPerPage, String property);
 
-    T createOrUpdate(T Object);
+    Iterable<Map<String,Object>> execute(String query);
+
+    void createOrUpdate(T Object);
 
 }
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/TenantService.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/TenantService.java
new file mode 100644
index 0000000..1034d1a
--- /dev/null
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/TenantService.java
@@ -0,0 +1,4 @@
+package org.apache.airavata.datalake.metadata.backend.neo4j.curd.operators;
+
+public interface TenantService {
+}
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/TenantServiceImpl.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/TenantServiceImpl.java
new file mode 100644
index 0000000..fb6c776
--- /dev/null
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/TenantServiceImpl.java
@@ -0,0 +1,15 @@
+package org.apache.airavata.datalake.metadata.backend.neo4j.curd.operators;
+
+import org.apache.airavata.datalake.metadata.backend.Connector;
+import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Tenant;
+
+public class TenantServiceImpl extends GenericService<Tenant> implements TenantService {
+    public TenantServiceImpl(Connector connector) {
+        super(connector);
+    }
+
+    @Override
+    Class<Tenant> getEntityType() {
+        return Tenant.class;
+    }
+}
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/UserService.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/UserService.java
new file mode 100644
index 0000000..737b93a
--- /dev/null
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/UserService.java
@@ -0,0 +1,4 @@
+package org.apache.airavata.datalake.metadata.backend.neo4j.curd.operators;
+
+public interface UserService {
+}
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/UserServiceImpl.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/UserServiceImpl.java
new file mode 100644
index 0000000..542cce3
--- /dev/null
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/curd/operators/UserServiceImpl.java
@@ -0,0 +1,16 @@
+package org.apache.airavata.datalake.metadata.backend.neo4j.curd.operators;
+
+import org.apache.airavata.datalake.metadata.backend.Connector;
+import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.User;
+
+public class UserServiceImpl extends GenericService<User> implements UserService {
+
+    public UserServiceImpl(Connector connector) {
+        super(connector);
+    }
+
+    @Override
+    Class<User> getEntityType() {
+        return User.class;
+    }
+}
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/Entity.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Entity.java
similarity index 93%
rename from metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/Entity.java
rename to metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Entity.java
index 158f94a..69fbdca 100644
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/Entity.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Entity.java
@@ -1,6 +1,6 @@
-package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.nodes;
+package org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes;
 
-import org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships.Has;
+import org.apache.airavata.datalake.metadata.backend.neo4j.model.relationships.Has;
 import org.neo4j.ogm.annotation.*;
 
 import java.util.HashMap;
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/Group.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Group.java
similarity index 91%
rename from metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/Group.java
rename to metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Group.java
index 3d26d98..c3362c5 100644
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/Group.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Group.java
@@ -1,6 +1,6 @@
-package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.nodes;
+package org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes;
 
-import org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships.*;
+import org.apache.airavata.datalake.metadata.backend.neo4j.model.relationships.*;
 import org.neo4j.ogm.annotation.NodeEntity;
 import org.neo4j.ogm.annotation.Property;
 import org.neo4j.ogm.annotation.Relationship;
@@ -23,13 +23,13 @@ public class Group extends Entity {
     private Set<HasChildGroup> childGroups = new HashSet<>();
 
     @Relationship(type = "HAS_CHILD_GROUP", direction = Relationship.INCOMING)
-    private HasChildGroup ChildGroupInPointers;
+    private HasChildGroup childGroupInPointers;
 
     @Relationship(type = "HAS_CHILD_USER")
     private Set<HasChildUser> childUsers = new HashSet<>();
 
     @Relationship(type = "HAS_PARENT_GROUP", direction = Relationship.INCOMING)
-    private Set<HasParentGroup> parentGroupInPointers = new HashSet<>();
+    private final Set<HasParentGroup> parentGroupInPointers = new HashSet<>();
 
     @Relationship(type = "HAS_PARENT_GROUP")
     private HasParentGroup parent;
@@ -38,10 +38,10 @@ public class Group extends Entity {
     private Set<MemberOf> memberUsersInPointers = new HashSet<>();
 
     @Relationship(type = "SHARED_WITH", direction = Relationship.INCOMING)
-    private Set<SharedWith> sharedResourcesInPointers = new HashSet<>();
+    private final Set<SharedWith> sharedResourcesInPointers = new HashSet<>();
 
     @Relationship(type = "HAS_ACCESS")
-    private Set<HasAccess> accessibleResources = new HashSet<>();
+    private final Set<HasAccess> accessibleResources = new HashSet<>();
 
 
     public Group() {
@@ -111,11 +111,11 @@ public class Group extends Entity {
     }
 
     public HasChildGroup getChildGroupInPointers() {
-        return ChildGroupInPointers;
+        return childGroupInPointers;
     }
 
     public void setChildGroupInPointers(HasChildGroup childGroupInPointers) {
-        this.ChildGroupInPointers = childGroupInPointers;
+        this.childGroupInPointers = childGroupInPointers;
     }
 
     public void setChildUsers(Set<HasChildUser> childUsers) {
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/Resource.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Resource.java
similarity index 93%
rename from metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/Resource.java
rename to metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Resource.java
index 5df5e77..b9808bf 100644
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/Resource.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Resource.java
@@ -1,8 +1,8 @@
-package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.nodes;
+package org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes;
 
-import org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships.*;
-import org.neo4j.ogm.annotation.*;
+import org.apache.airavata.datalake.metadata.backend.neo4j.model.relationships.*;
 import org.neo4j.ogm.annotation.Relationship;
+import org.neo4j.ogm.annotation.*;
 
 import java.util.HashSet;
 import java.util.Map;
@@ -22,22 +22,22 @@ public class Resource extends Entity {
     private Has tenantPointer;
 
     @Relationship(type = "HAS_CHILD_RESOURCE")
-    private Set<HasChildResource> childResourceSet = new HashSet<>();
+    private final Set<HasChildResource> childResourceSet = new HashSet<>();
 
     @Relationship(type = "HAS_CHILD_RESOURCE", direction = Relationship.INCOMING)
     private HasChildResource parentInPointer;
 
     @Relationship(type = "HAS_PARENT_RESOURCE", direction = Relationship.INCOMING)
-    private Set<HasParentResource> childInPointers = new HashSet<>();
+    private final Set<HasParentResource> childInPointers = new HashSet<>();
 
     @Relationship(type = "HAS_PARENT_RESOURCE")
     private HasParentResource parent;
 
     @Relationship(type = "SHARED_WITH")
-    private Set<SharedWith> shares = new HashSet<>();
+    private final Set<SharedWith> shares = new HashSet<>();
 
     @Relationship(type = "HAS_ACCESS", direction = Relationship.INCOMING)
-    private Set<HasAccess> accesses = new HashSet<>();
+    private final Set<HasAccess> accesses = new HashSet<>();
 
     public Resource() {
     }
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/Role.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Role.java
similarity index 78%
rename from metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/Role.java
rename to metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Role.java
index e70579a..c56e073 100644
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/Role.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Role.java
@@ -1,6 +1,6 @@
-package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.nodes;
+package org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes;
 
-import org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships.HasRole;
+import org.apache.airavata.datalake.metadata.backend.neo4j.model.relationships.HasRole;
 import org.neo4j.ogm.annotation.NodeEntity;
 import org.neo4j.ogm.annotation.Property;
 import org.neo4j.ogm.annotation.Relationship;
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/ServiceAccount.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/ServiceAccount.java
similarity index 74%
rename from metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/ServiceAccount.java
rename to metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/ServiceAccount.java
index 2802c5c..db5f99d 100644
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/ServiceAccount.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/ServiceAccount.java
@@ -1,6 +1,6 @@
-package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.nodes;
+package org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes;
 
-import org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships.Has;
+import org.apache.airavata.datalake.metadata.backend.neo4j.model.relationships.Has;
 import org.neo4j.ogm.annotation.NodeEntity;
 import org.neo4j.ogm.annotation.Property;
 import org.neo4j.ogm.annotation.Relationship;
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/Tenant.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Tenant.java
similarity index 89%
rename from metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/Tenant.java
rename to metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Tenant.java
index c8f619b..7967386 100644
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/Tenant.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/Tenant.java
@@ -1,7 +1,7 @@
-package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.nodes;
+package org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes;
 
-import org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships.Has;
-import org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships.HasRole;
+import org.apache.airavata.datalake.metadata.backend.neo4j.model.relationships.Has;
+import org.apache.airavata.datalake.metadata.backend.neo4j.model.relationships.HasRole;
 import org.neo4j.ogm.annotation.NodeEntity;
 import org.neo4j.ogm.annotation.Property;
 import org.neo4j.ogm.annotation.Relationship;
@@ -30,7 +30,7 @@ public class Tenant extends Entity {
     private Set<HasRole> roles = new HashSet<>();
 
     @Relationship(type = "HAS")
-    private Set<Has> entities = new HashSet<>();
+    private final Set<Has> entities = new HashSet<>();
 
 
     public Tenant() {
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/User.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/User.java
similarity index 81%
rename from metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/User.java
rename to metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/User.java
index 07b1979..d20f560 100644
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/User.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/nodes/User.java
@@ -1,6 +1,6 @@
-package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.nodes;
+package org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes;
 
-import org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships.*;
+import org.apache.airavata.datalake.metadata.backend.neo4j.model.relationships.*;
 import org.neo4j.ogm.annotation.NodeEntity;
 import org.neo4j.ogm.annotation.Property;
 import org.neo4j.ogm.annotation.Relationship;
@@ -11,7 +11,7 @@ import java.util.Set;
 @NodeEntity
 public class User extends Entity {
     @Property(name = "name")
-    private String userName;
+    private String username;
     @Property(name = "first_name")
     private String firstName;
     @Property(name = "last_name")
@@ -28,26 +28,26 @@ public class User extends Entity {
     private Has hasRole;
 
     @Relationship(type = "MEMBER_OF")
-    private Set<MemberOf> memberGroups = new HashSet<>();
+    private final Set<MemberOf> memberGroups = new HashSet<>();
 
     @Relationship(type = "HAS_CHILD_USER", direction = Relationship.INCOMING)
-    private Set<HasChildUser> groups = new HashSet<>();
+    private final Set<HasChildUser> groups = new HashSet<>();
 
     @Relationship(type = "SHARED_WITH", direction = Relationship.INCOMING)
-    private Set<SharedWith> sharedResources = new HashSet<>();
+    private final Set<SharedWith> sharedResources = new HashSet<>();
 
     @Relationship(type = "HAS_ACCESS")
-    private Set<HasAccess> accessibleResources = new HashSet<>();
+    private final Set<HasAccess> accessibleResources = new HashSet<>();
 
     public User() {
     }
 
-    public String getUserName() {
-        return userName;
+    public String getUsername() {
+        return username;
     }
 
-    public void setUserName(String userName) {
-        this.userName = userName;
+    public void setUsername(String username) {
+        this.username = username;
     }
 
     public String getFirstName() {
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/Belongs.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/Belongs.java
similarity index 60%
rename from metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/Belongs.java
rename to metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/Belongs.java
index 0f0e8ce..c897f64 100644
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/Belongs.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/Belongs.java
@@ -1,4 +1,4 @@
-package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships;
+package org.apache.airavata.datalake.metadata.backend.neo4j.model.relationships;
 
 import org.neo4j.ogm.annotation.RelationshipEntity;
 
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/ConfiguredWith.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/ConfiguredWith.java
similarity index 62%
rename from metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/ConfiguredWith.java
rename to metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/ConfiguredWith.java
index 22cbfcf..708e7ef 100644
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/ConfiguredWith.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/ConfiguredWith.java
@@ -1,4 +1,4 @@
-package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships;
+package org.apache.airavata.datalake.metadata.backend.neo4j.model.relationships;
 
 import org.neo4j.ogm.annotation.RelationshipEntity;
 
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/Has.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/Has.java
similarity index 58%
rename from metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/Has.java
rename to metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/Has.java
index c315762..3810532 100644
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/Has.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/Has.java
@@ -1,4 +1,4 @@
-package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships;
+package org.apache.airavata.datalake.metadata.backend.neo4j.model.relationships;
 
 import org.neo4j.ogm.annotation.RelationshipEntity;
 
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasAccess.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/HasAccess.java
similarity index 84%
rename from metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasAccess.java
rename to metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/HasAccess.java
index b76369b..1f51c29 100644
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasAccess.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/HasAccess.java
@@ -1,4 +1,4 @@
-package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships;
+package org.apache.airavata.datalake.metadata.backend.neo4j.model.relationships;
 
 import org.neo4j.ogm.annotation.Property;
 import org.neo4j.ogm.annotation.RelationshipEntity;
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasChildGroup.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/HasChildGroup.java
similarity index 62%
rename from metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasChildGroup.java
rename to metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/HasChildGroup.java
index a97bfb8..5405279 100644
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasChildGroup.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/HasChildGroup.java
@@ -1,4 +1,4 @@
-package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships;
+package org.apache.airavata.datalake.metadata.backend.neo4j.model.relationships;
 
 import org.neo4j.ogm.annotation.RelationshipEntity;
 
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasChildResource.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/HasChildResource.java
similarity index 63%
rename from metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasChildResource.java
rename to metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/HasChildResource.java
index 2a29c8d..277dc6a 100644
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasChildResource.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/HasChildResource.java
@@ -1,4 +1,4 @@
-package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships;
+package org.apache.airavata.datalake.metadata.backend.neo4j.model.relationships;
 
 import org.neo4j.ogm.annotation.RelationshipEntity;
 
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasChildUser.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/HasChildUser.java
similarity index 81%
rename from metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasChildUser.java
rename to metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/HasChildUser.java
index bc04572..126ab61 100644
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasChildUser.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/HasChildUser.java
@@ -1,4 +1,4 @@
-package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships;
+package org.apache.airavata.datalake.metadata.backend.neo4j.model.relationships;
 
 import org.neo4j.ogm.annotation.Property;
 import org.neo4j.ogm.annotation.RelationshipEntity;
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasParentGroup.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/HasParentGroup.java
similarity index 83%
rename from metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasParentGroup.java
rename to metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/HasParentGroup.java
index fe07ddb..3703607 100644
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasParentGroup.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/HasParentGroup.java
@@ -1,4 +1,4 @@
-package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships;
+package org.apache.airavata.datalake.metadata.backend.neo4j.model.relationships;
 
 import org.neo4j.ogm.annotation.Property;
 import org.neo4j.ogm.annotation.RelationshipEntity;
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasParentResource.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/HasParentResource.java
similarity index 63%
rename from metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasParentResource.java
rename to metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/HasParentResource.java
index d8a0340..44ae8f5 100644
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasParentResource.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/HasParentResource.java
@@ -1,4 +1,4 @@
-package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships;
+package org.apache.airavata.datalake.metadata.backend.neo4j.model.relationships;
 
 import org.neo4j.ogm.annotation.RelationshipEntity;
 
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasRole.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/HasRole.java
similarity index 60%
rename from metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasRole.java
rename to metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/HasRole.java
index 5b02f4e..cb378e8 100644
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasRole.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/HasRole.java
@@ -1,4 +1,4 @@
-package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships;
+package org.apache.airavata.datalake.metadata.backend.neo4j.model.relationships;
 
 import org.neo4j.ogm.annotation.RelationshipEntity;
 
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/MemberOf.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/MemberOf.java
similarity index 82%
rename from metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/MemberOf.java
rename to metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/MemberOf.java
index f381f33..1282ef0 100644
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/MemberOf.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/MemberOf.java
@@ -1,4 +1,4 @@
-package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships;
+package org.apache.airavata.datalake.metadata.backend.neo4j.model.relationships;
 
 import org.neo4j.ogm.annotation.Property;
 import org.neo4j.ogm.annotation.RelationshipEntity;
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/Relationship.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/Relationship.java
similarity index 89%
rename from metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/Relationship.java
rename to metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/Relationship.java
index f7ccdff..d8f502b 100644
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/Relationship.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/Relationship.java
@@ -1,6 +1,6 @@
-package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships;
+package org.apache.airavata.datalake.metadata.backend.neo4j.model.relationships;
 
-import org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.nodes.Entity;
+import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Entity;
 import org.neo4j.ogm.annotation.*;
 
 import java.util.HashMap;
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/SharedWith.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/SharedWith.java
similarity index 84%
rename from metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/SharedWith.java
rename to metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/SharedWith.java
index b3434cb..83a370e 100644
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/SharedWith.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/backend/neo4j/model/relationships/SharedWith.java
@@ -1,4 +1,4 @@
-package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships;
+package org.apache.airavata.datalake.metadata.backend.neo4j.model.relationships;
 
 import org.neo4j.ogm.annotation.Property;
 import org.neo4j.ogm.annotation.RelationshipEntity;
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/exceptions/DBConnectorException.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/exceptions/DBConnectorException.java
similarity index 76%
rename from metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/exceptions/DBConnectorException.java
rename to metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/exceptions/DBConnectorException.java
index c4860d8..431f517 100644
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/exceptions/DBConnectorException.java
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/exceptions/DBConnectorException.java
@@ -1,4 +1,4 @@
-package org.apache.airavata.datalake.metadata.db.service.exceptions;
+package org.apache.airavata.datalake.metadata.exceptions;
 
 public class DBConnectorException extends RuntimeException{
     String msg;
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/GroupServiceHandler.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/GroupServiceHandler.java
new file mode 100644
index 0000000..fb46b49
--- /dev/null
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/GroupServiceHandler.java
@@ -0,0 +1,38 @@
+package org.apache.airavata.datalake.metadata.handlers;
+
+import io.grpc.stub.StreamObserver;
+import org.apache.airavata.datalake.metadata.service.*;
+import org.lognet.springboot.grpc.GRpcService;
+
+@GRpcService
+public class GroupServiceHandler extends GroupMetadataServiceGrpc.GroupMetadataServiceImplBase {
+    @Override
+    public void createGroup(GroupMetadataAPIRequest request, StreamObserver<GroupMetadataAPIResponse> responseObserver) {
+        super.createGroup(request, responseObserver);
+    }
+
+    @Override
+    public void getGroup(GroupMetadataAPIRequest request, StreamObserver<Group> responseObserver) {
+        super.getGroup(request, responseObserver);
+    }
+
+    @Override
+    public void updateGroup(GroupMetadataAPIRequest request, StreamObserver<GroupMetadataAPIResponse> responseObserver) {
+        super.updateGroup(request, responseObserver);
+    }
+
+    @Override
+    public void deleteGroup(GroupMetadataAPIRequest request, StreamObserver<GroupMetadataAPIResponse> responseObserver) {
+        super.deleteGroup(request, responseObserver);
+    }
+
+    @Override
+    public void createGroupMemberships(GroupMembershipAPIRequest request, StreamObserver<GroupMetadataAPIResponse> responseObserver) {
+        super.createGroupMemberships(request, responseObserver);
+    }
+
+    @Override
+    public void deleteGroupMemberships(GroupMembershipAPIRequest request, StreamObserver<GroupMetadataAPIResponse> responseObserver) {
+        super.deleteGroupMemberships(request, responseObserver);
+    }
+}
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/ResourceServiceHandler.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/ResourceServiceHandler.java
new file mode 100644
index 0000000..1de7898
--- /dev/null
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/ResourceServiceHandler.java
@@ -0,0 +1,38 @@
+package org.apache.airavata.datalake.metadata.handlers;
+
+import io.grpc.stub.StreamObserver;
+import org.apache.airavata.datalake.metadata.service.*;
+import org.lognet.springboot.grpc.GRpcService;
+
+@GRpcService
+public class ResourceServiceHandler extends ResourceMetadataServiceGrpc.ResourceMetadataServiceImplBase {
+    @Override
+    public void createResource(ResourceMetadataAPIRequest request, StreamObserver<ResourceMetadataAPIResponse> responseObserver) {
+        super.createResource(request, responseObserver);
+    }
+
+    @Override
+    public void getResource(ResourceMetadataAPIRequest request, StreamObserver<Resource> responseObserver) {
+        super.getResource(request, responseObserver);
+    }
+
+    @Override
+    public void updateResource(ResourceMetadataAPIRequest request, StreamObserver<ResourceMetadataAPIResponse> responseObserver) {
+        super.updateResource(request, responseObserver);
+    }
+
+    @Override
+    public void deleteResource(ResourceMetadataAPIRequest request, StreamObserver<ResourceMetadataAPIResponse> responseObserver) {
+        super.deleteResource(request, responseObserver);
+    }
+
+    @Override
+    public void shareResource(ResourceMetadataSharingRequest request, StreamObserver<ResourceMetadataAPIResponse> responseObserver) {
+        super.shareResource(request, responseObserver);
+    }
+
+    @Override
+    public void deleteSharing(ResourceMetadataSharingRequest request, StreamObserver<ResourceMetadataAPIResponse> responseObserver) {
+        super.deleteSharing(request, responseObserver);
+    }
+}
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/TenantServiceHandler.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/TenantServiceHandler.java
new file mode 100644
index 0000000..d4fce42
--- /dev/null
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/TenantServiceHandler.java
@@ -0,0 +1,83 @@
+package org.apache.airavata.datalake.metadata.handlers;
+
+import io.grpc.stub.StreamObserver;
+import org.apache.airavata.datalake.metadata.backend.Connector;
+import org.apache.airavata.datalake.metadata.backend.neo4j.curd.operators.TenantServiceImpl;
+import org.apache.airavata.datalake.metadata.parsers.TenantParser;
+import org.apache.airavata.datalake.metadata.service.Tenant;
+import org.apache.airavata.datalake.metadata.service.TenantMetadataAPIRequest;
+import org.apache.airavata.datalake.metadata.service.TenantMetadataAPIResponse;
+import org.apache.airavata.datalake.metadata.service.TenantMetadataServiceGrpc;
+import org.dozer.DozerBeanMapper;
+import org.lognet.springboot.grpc.GRpcService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+
+@GRpcService
+public class TenantServiceHandler extends TenantMetadataServiceGrpc.TenantMetadataServiceImplBase {
+    private static final Logger LOGGER = LoggerFactory.getLogger(TenantServiceHandler.class);
+
+    @Autowired
+    private DozerBeanMapper dozerBeanMapper;
+
+    @Autowired
+    private TenantParser tenantParser;
+
+    @Autowired
+    private Connector connector;
+
+    @Override
+    public void createTenant(TenantMetadataAPIRequest request,
+                             StreamObserver<TenantMetadataAPIResponse> responseObserver) {
+        try {
+            Tenant tenant = request.getTenant();
+            org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Tenant parsedTenant =
+                    tenantParser.parseTenant(tenant);
+
+            TenantServiceImpl tenantService = new TenantServiceImpl(connector);
+            tenantService.createOrUpdate(parsedTenant);
+            TenantMetadataAPIResponse response = TenantMetadataAPIResponse.newBuilder().setStatus(true).build();
+            responseObserver.onNext(response);
+            responseObserver.onCompleted();
+
+        } catch (Exception ex) {
+            String msg = "Exception occurred while creating tenant " + ex;
+            LOGGER.error(msg);
+            responseObserver.onError(new Exception(msg));
+        }
+    }
+
+    @Override
+    public void getTenant(TenantMetadataAPIRequest request,
+                          StreamObserver<Tenant> responseObserver) {
+        try {
+
+
+        } catch (Exception ex) {
+
+        }
+    }
+
+    @Override
+    public void updateTenant(TenantMetadataAPIRequest request,
+                             StreamObserver<TenantMetadataAPIResponse> responseObserver) {
+        try {
+
+
+        } catch (Exception ex) {
+
+        }
+    }
+
+    @Override
+    public void deleteTenant(TenantMetadataAPIRequest request,
+                             StreamObserver<TenantMetadataAPIResponse> responseObserver) {
+        try {
+
+
+        } catch (Exception ex) {
+
+        }
+    }
+}
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/UserServiceHandler.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/UserServiceHandler.java
new file mode 100644
index 0000000..af2ceec
--- /dev/null
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/handlers/UserServiceHandler.java
@@ -0,0 +1,29 @@
+package org.apache.airavata.datalake.metadata.handlers;
+
+import io.grpc.stub.StreamObserver;
+import org.apache.airavata.datalake.metadata.service.*;
+import org.lognet.springboot.grpc.GRpcService;
+
+@GRpcService
+public class UserServiceHandler extends UserMetadataServiceGrpc.UserMetadataServiceImplBase {
+    @Override
+    public void createUser(UserMetadataAPIRequest request, StreamObserver<UserMetadataAPIResponse> responseObserver) {
+        super.createUser(request, responseObserver);
+    }
+
+    @Override
+    public void getUser(UserMetadataAPIRequest request, StreamObserver<User> responseObserver) {
+        super.getUser(request, responseObserver);
+    }
+
+    @Override
+    public void updateUser(UserMetadataAPIRequest request, StreamObserver<UserMetadataAPIResponse> responseObserver) {
+        super.updateUser(request, responseObserver);
+    }
+
+    @Override
+    public void deleteUser(UserMetadataAPIRequest request, StreamObserver<UserMetadataAPIResponse> responseObserver) {
+        super.deleteUser(request, responseObserver);
+    }
+
+}
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/GroupParser.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/GroupParser.java
new file mode 100644
index 0000000..eb31649
--- /dev/null
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/GroupParser.java
@@ -0,0 +1,68 @@
+package org.apache.airavata.datalake.metadata.parsers;
+
+import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Group;
+import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.User;
+import org.apache.airavata.datalake.metadata.service.GroupMembership;
+import org.dozer.DozerBeanMapper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Optional;
+
+@Component
+public class GroupParser {
+    private static final Logger LOGGER = LoggerFactory.getLogger(GroupParser.class);
+
+    @Autowired
+    private DozerBeanMapper dozerBeanMapper;
+
+
+    public Group parseGroup(org.apache.airavata.datalake.metadata.service.Group group, Optional<Group> parentGroup) {
+        Group newParentGroup;
+        if (parentGroup.isEmpty()) {
+            newParentGroup = dozerBeanMapper.map(group,
+                    org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Group.class);
+        } else {
+            newParentGroup = parentGroup.get();
+            Group childGroup = dozerBeanMapper.map(group,
+                    org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Group.class);
+            newParentGroup.addChildGroup(childGroup,
+                    childGroup.getCreatedAt() != 0 ? childGroup.getCreatedAt() : System.currentTimeMillis(),
+                    childGroup.getLastModifiedAt() != 0 ? childGroup.getLastModifiedAt() : System.currentTimeMillis(),
+                    null); // Improve this with relatioship propertie
+
+            newParentGroup = childGroup;
+        }
+
+        List<GroupMembership> groupMemberships = group.getGroupMembershipList();
+
+        if (!groupMemberships.isEmpty()) {
+            Group finalNewParentGroup1 = newParentGroup;
+            groupMemberships.forEach(mebership -> {
+                User usr = dozerBeanMapper.map(mebership.getUser(), org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.User.class);
+                finalNewParentGroup1.addChildUser(usr, mebership.getMembershipType(),
+                        mebership.getCreatedAt() != 0 ? mebership.getCreatedAt() : System.currentTimeMillis(),
+                        mebership.getLastModifiedAt() != 0 ? mebership.getLastModifiedAt() : System.currentTimeMillis(),
+                        null);
+            });
+
+        }
+
+        List<org.apache.airavata.datalake.metadata.service.Group> groups = group.getChildGroupsList();
+
+        if (!groups.isEmpty()) {
+
+            Group finalNewParentGroup = newParentGroup;
+            groups.forEach(gr -> {
+                this.parseGroup(gr, Optional.of(finalNewParentGroup));
+            });
+        }
+        return newParentGroup;
+
+    }
+
+
+}
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/ResourceParser.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/ResourceParser.java
new file mode 100644
index 0000000..6a14446
--- /dev/null
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/ResourceParser.java
@@ -0,0 +1,77 @@
+package org.apache.airavata.datalake.metadata.parsers;
+
+import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Resource;
+import org.apache.airavata.datalake.metadata.service.ResourceSharings;
+import org.dozer.DozerBeanMapper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Optional;
+
+@Component
+public class ResourceParser {
+    private static final Logger LOGGER = LoggerFactory.getLogger(ResourceParser.class);
+
+    @Autowired
+    private DozerBeanMapper dozerBeanMapper;
+
+
+    public Resource parseResource(org.apache.airavata.datalake.metadata.service.Resource resource,
+                                  Optional<Resource> parentResource) {
+        Resource newParentResource;
+        if (parentResource.isEmpty()) {
+            newParentResource = dozerBeanMapper.map(resource,
+                    org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Resource.class);
+        } else {
+            newParentResource = parentResource.get();
+            Resource childResource = dozerBeanMapper.map(resource,
+                    org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Resource.class);
+            newParentResource.addChildResource(childResource,
+                    childResource.getCreatedAt() != 0 ? childResource.getCreatedAt() : System.currentTimeMillis(),
+                    childResource.getLastModifiedAt() != 0 ? childResource.getLastModifiedAt() : System.currentTimeMillis(),
+                    null); // Improve this with relatioship properties
+            newParentResource = childResource;
+        }
+
+
+         List<ResourceSharings> resourceSharings = resource.getSharingsList();
+
+        if (! resourceSharings.isEmpty()) {
+            resourceSharings.forEach(reshr-> {
+                if (!reshr.getUsersList().isEmpty()) {
+                    reshr.getUsersList().forEach(shr-> {
+                       // newParentResource.shareWithAUser(shr,reshr.get);
+
+                    });
+                    
+                } else if (!reshr.getGroupsList().isEmpty()) {
+
+                }
+
+
+            });
+
+
+        }
+
+
+
+
+
+        List<org.apache.airavata.datalake.metadata.service.Resource> resources = resource.getChildResourcesList();
+
+        if (!resources.isEmpty()) {
+            Resource finalNewParentResource = newParentResource;
+            resources.forEach(gr -> {
+                this.parseResource(gr, Optional.of(finalNewParentResource));
+            });
+        }
+        return newParentResource;
+
+    }
+
+
+}
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/TenantParser.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/TenantParser.java
new file mode 100644
index 0000000..c31379d
--- /dev/null
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/TenantParser.java
@@ -0,0 +1,79 @@
+package org.apache.airavata.datalake.metadata.parsers;
+
+import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Tenant;
+import org.apache.airavata.datalake.metadata.service.Group;
+import org.apache.airavata.datalake.metadata.service.Resource;
+import org.apache.airavata.datalake.metadata.service.User;
+import org.dozer.DozerBeanMapper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Optional;
+
+@Component
+public class TenantParser {
+    private static Logger LOGGER = LoggerFactory.getLogger(TenantParser.class);
+
+    @Autowired
+    private DozerBeanMapper dozerBeanMapper;
+
+    @Autowired
+    private GroupParser groupParser;
+
+    @Autowired
+    private UserParser userParser;
+
+    @Autowired
+    private ResourceParser resourceParser;
+
+
+    public Tenant parseTenant(org.apache.airavata.datalake.metadata.service.Tenant tenant) {
+        List<Group> groups = tenant.getGroupsList();
+        List<User> users = tenant.getUsersList();
+        List<Resource> resources = tenant.getResourcesList();
+
+
+        org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Tenant neo4JTenant =
+                dozerBeanMapper.map(tenant, org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Tenant.class);
+
+        if (!groups.isEmpty()) {
+            groups.stream().forEach(group -> {
+                org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Group neo4JGr =
+                        groupParser.parseGroup(group, Optional.empty());
+                neo4JTenant.add(neo4JGr, tenant.getCreatedAt() != 0 ? tenant.getCreatedAt() : System.currentTimeMillis(),
+                        tenant.getLastModifiedAt() != 0 ? tenant.getLastModifiedAt() : System.currentTimeMillis(),
+                        null);
+
+            });
+        }
+
+        if (!users.isEmpty()) {
+            users.stream().forEach(user -> {
+                org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.User usr =
+                        userParser.parseUser(user);
+                neo4JTenant.add(usr, tenant.getCreatedAt() != 0 ? tenant.getCreatedAt() : System.currentTimeMillis(),
+                        tenant.getLastModifiedAt() != 0 ? tenant.getLastModifiedAt() : System.currentTimeMillis(),
+                        null);
+
+            });
+        }
+
+        if (!resources.isEmpty()) {
+            resources.stream().forEach(resource -> {
+                org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Resource neo4JResource =
+                        resourceParser.parseResource(resource, Optional.empty());
+                neo4JTenant.add(neo4JResource, tenant.getCreatedAt() != 0 ? tenant.getCreatedAt() : System.currentTimeMillis(),
+                        tenant.getLastModifiedAt() != 0 ? tenant.getLastModifiedAt() : System.currentTimeMillis(),
+                        null);
+
+            });
+        }
+        return neo4JTenant;
+
+    }
+
+
+}
diff --git a/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/UserParser.java b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/UserParser.java
new file mode 100644
index 0000000..2903381
--- /dev/null
+++ b/metadata-service/db-service/server/src/main/java/org/apache/airavata/datalake/metadata/parsers/UserParser.java
@@ -0,0 +1,22 @@
+package org.apache.airavata.datalake.metadata.parsers;
+
+import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.User;
+import org.dozer.DozerBeanMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component
+public class UserParser {
+
+    @Autowired
+    private DozerBeanMapper dozerBeanMapper;
+
+
+    public User parseUser(org.apache.airavata.datalake.metadata.service.User user) {
+
+        return dozerBeanMapper.map(user,
+                org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.User.class);
+    }
+
+
+}
diff --git a/metadata-service/db-service/src/main/resources/application.properties b/metadata-service/db-service/server/src/main/resources/application.properties
similarity index 88%
rename from metadata-service/db-service/src/main/resources/application.properties
rename to metadata-service/db-service/server/src/main/resources/application.properties
index f0d53ae..0b24325 100644
--- a/metadata-service/db-service/src/main/resources/application.properties
+++ b/metadata-service/db-service/server/src/main/resources/application.properties
@@ -17,7 +17,7 @@
 #  under the License.
 #
 
-server.port=9090
+grpc.port=9090
 spring.neo4j.uri=bolt://neo4j:blastcovid19@149.165.156.173
-spring.neo4j.authentication.username=username
-spring.neo4j.authentication.password=password
+spring.neo4j.authentication.username=neo4j
+spring.neo4j.authentication.password=blastcovid19
diff --git a/metadata-service/db-service/src/main/resources/applicationContext.xml b/metadata-service/db-service/server/src/main/resources/applicationContext.xml
similarity index 91%
rename from metadata-service/db-service/src/main/resources/applicationContext.xml
rename to metadata-service/db-service/server/src/main/resources/applicationContext.xml
index adeadaf..842fccf 100644
--- a/metadata-service/db-service/src/main/resources/applicationContext.xml
+++ b/metadata-service/db-service/server/src/main/resources/applicationContext.xml
@@ -6,7 +6,7 @@
         http://www.springframework.org/schema/context
         http://www.springframework.org/schema/context/spring-context.xsd">
 
-    <bean id="dbConnector" class="org.apache.airavata.datalake.metadata.db.service.backend.neo4j.Neo4JConnector"
+    <bean id="dbConnector" class="org.apache.airavata.datalake.metadata.backend.neo4j.Neo4JConnector"
           init-method="init" destroy-method="close"></bean>
 
 </beans>
\ No newline at end of file
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/AppConfig.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/AppConfig.java
deleted file mode 100644
index d941b92..0000000
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/AppConfig.java
+++ /dev/null
@@ -1,108 +0,0 @@
-package org.apache.airavata.datalake.metadata.db.service;
-
-import org.apache.airavata.datalake.metadata.db.service.backend.Connector;
-import org.apache.airavata.datalake.metadata.db.service.backend.neo4j.Neo4JConnector;
-import org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.nodes.Group;
-import org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.nodes.Resource;
-import org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.nodes.Tenant;
-import org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.nodes.User;
-import org.neo4j.ogm.cypher.ComparisonOperator;
-import org.neo4j.ogm.cypher.Filter;
-import org.neo4j.ogm.session.Session;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-
-@Configuration
-public class AppConfig {
-
-    private static final Logger LOGGER = LoggerFactory.getLogger(AppConfig.class);
-
-    @Autowired
-    private Connector connector;
-
-
-    @Bean
-    Tenant getTenant() {
-        LOGGER.info("Calling get tenant############");
-        Tenant tenant = new Tenant();
-        tenant.setTenantId("123456789");
-        tenant.setName("Tenant");
-
-        User user = new User();
-        user.setFirstName("UserA");
-        user.setUserName("user_a");
-
-        User user1 = new User();
-        user1.setFirstName("UserB");
-        user1.setUserName("user_b");
-
-        User user2 = new User();
-        user2.setFirstName("UserC");
-        user2.setUserName("user_c");
-
-        Group group = new Group();
-        group.setName("g1");
-
-        Group group2 = new Group();
-        group2.setName("g2");
-
-        Group group3 = new Group();
-        group3.setName("g3");
-
-        group.addChildGroup(group2, 0, 0, null);
-        group2.addChildGroup(group3, 0, 0, null);
-
-
-        Resource resource = new Resource();
-        resource.setName("R1");
-
-        Resource resource1 = new Resource();
-        resource1.setName("R2");
-
-        Resource resource2 = new Resource();
-        resource2.setName("R3");
-
-        Resource resource3 = new Resource();
-        resource3.setName("R4");
-
-
-        group.addChildUser(user, "ADMIN", 0, 0, null);
-        resource.addChildResource(resource1, 0, 0, null);
-        resource.shareWithAUser(user, "READ", 0, 0, null);
-
-
-        group2.addChildUser(user1, "ADMIN", 0, 0, null);
-        group3.addChildUser(user2, "ADMIN", 0, 0, null);
-
-        resource1.shareWithAGroup(group2, "WRITE", 0, 0, null);
-        resource2.shareWithAGroup(group3, "WRITE", 0, 0, null);
-
-        tenant.add(user, 0, 0, null);
-        tenant.add(group, 0, 0, null);
-        tenant.add(resource, 0, 0, null);
-
-        Session session = ((Neo4JConnector) connector).openConnection();
-        session.save(tenant);
-
-        Filter filter = new Filter("name", ComparisonOperator.EQUALS, "R3");
-
-//        Collection<Resource> resources = session.loadAll(Resource.class, filter, 1);
-//        resources.stream().forEach(t -> {
-//            LOGGER.info("Resources " + t.getName());
-//            t.addChildResource(resource3, 0, 0, null);
-//            Resource resource4 = (Resource) session.load(Resource.class, new Long(13));
-//            session.delete(resource4);
-//            session.save(t);
-//        });
-
-
-        return tenant;
-
-    }
-
-
-}
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/Connector.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/Connector.java
deleted file mode 100644
index c96905f..0000000
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/Connector.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package org.apache.airavata.datalake.metadata.db.service.backend;
-
-import java.io.Closeable;
-
-public interface Connector extends Closeable {
-
-    public boolean init();
-
-
-}
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/GenericService.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/GenericService.java
deleted file mode 100644
index 1a24815..0000000
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/GenericService.java
+++ /dev/null
@@ -1,79 +0,0 @@
-package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.curd.operators;
-
-import org.apache.airavata.datalake.metadata.db.service.backend.Connector;
-import org.apache.airavata.datalake.metadata.db.service.backend.neo4j.Neo4JConnector;
-import org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.nodes.Entity;
-import org.neo4j.ogm.cypher.Filter;
-import org.neo4j.ogm.cypher.query.Pagination;
-import org.neo4j.ogm.cypher.query.SortOrder;
-import org.neo4j.ogm.session.Session;
-import org.springframework.beans.factory.annotation.Autowired;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.concurrent.atomic.AtomicReference;
-
-public abstract class GenericService<T> implements Service<T> {
-
-    private static final int DEPTH_LIST = 0;
-    private static final int DEPTH_ENTITY = 1;
-
-    private Connector connector;
-
-    private Session session;
-
-    public GenericService(@Autowired Connector connector) {
-        this.connector = connector;
-        this.session = ((Neo4JConnector) this.connector).openConnection();
-    }
-
-
-    @Override
-    public Iterable<T> findAll() {
-        return session.loadAll(getEntityType(), DEPTH_LIST);
-    }
-
-    @Override
-    public T find(Long id) {
-        return session.load(getEntityType(), id, DEPTH_ENTITY);
-    }
-
-    @Override
-    public void delete(Long id) {
-        session.delete(session.load(getEntityType(), id));
-    }
-
-    @Override
-    public Collection<T> search(List<SearchOperator> searchOperatorList) {
-        AtomicReference<Filter> filter = null;
-        searchOperatorList.forEach(value -> {
-            if (filter.get() == null) {
-                filter.set(new Filter(value.getValue(), value.getComparisonOperator(), value.getValue()));
-            } else {
-                filter.get().and(new Filter(value.getValue(), value.getComparisonOperator(), value.getValue()));
-            }
-
-        });
-        return session.loadAll(getEntityType(), filter.get());
-    }
-
-    @Override
-    public Iterable<T> sort(SortOrder.Direction sortOrder, String property) {
-       return  session.loadAll(getEntityType(),new SortOrder().add(sortOrder,property));
-    }
-
-    @Override
-    public Iterable<T> sortAndPaging(SortOrder.Direction sortOrder, int pageNumber,
-                                     int itemsPerPage, String property) {
-        return  session.loadAll(getEntityType(),
-                new SortOrder().add(sortOrder,property), new Pagination(pageNumber,itemsPerPage));
-    }
-
-    @Override
-    public T createOrUpdate(T entity) {
-        session.save(entity, DEPTH_ENTITY);
-        return find(((Entity) entity).getId());
-    }
-
-    abstract Class<T> getEntityType();
-}
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/GroupService.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/GroupService.java
deleted file mode 100644
index dc83a02..0000000
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/GroupService.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.curd.operators;
-
-public interface GroupService {
-}
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/ResourceService.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/ResourceService.java
deleted file mode 100644
index 5cf5a03..0000000
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/ResourceService.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.curd.operators;
-
-public interface ResourceService {
-}
diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/UserService.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/UserService.java
deleted file mode 100644
index 7669a05..0000000
--- a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/UserService.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.curd.operators;
-
-public interface UserService {
-}
diff --git a/metadata-service/db-service/stub/db-service-stub.iml b/metadata-service/db-service/stub/db-service-stub.iml
new file mode 100644
index 0000000..d2ffd43
--- /dev/null
+++ b/metadata-service/db-service/stub/db-service-stub.iml
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
+  <component name="FacetManager">
+    <facet type="Spring" name="Spring">
+      <configuration />
+    </facet>
+  </component>
+  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_11">
+    <output url="file://$MODULE_DIR$/target/classes" />
+    <output-test url="file://$MODULE_DIR$/target/test-classes" />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/proto" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/target/generated-sources/protobuf/grpc-java" isTestSource="false" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/target/generated-sources/protobuf/java" isTestSource="false" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" isTestSource="true" />
+      <excludeFolder url="file://$MODULE_DIR$/target" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="library" name="Bundled Protobuf Distribution" level="application" />
+    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java:3.10.0" level="project" />
+    <orderEntry type="library" name="Maven: io.github.lognet:grpc-spring-boot-starter:3.5.1" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-netty:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-core:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-api:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-context:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: com.google.errorprone:error_prone_annotations:2.3.3" level="project" />
+    <orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:3.0.2" level="project" />
+    <orderEntry type="library" name="Maven: org.codehaus.mojo:animal-sniffer-annotations:1.17" level="project" />
+    <orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.5" level="project" />
+    <orderEntry type="library" name="Maven: com.google.android:annotations:4.1.1.4" level="project" />
+    <orderEntry type="library" name="Maven: io.perfmark:perfmark-api:0.19.0" level="project" />
+    <orderEntry type="library" name="Maven: io.opencensus:opencensus-api:0.21.0" level="project" />
+    <orderEntry type="library" name="Maven: io.opencensus:opencensus-contrib-grpc-metrics:0.21.0" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec-http2:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec-http:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-handler-proxy:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec-socks:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-services:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: com.google.guava:guava:28.1-android" level="project" />
+    <orderEntry type="library" name="Maven: com.google.guava:failureaccess:1.0.1" level="project" />
+    <orderEntry type="library" name="Maven: com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava" level="project" />
+    <orderEntry type="library" name="Maven: org.checkerframework:checker-compat-qual:2.5.5" level="project" />
+    <orderEntry type="library" name="Maven: com.google.j2objc:j2objc-annotations:1.3" level="project" />
+    <orderEntry type="library" name="Maven: com.google.api.grpc:proto-google-common-protos:1.12.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf-lite:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-stub:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java-util:3.10.0" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-tcnative-boringssl-static:2.0.25.Final" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.2.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.2.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-context:5.2.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.2.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.2.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.2.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.2.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.2.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" />
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.12.1" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.12.1" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.29" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.2.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.2.1.RELEASE" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: org.yaml:snakeyaml:1.25" level="project" />
+    <orderEntry type="library" name="Maven: net.sf.dozer:dozer:5.5.1" level="project" />
+    <orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.9.1" level="project" />
+    <orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.1" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.2.1" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.5" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:jcl-over-slf4j:1.7.5" level="project" />
+  </component>
+</module>
\ No newline at end of file
diff --git a/metadata-service/db-service/stub/pom.xml b/metadata-service/db-service/stub/pom.xml
new file mode 100644
index 0000000..e032813
--- /dev/null
+++ b/metadata-service/db-service/stub/pom.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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">
+    <parent>
+        <artifactId>metadata-service</artifactId>
+        <groupId>org.apache.airavata.data.lake</groupId>
+        <version>0.01-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>stub</artifactId>
+
+    <properties>
+        <maven.compiler.source>11</maven.compiler.source>
+        <maven.compiler.target>11</maven.compiler.target>
+    </properties>
+    <dependencies>
+        <dependency>
+            <groupId>com.google.protobuf</groupId>
+            <artifactId>protobuf-java</artifactId>
+            <version>${protobuf.java}</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <extensions>
+            <extension>
+                <groupId>kr.motd.maven</groupId>
+                <artifactId>os-maven-plugin</artifactId>
+                <version>${os.maven.plugin}</version>
+            </extension>
+        </extensions>
+        <plugins>
+            <plugin>
+                <groupId>org.xolstice.maven.plugins</groupId>
+                <artifactId>protobuf-maven-plugin</artifactId>
+                <version>${protobuf.maven.plugin}</version>
+                <configuration>
+                    <protocArtifact>com.google.protobuf:protoc:3.0.2:exe:${os.detected.classifier}</protocArtifact>
+                    <pluginId>grpc-java</pluginId>
+                    <pluginArtifact>io.grpc:protoc-gen-grpc-java:1.0.1:exe:${os.detected.classifier}</pluginArtifact>
+                </configuration>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>compile</goal>
+                            <goal>compile-custom</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>
\ No newline at end of file
diff --git a/metadata-service/db-service/stub/src/main/proto/common/Common.proto b/metadata-service/db-service/stub/src/main/proto/common/Common.proto
new file mode 100644
index 0000000..b631661
--- /dev/null
+++ b/metadata-service/db-service/stub/src/main/proto/common/Common.proto
@@ -0,0 +1,12 @@
+syntax = "proto3";
+
+option java_multiple_files = true;
+package org.apache.airavata.datalake.metadata.service;
+
+import "google/api/annotations.proto";
+
+
+
+message MetadataServiceAuthToken {
+    string access_token = 1;
+}
\ No newline at end of file
diff --git a/metadata-service/db-service/stub/src/main/proto/group/Group.proto b/metadata-service/db-service/stub/src/main/proto/group/Group.proto
new file mode 100644
index 0000000..2275c72
--- /dev/null
+++ b/metadata-service/db-service/stub/src/main/proto/group/Group.proto
@@ -0,0 +1,88 @@
+syntax = "proto3";
+
+option java_multiple_files = true;
+package org.apache.airavata.datalake.metadata.service;
+
+import "google/api/annotations.proto";
+import "common/Common.proto";
+import "user/User.proto";
+
+message GroupMetadataAPIRequest {
+    Group group = 1;
+    MetadataServiceAuthToken auth_token = 2;
+    string source = 3;
+}
+
+message GroupMembershipAPIRequest {
+    repeated GroupMembership memberships = 1;
+    MetadataServiceAuthToken auth_token = 2;
+    string source = 3;
+}
+
+message GroupMetadataAPIResponse {
+    bool status = 1;
+}
+
+
+message Group {
+    string tenant_id = 1;
+    string name = 2;
+    string description = 3;
+    map<string, string> properties = 4;
+    repeated Group child_groups = 5;
+    string parent_group_id = 6;
+    int64 created_at = 9;
+    int64 last_modified_at = 10;
+    repeated GroupMembership group_membership = 11;
+}
+
+message GroupMembership {
+    string user_id = 1;
+    User user = 2;
+    string group_id = 3;
+    string membership_type = 4;
+    map<string, string> properties = 5;
+    int64 created_at = 6;
+    int64 last_modified_at = 7;
+}
+
+
+service GroupMetadataService {
+
+    rpc createGroup (GroupMetadataAPIRequest) returns (GroupMetadataAPIResponse) {
+        option (google.api.http) = {
+           post: "/v1.0/api/metadata/group"
+        };
+    }
+
+    rpc getGroup (GroupMetadataAPIRequest) returns (Group) {
+        option (google.api.http) = {
+           get: "/v1.0/api/metadata/group"
+        };
+    }
+
+    rpc updateGroup (GroupMetadataAPIRequest) returns (GroupMetadataAPIResponse) {
+        option (google.api.http) = {
+           put: "/v1.0/api/metadata/group"
+        };
+    }
+
+    rpc deleteGroup (GroupMetadataAPIRequest) returns (GroupMetadataAPIResponse) {
+        option (google.api.http) = {
+           delete: "/v1.0/api/metadata/group"
+        };
+    }
+
+    rpc createGroupMemberships (GroupMembershipAPIRequest) returns (GroupMetadataAPIResponse) {
+        option (google.api.http) = {
+           post: "/v1.0/api/metadata/user/group/memberships"
+        };
+    }
+
+    rpc deleteGroupMemberships (GroupMembershipAPIRequest) returns (GroupMetadataAPIResponse) {
+        option (google.api.http) = {
+           delete: "/v1.0/api/metadata/user/group/memberships"
+        };
+    }
+
+}
\ No newline at end of file
diff --git a/metadata-service/db-service/stub/src/main/proto/resource/Resource.proto b/metadata-service/db-service/stub/src/main/proto/resource/Resource.proto
new file mode 100644
index 0000000..81f2e3a
--- /dev/null
+++ b/metadata-service/db-service/stub/src/main/proto/resource/Resource.proto
@@ -0,0 +1,97 @@
+syntax = "proto3";
+
+option java_multiple_files = true;
+package org.apache.airavata.datalake.metadata.service;
+
+import "google/api/annotations.proto";
+import "common/Common.proto";
+import "user/User.proto";
+import "group/Group.proto";
+
+
+message ResourceMetadataAPIRequest {
+    Resource resource = 1;
+    MetadataServiceAuthToken auth_token = 2;
+    string source = 3;
+}
+
+
+message ResourceMetadataSharingRequest {
+    repeated ResourceSharings sharings = 1;
+    MetadataServiceAuthToken auth_token = 2;
+    string source = 3;
+}
+
+message ResourceMetadataAPIResponse {
+    bool status = 1;
+}
+
+
+message Resource {
+    string tenant_id = 1;
+    string name = 2;
+    string description = 3;
+    map<string, string> properties = 4;
+    int64 created_at = 5;
+    int64 last_modified_at = 6;
+    string type = 7;
+    string full_text = 8;
+    string source = 9;
+    repeated Resource child_resources = 10;
+    string parent_resource_id = 11;
+    repeated ResourceSharings sharings = 12;
+}
+
+
+message ResourceSharings {
+    string shared_entity_id = 1;
+    string shared_entity_type = 2;
+    string sharing_type = 3;
+    map<string, string> properties = 4;
+    int64 created_at = 5;
+    int64 last_modified_at = 6;
+    string resource_id = 7;
+    repeated User users = 8;
+    repeated Group groups = 9;
+}
+
+
+service ResourceMetadataService {
+
+    rpc createResource (ResourceMetadataAPIRequest) returns (ResourceMetadataAPIResponse) {
+        option (google.api.http) = {
+           post: "/v1.0/api/metadata/resource"
+        };
+    }
+
+    rpc getResource (ResourceMetadataAPIRequest) returns (Resource) {
+        option (google.api.http) = {
+           get: "/v1.0/api/metadata/resource"
+        };
+    }
+
+    rpc updateResource (ResourceMetadataAPIRequest) returns (ResourceMetadataAPIResponse) {
+        option (google.api.http) = {
+           put: "/v1.0/api/metadata/resource"
+        };
+    }
+
+    rpc deleteResource (ResourceMetadataAPIRequest) returns (ResourceMetadataAPIResponse) {
+        option (google.api.http) = {
+           delete: "/v1.0/api/metadata/resource"
+        };
+    }
+
+    rpc shareResource (ResourceMetadataSharingRequest) returns (ResourceMetadataAPIResponse) {
+        option (google.api.http) = {
+           post: "/v1.0/api/metadata/resource/sharings"
+        };
+    }
+
+    rpc deleteSharing (ResourceMetadataSharingRequest) returns (ResourceMetadataAPIResponse) {
+        option (google.api.http) = {
+           delete: "/v1.0/api/metadata/resource/sharings"
+        };
+    }
+
+}
\ No newline at end of file
diff --git a/metadata-service/db-service/stub/src/main/proto/tenant/Tenant.proto b/metadata-service/db-service/stub/src/main/proto/tenant/Tenant.proto
new file mode 100644
index 0000000..d0063ea
--- /dev/null
+++ b/metadata-service/db-service/stub/src/main/proto/tenant/Tenant.proto
@@ -0,0 +1,67 @@
+syntax = "proto3";
+
+option java_multiple_files = true;
+package org.apache.airavata.datalake.metadata.service;
+
+import "google/api/annotations.proto";
+import "common/Common.proto";
+import "group/Group.proto";
+import "resource/Resource.proto";
+import "user/User.proto";
+
+
+message TenantMetadataAPIRequest {
+    Tenant tenant = 1;
+    MetadataServiceAuthToken auth_token = 2;
+    string source = 3;
+}
+
+message TenantMetadataAPIResponse {
+    bool status = 1;
+}
+
+
+message Tenant {
+    string tenant_id = 1;
+    string domain = 2;
+    string name = 3;
+    string requester_email = 4;
+    string scope = 5;
+    repeated string redirect_uris = 6;
+    map<string, string> properties = 7;
+    repeated Group groups = 8;
+    int64 created_at = 9;
+    int64 last_modified_at = 10;
+    repeated User users = 11;
+    repeated Resource resources = 12;
+
+}
+
+
+service TenantMetadataService {
+
+    rpc createTenant (TenantMetadataAPIRequest) returns (TenantMetadataAPIResponse) {
+        option (google.api.http) = {
+           post: "/v1.0/api/metadata/tenant"
+        };
+    }
+
+    rpc getTenant (TenantMetadataAPIRequest) returns (Tenant) {
+        option (google.api.http) = {
+           get: "/v1.0/api/metadata/tenant"
+        };
+    }
+
+    rpc updateTenant (TenantMetadataAPIRequest) returns (TenantMetadataAPIResponse) {
+        option (google.api.http) = {
+           put: "/v1.0/api/metadata/tenant"
+        };
+    }
+
+    rpc deleteTenant (TenantMetadataAPIRequest) returns (TenantMetadataAPIResponse) {
+        option (google.api.http) = {
+           delete: "/v1.0/api/metadata/tenant"
+        };
+    }
+
+}
\ No newline at end of file
diff --git a/metadata-service/db-service/stub/src/main/proto/user/User.proto b/metadata-service/db-service/stub/src/main/proto/user/User.proto
new file mode 100644
index 0000000..d079770
--- /dev/null
+++ b/metadata-service/db-service/stub/src/main/proto/user/User.proto
@@ -0,0 +1,66 @@
+syntax = "proto3";
+
+option java_multiple_files = true;
+package org.apache.airavata.datalake.metadata.service;
+
+import "google/api/annotations.proto";
+import "common/Common.proto";
+
+message UserMetadataAPIRequest {
+    User user = 1;
+    MetadataServiceAuthToken auth_token = 2;
+    string source = 3;
+}
+
+
+
+
+
+message UserMetadataAPIResponse {
+    bool status = 1;
+}
+
+message User {
+    string tenant_id = 1;
+    string username = 2;
+    string first_name = 3;
+    string last_name = 4;
+    string email_address = 5;
+    string status = 6;
+    map<string, string> properties = 7;
+    int64 created_at = 8;
+    int64 last_modified_at = 9;
+
+}
+
+
+
+service UserMetadataService {
+
+    rpc createUser (UserMetadataAPIRequest) returns (UserMetadataAPIResponse) {
+        option (google.api.http) = {
+           post: "/v1.0/api/metadata/user"
+        };
+    }
+
+    rpc getUser (UserMetadataAPIRequest) returns (User) {
+        option (google.api.http) = {
+           get: "/v1.0/api/metadata/user"
+        };
+    }
+
+    rpc updateUser (UserMetadataAPIRequest) returns (UserMetadataAPIResponse) {
+        option (google.api.http) = {
+           put: "/v1.0/api/metadata/user"
+        };
+    }
+
+    rpc deleteUser (UserMetadataAPIRequest) returns (UserMetadataAPIResponse) {
+        option (google.api.http) = {
+           delete: "/v1.0/api/metadata/user"
+        };
+    }
+
+
+
+}
\ No newline at end of file
diff --git a/metadata-service/db-service/stub/stub.iml b/metadata-service/db-service/stub/stub.iml
new file mode 100644
index 0000000..c833fd5
--- /dev/null
+++ b/metadata-service/db-service/stub/stub.iml
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
+  <component name="FacetManager">
+    <facet type="web" name="Web">
+      <configuration>
+        <webroots />
+        <sourceRoots>
+          <root url="file://$MODULE_DIR$/src/main/resources" />
+          <root url="file://$MODULE_DIR$/target/generated-sources/protobuf/grpc-java" />
+          <root url="file://$MODULE_DIR$/target/generated-sources/protobuf/java" />
+        </sourceRoots>
+      </configuration>
+    </facet>
+    <facet type="Spring" name="Spring">
+      <configuration />
+    </facet>
+  </component>
+  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_11">
+    <output url="file://$MODULE_DIR$/target/classes" />
+    <output-test url="file://$MODULE_DIR$/target/test-classes" />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/target/generated-sources/protobuf/grpc-java" isTestSource="false" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/target/generated-sources/protobuf/java" isTestSource="false" generated="true" />
+      <excludeFolder url="file://$MODULE_DIR$/target" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="library" name="Bundled Protobuf Distribution" level="application" />
+    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java:3.10.0" level="project" />
+    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-core:3.2.20" level="project" />
+    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-api:3.2.20" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.9" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.0" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.9.9" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.9" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.9" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.8" level="project" />
+    <orderEntry type="library" name="Maven: io.github.classgraph:classgraph:4.8.86" level="project" />
+    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-bolt-driver:3.2.20" level="project" />
+    <orderEntry type="library" name="Maven: org.neo4j.driver:neo4j-java-driver:4.0.2" level="project" />
+    <orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.3" level="project" />
+    <orderEntry type="library" name="Maven: io.github.lognet:grpc-spring-boot-starter:3.5.1" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-netty:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-core:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-api:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-context:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: com.google.errorprone:error_prone_annotations:2.3.3" level="project" />
+    <orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:3.0.2" level="project" />
+    <orderEntry type="library" name="Maven: org.codehaus.mojo:animal-sniffer-annotations:1.17" level="project" />
+    <orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.5" level="project" />
+    <orderEntry type="library" name="Maven: com.google.android:annotations:4.1.1.4" level="project" />
+    <orderEntry type="library" name="Maven: io.perfmark:perfmark-api:0.19.0" level="project" />
+    <orderEntry type="library" name="Maven: io.opencensus:opencensus-api:0.21.0" level="project" />
+    <orderEntry type="library" name="Maven: io.opencensus:opencensus-contrib-grpc-metrics:0.21.0" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec-http2:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec-http:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-handler-proxy:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec-socks:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-services:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: com.google.guava:guava:28.1-android" level="project" />
+    <orderEntry type="library" name="Maven: com.google.guava:failureaccess:1.0.1" level="project" />
+    <orderEntry type="library" name="Maven: com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava" level="project" />
+    <orderEntry type="library" name="Maven: org.checkerframework:checker-compat-qual:2.5.5" level="project" />
+    <orderEntry type="library" name="Maven: com.google.j2objc:j2objc-annotations:1.3" level="project" />
+    <orderEntry type="library" name="Maven: com.google.api.grpc:proto-google-common-protos:1.12.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf-lite:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-stub:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java-util:3.10.0" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-tcnative-boringssl-static:2.0.25.Final" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" />
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.13.3" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.13.3" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.30" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.27" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.11.4" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.41" level="project" />
+    <orderEntry type="library" name="Maven: org.glassfish:jakarta.el:3.0.3" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.41" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-web:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-context:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: net.sf.dozer:dozer:5.5.1" level="project" />
+    <orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.9.1" level="project" />
+    <orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.1" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.5" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:jcl-over-slf4j:1.7.5" level="project" />
+  </component>
+</module>
\ No newline at end of file
diff --git a/metadata-service/metadata-service.iml b/metadata-service/metadata-service.iml
index 5fa3710..00d19bb 100644
--- a/metadata-service/metadata-service.iml
+++ b/metadata-service/metadata-service.iml
@@ -10,5 +10,795 @@
     </content>
     <orderEntry type="inheritedJdk" />
     <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/github/lognet/grpc-spring-boot-starter/3.5.1/grpc-spring-boot-starter-3.5.1.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/grpc/grpc-netty/1.25.0/grpc-netty-1.25.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/grpc/grpc-core/1.25.0/grpc-core-1.25.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/grpc/grpc-api/1.25.0/grpc-api-1.25.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/grpc/grpc-context/1.25.0/grpc-context-1.25.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/google/errorprone/error_prone_annotations/2.3.3/error_prone_annotations-2.3.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/google/guava/guava/28.1-android/guava-28.1-android.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/checkerframework/checker-compat-qual/2.5.5/checker-compat-qual-2.5.5.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/google/code/gson/gson/2.8.5/gson-2.8.5.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/perfmark/perfmark-api/0.19.0/perfmark-api-0.19.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/opencensus/opencensus-api/0.21.0/opencensus-api-0.21.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/opencensus/opencensus-contrib-grpc-metrics/0.21.0/opencensus-contrib-grpc-metrics-0.21.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/netty/netty-codec-http2/4.1.42.Final/netty-codec-http2-4.1.42.Final.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/netty/netty-common/4.1.42.Final/netty-common-4.1.42.Final.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/netty/netty-buffer/4.1.42.Final/netty-buffer-4.1.42.Final.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/netty/netty-transport/4.1.42.Final/netty-transport-4.1.42.Final.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/netty/netty-resolver/4.1.42.Final/netty-resolver-4.1.42.Final.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/netty/netty-codec/4.1.42.Final/netty-codec-4.1.42.Final.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/netty/netty-handler/4.1.42.Final/netty-handler-4.1.42.Final.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/netty/netty-codec-http/4.1.42.Final/netty-codec-http-4.1.42.Final.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/netty/netty-handler-proxy/4.1.42.Final/netty-handler-proxy-4.1.42.Final.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/netty/netty-codec-socks/4.1.42.Final/netty-codec-socks-4.1.42.Final.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/grpc/grpc-services/1.25.0/grpc-services-1.25.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/grpc/grpc-protobuf/1.25.0/grpc-protobuf-1.25.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/google/protobuf/protobuf-java/3.10.0/protobuf-java-3.10.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/google/api/grpc/proto-google-common-protos/1.12.0/proto-google-common-protos-1.12.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/grpc/grpc-protobuf-lite/1.25.0/grpc-protobuf-lite-1.25.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/grpc/grpc-stub/1.25.0/grpc-stub-1.25.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/google/protobuf/protobuf-java-util/3.10.0/protobuf-java-util-3.10.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/netty/netty-tcnative-boringssl-static/2.0.25.Final/netty-tcnative-boringssl-static-2.0.25.Final.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/neo4j/neo4j-ogm-bolt-driver/3.2.20/neo4j-ogm-bolt-driver-3.2.20.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/neo4j/neo4j-ogm-api/3.2.20/neo4j-ogm-api-3.2.20.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/core/jackson-databind/2.9.9/jackson-databind-2.9.9.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/core/jackson-annotations/2.9.0/jackson-annotations-2.9.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/core/jackson-core/2.9.9/jackson-core-2.9.9.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.9.9/jackson-datatype-jdk8-2.9.9.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.9.9/jackson-datatype-jsr310-2.9.9.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/slf4j/slf4j-api/1.7.5/slf4j-api-1.7.5.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/neo4j/driver/neo4j-java-driver/4.0.2/neo4j-java-driver-4.0.2.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/reactivestreams/reactive-streams/1.0.3/reactive-streams-1.0.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/neo4j/neo4j-ogm-core/3.2.20/neo4j-ogm-core-3.2.20.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/apache/commons/commons-lang3/3.8/commons-lang3-3.8.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/io/github/classgraph/classgraph/4.8.86/classgraph-4.8.86.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/net/sf/dozer/dozer/5.5.1/dozer-5.5.1.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/commons-beanutils/commons-beanutils/1.9.1/commons-beanutils-1.9.1.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/slf4j/jcl-over-slf4j/1.7.5/jcl-over-slf4j-1.7.5.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-starter-web/2.4.2/spring-boot-starter-web-2.4.2.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-starter/2.4.2/spring-boot-starter-2.4.2.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot/2.4.2/spring-boot-2.4.2.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-core/5.3.3/spring-core-5.3.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-jcl/5.3.3/spring-jcl-5.3.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-context/5.3.3/spring-context-5.3.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-aop/5.3.3/spring-aop-5.3.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-beans/5.3.3/spring-beans-5.3.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-expression/5.3.3/spring-expression-5.3.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-autoconfigure/2.4.2/spring-boot-autoconfigure-2.4.2.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-starter-logging/2.4.2/spring-boot-starter-logging-2.4.2.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/apache/logging/log4j/log4j-to-slf4j/2.13.3/log4j-to-slf4j-2.13.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/apache/logging/log4j/log4j-api/2.13.3/log4j-api-2.13.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/slf4j/jul-to-slf4j/1.7.30/jul-to-slf4j-1.7.30.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/yaml/snakeyaml/1.27/snakeyaml-1.27.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-starter-json/2.4.2/spring-boot-starter-json-2.4.2.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-web/5.3.3/spring-web-5.3.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/module/jackson-module-parameter-names/2.11.4/jackson-module-parameter-names-2.11.4.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-starter-tomcat/2.4.2/spring-boot-starter-tomcat-2.4.2.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/apache/tomcat/embed/tomcat-embed-core/9.0.41/tomcat-embed-core-9.0.41.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/glassfish/jakarta.el/3.0.3/jakarta.el-3.0.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/apache/tomcat/embed/tomcat-embed-websocket/9.0.41/tomcat-embed-websocket-9.0.41.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$USER_HOME$/.m12/org/springframework/spring-webmvc/5.3.3/spring-webmvc-5.3.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-core:3.2.20" level="project" />
+    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-api:3.2.20" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.9" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.0" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.9.9" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.9" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.9" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.8" level="project" />
+    <orderEntry type="library" name="Maven: io.github.classgraph:classgraph:4.8.86" level="project" />
+    <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-bolt-driver:3.2.20" level="project" />
+    <orderEntry type="library" name="Maven: org.neo4j.driver:neo4j-java-driver:4.0.2" level="project" />
+    <orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.3" level="project" />
+    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java:3.10.0" level="project" />
+    <orderEntry type="library" name="Maven: io.github.lognet:grpc-spring-boot-starter:3.5.1" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-netty:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-core:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-api:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-context:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: com.google.errorprone:error_prone_annotations:2.3.3" level="project" />
+    <orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:3.0.2" level="project" />
+    <orderEntry type="library" name="Maven: org.codehaus.mojo:animal-sniffer-annotations:1.17" level="project" />
+    <orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.5" level="project" />
+    <orderEntry type="library" name="Maven: com.google.android:annotations:4.1.1.4" level="project" />
+    <orderEntry type="library" name="Maven: io.perfmark:perfmark-api:0.19.0" level="project" />
+    <orderEntry type="library" name="Maven: io.opencensus:opencensus-api:0.21.0" level="project" />
+    <orderEntry type="library" name="Maven: io.opencensus:opencensus-contrib-grpc-metrics:0.21.0" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec-http2:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec-http:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-handler-proxy:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec-socks:4.1.42.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-services:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: com.google.guava:guava:28.1-android" level="project" />
+    <orderEntry type="library" name="Maven: com.google.guava:failureaccess:1.0.1" level="project" />
+    <orderEntry type="library" name="Maven: com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava" level="project" />
+    <orderEntry type="library" name="Maven: org.checkerframework:checker-compat-qual:2.5.5" level="project" />
+    <orderEntry type="library" name="Maven: com.google.j2objc:j2objc-annotations:1.3" level="project" />
+    <orderEntry type="library" name="Maven: com.google.api.grpc:proto-google-common-protos:1.12.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-protobuf-lite:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: io.grpc:grpc-stub:1.25.0" level="project" />
+    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java-util:3.10.0" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-tcnative-boringssl-static:2.0.25.Final" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" />
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.13.3" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.13.3" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.30" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.27" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.11.4" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.41" level="project" />
+    <orderEntry type="library" name="Maven: org.glassfish:jakarta.el:3.0.3" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.41" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-web:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-context:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.3.3" level="project" />
+    <orderEntry type="library" name="Maven: net.sf.dozer:dozer:5.5.1" level="project" />
+    <orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.9.1" level="project" />
+    <orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.1" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.5" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:jcl-over-slf4j:1.7.5" level="project" />
   </component>
 </module>
\ No newline at end of file
diff --git a/metadata-service/pom.xml b/metadata-service/pom.xml
index 7125b8a..e1199c8 100644
--- a/metadata-service/pom.xml
+++ b/metadata-service/pom.xml
@@ -11,120 +11,59 @@
 
     <artifactId>metadata-service</artifactId>
     <packaging>pom</packaging>
-    <modules>
-        <module>db-service</module>
-    </modules>
+
+
+    <dependencies>
+
+        <dependency>
+            <groupId>org.neo4j</groupId>
+            <artifactId>neo4j-ogm-core</artifactId>
+            <version>3.2.20</version>
+        </dependency>
+        <dependency>
+            <groupId>org.neo4j</groupId>
+            <artifactId>neo4j-ogm-bolt-driver</artifactId>
+            <version>3.2.20</version>
+        </dependency>
+        <dependency>
+            <groupId>com.google.protobuf</groupId>
+            <artifactId>protobuf-java</artifactId>
+            <version>${protobuf.java}</version>
+        </dependency>
+        <dependency>
+            <groupId>io.github.lognet</groupId>
+            <artifactId>grpc-spring-boot-starter</artifactId>
+            <version>${grpc.spring.boot}</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.springframework.boot</groupId>
+                    <artifactId>spring-boot-starter</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+            <version>2.4.2</version>
+        </dependency>
+        <dependency>
+            <groupId>net.sf.dozer</groupId>
+            <artifactId>dozer</artifactId>
+            <version>${dozer}</version>
+        </dependency>
+    </dependencies>
+
 
     <properties>
+        <protobuf.maven.plugin>0.5.1</protobuf.maven.plugin>
+        <os.maven.plugin>1.5.0.Final</os.maven.plugin>
         <maven.compiler.source>11</maven.compiler.source>
         <maven.compiler.target>11</maven.compiler.target>
+        <protobuf.java>3.10.0</protobuf.java>
+        <grpc.spring.boot>3.5.1</grpc.spring.boot>
+        <spring.boot.data.jpa>2.2.1.RELEASE</spring.boot.data.jpa>
+        <dozer>5.5.1</dozer>
     </properties>
-    <dependencyManagement>
-        <dependencies>
-            <!-- neo4J servide dependencies-->
-<!--            <dependency>-->
-<!--                <groupId>org.springframework.boot</groupId>-->
-<!--                <artifactId>spring-boot-starter-parent</artifactId>-->
-<!--                <version>${spring.boot.version}</version>-->
-<!--                <type>pom</type>-->
-<!--                <scope>import</scope>-->
-<!--            </dependency>-->
-<!--            <dependency>-->
-<!--                <groupId>org.springframework.cloud</groupId>-->
-<!--                <artifactId>spring-cloud-dependencies</artifactId>-->
-<!--                <version>${spring.cloud.version}</version>-->
-<!--                <type>pom</type>-->
-<!--                <scope>import</scope>-->
-<!--            </dependency>-->
-<!--            <dependency>-->
-<!--                <groupId>io.github.lognet</groupId>-->
-<!--                <artifactId>grpc-spring-boot-starter</artifactId>-->
-<!--                <version>${grpc.spring.boot.version}</version>-->
-<!--                <exclusions>-->
-<!--                    <exclusion>-->
-<!--                        <groupId>io.grpc</groupId>-->
-<!--                        <artifactId>grpc-netty</artifactId>-->
-<!--                    </exclusion>-->
-<!--                    <exclusion>-->
-<!--                        <groupId>org.springframework.boot</groupId>-->
-<!--                        <artifactId>spring-boot-starter</artifactId>-->
-<!--                    </exclusion>-->
-<!--                </exclusions>-->
-<!--            </dependency>-->
-<!--            <dependency>-->
-<!--                <groupId>io.grpc</groupId>-->
-<!--                <artifactId>grpc-stub</artifactId>-->
-<!--                <version>${io.grpc.version}</version>-->
-<!--            </dependency>-->
-<!--            <dependency>-->
-<!--                <groupId>io.grpc</groupId>-->
-<!--                <artifactId>grpc-protobuf</artifactId>-->
-<!--                <version>${io.grpc.version}</version>-->
-<!--            </dependency>-->
-<!--            <dependency>-->
-<!--                <groupId>io.grpc</groupId>-->
-<!--                <artifactId>grpc-netty</artifactId>-->
-<!--                <version>${io.grpc.version}</version>-->
-<!--            </dependency>-->
-<!--            <dependency>-->
-<!--                <groupId>javax.annotation</groupId>-->
-<!--                <artifactId>javax.annotation-api</artifactId>-->
-<!--                <version>${javax.annotation.version}</version>-->
-<!--            </dependency>-->
-<!--            <dependency>-->
-<!--                <groupId>org.springframework.cloud</groupId>-->
-<!--                <artifactId>spring-cloud-starter-sleuth</artifactId>-->
-<!--                <version>${spring.cloud.slueth.version}</version>-->
-<!--            </dependency>-->
-<!--            <dependency>-->
-<!--                <groupId>org.springframework.cloud</groupId>-->
-<!--                <artifactId>spring-cloud-sleuth-zipkin</artifactId>-->
-<!--                <version>${spring.cloud.slueth.version}</version>-->
-<!--            </dependency>-->
-<!--            <dependency>-->
-<!--                <groupId>org.springframework.cloud</groupId>-->
-<!--                <artifactId>spring-cloud-starter-vault-config</artifactId>-->
-<!--                <version>${spring.boot.version}</version>-->
-<!--            </dependency>-->
-            <!--        <dependency>-->
-            <!--            <groupId>org.springframework.data</groupId>-->
-            <!--            <artifactId>spring-data-neo4j</artifactId>-->
-            <!--            <version>${spring.data.neo4j.version}</version>-->
-            <!--        </dependency>-->
-            <dependency>
-                <groupId>org.springframework.boot</groupId>
-                <artifactId>spring-boot-starter-web</artifactId>
-                <version>2.4.2</version>
-            </dependency>
-<!--            <dependency>-->
-<!--                <groupId>org.springframework.data</groupId>-->
-<!--                <artifactId>spring-data-neo4j</artifactId>-->
-<!--                <version>5.2.0</version>-->
-<!--            </dependency>-->
-<!--            &lt;!&ndash; https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-neo4j &ndash;&gt;-->
-<!--            <dependency>-->
-<!--                <groupId>org.springframework.boot</groupId>-->
-<!--                <artifactId>spring-boot-starter-data-neo4j</artifactId>-->
-<!--                <version>2.4.2</version>-->
-<!--            </dependency>-->
-                    <dependency>
-                        <groupId>org.neo4j</groupId>
-                        <artifactId>neo4j-ogm-core</artifactId>
-                        <version>3.2.20</version>
-                    </dependency>
-            <dependency>
-                <groupId>org.neo4j</groupId>
-                <artifactId>neo4j-ogm-bolt-driver</artifactId>
-                <version>3.2.20</version>
-            </dependency>
-<!--            <dependency>-->
-<!--                <groupId>org.springframework.data</groupId>-->
-<!--                <artifactId>spring-data-commons</artifactId>-->
-<!--                <version>2.4.2</version>-->
-<!--            </dependency>-->
-
-        </dependencies>
-    </dependencyManagement>
 
 
 </project>
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index c0bb353..f80038e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -31,6 +31,9 @@
     <modules>
         <module>data-orchestrator</module>
         <module>metadata-service</module>
+        <module>metadata-service/db-service/server</module>
+        <module>metadata-service/db-service/stub</module>
+        <module>metadata-service/db-service/client</module>
     </modules>
 
     <parent>