You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@rocketmq.apache.org by du...@apache.org on 2022/07/31 06:47:16 UTC

[rocketmq-schema-registry] 29/34: simplify-register-update-api

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

duhengforever pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/rocketmq-schema-registry.git

commit 2d6c32ae1b73050a0492b70fe7e85f64c3fd9395
Author: wangfan <18...@qq.com>
AuthorDate: Sat Jul 30 19:29:58 2022 +0800

    simplify-register-update-api
---
 .gitignore                                         |  1 +
 README.md                                          | 40 ++++-----
 common/pom.xml                                     |  2 +-
 .../schema/registry/common/dto/BaseDto.java        | 29 +------
 .../RegisterSchemaRequest.java}                    | 32 +++++---
 .../RegisterSchemaResponse.java}                   | 20 +++--
 .../UpdateSchemaRequest.java}                      | 23 +++---
 .../UpdateSchemaResponse.java}                     | 20 +++--
 .../registry/common/json/JsonConverterImpl.java    |  3 +-
 .../schema/registry/common/model/AuditInfo.java    | 12 +++
 .../registry/common/model/SchemaDetailInfo.java    |  7 +-
 .../schema/registry/common/model/SchemaInfo.java   | 21 ++++-
 .../registry/common/model/SchemaRecordInfo.java    |  7 +-
 .../registry/common/model/SchemaStorageInfo.java   |  1 -
 core/pom.xml                                       | 16 ++--
 .../registry/core/api/v1/SchemaController.java     | 29 ++++---
 .../registry/core/dependency/DependencyHelper.java |  8 ++
 .../registry/core/service/SchemaService.java       | 11 +--
 .../registry/core/service/SchemaServiceImpl.java   | 94 ++++++++++++----------
 core/src/main/resources/application.properties     |  2 +-
 pom.xml                                            |  2 +-
 storage-rocketmq/pom.xml                           |  2 +-
 .../registry/storage/rocketmq/RocketmqClient.java  |  2 +
 .../rocketmq/configs/RocketmqConfigConstants.java  |  2 +-
 .../src/main/resources/rocketmq.properties         |  2 +-
 war/pom.xml                                        |  2 +-
 26 files changed, 213 insertions(+), 177 deletions(-)

diff --git a/.gitignore b/.gitignore
index fc92691..1d712aa 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,6 +6,7 @@ target/
 log/
 log/*
 tools/
+schema-registry/
 
 ### STS ###
 .apt_generated
diff --git a/README.md b/README.md
index a8a515f..6a08db8 100644
--- a/README.md
+++ b/README.md
@@ -16,9 +16,9 @@ Getting started
 #### Installation
 
 ```shell
-git clone git@github.com:apache/rocketmq-schema-registry.git
-cd rocketmq-schema-registry
-./mvnw clean package
+$ git clone git@github.com:apache/rocketmq-schema-registry.git
+$ cd rocketmq-schema-registry
+$ mvn clean package
 ```
 
 #### Prepare storage layer
@@ -41,18 +41,18 @@ $ nohup sh mqnamesrv &
 $ nohup sh bin/mqbroker -n localhost:9876 &
 ```
 
-#### Edit configuration
+#### Edit configuration (Optional)
 
 * Config storage local cache path
 ```shell
-$ storage.local.cache.path="" >> schema-storage-rocketmq/src/main/resources
+$ echo "storage.local.cache.path=${user.dir}" >> storage-rocketmq/src/main/resources/rocketmq.properties
 ```
 
 #### Deployment & Running locally
 
-Take the build JAR in target/build/schema-register.jar and run `java -cp schema-register.jar` to start service.
+Take the build JAR in core/target/ and run `java -jar rocketmq-schema-registry-core-0.0.3-SNAPSHOT.jar` to start service.
 
-The REST API can be accessed from http://localhost:8080/schema-registry/v1
+Then REST API can be accessed from http://localhost:8080/schema-registry/v1
 
 Swagger API documentation can be accessed from http://localhost:8080/swagger-ui/index.html
 
@@ -80,31 +80,31 @@ API Reference
 ```shell
 
 # Register new schema on specified subject with default cluster and tenant
-$ curl -X post -H "Content-Type: application/json" \
---data '{"details":{"schemaRecords":[{"idl":"{\"type\":\"record\",\"name\":\"Demo\",\"namespace\":\"com.schema.example\",\"fields\":[{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"id\",\"type\":\"int\"}]}"}]}, "meta":{"compatibility":"BACKWARD","namespace":"com.schema.example","owner":"test","schemaName":"Demo","tenant":"default","type":"AVRO"}}' \
-http://localhost:8080/schema-registry/v1/subject/{subject-name}/schema/{schema-name}
+$ curl -X POST -H "Content-Type: application/json" \
+-d '{"schemaIdl":"{\"type\":\"record\",\"name\":\"SchemaName\",\"namespace\":\"rocketmq.schema.example\",\"fields\":[{\"name\":\"name\",\"type\":\"string\"}]}"}' \
+http://localhost:8080/schema-registry/v1/subject/RMQTopic/schema/SchemaName
 
 # Register new schema with cluster specified cluster and tenant
-$ curl -X post -H "Content-Type: application/json" \
---data '{"details":{"schemaRecords":[{"idl":"{\"type\":\"record\",\"name\":\"Demo\",\"namespace\":\"com.schema.example\",\"fields\":[{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"id\",\"type\":\"int\"}]}"}]}, "meta":{"compatibility":"BACKWARD","namespace":"com.schema.example","owner":"test","schemaName":"Demo","tenant":"default","type":"AVRO"}}' \
-http://localhost:8080/schema-registry/v1/cluster/{cluster-name}/tenant/{tenant-name}/subject/{subject-name}/schema/{schema-name}
+$ curl -X POST -H "Content-Type: application/json" \
+-d '{"schema": "{\"type\": \"string\"}"}' \
+http://localhost:8080/schema-registry/v1/cluster/default/tenant/default/subject/RMQTopic2/schema/Text
 
 # Delete schema all version
-$ curl -X delete http://localhost:8080/schema-registry/v1/cluster/{cluster-name}/tenant/{tenant-name}/subject/{subject-name}/schema
+$ curl -X DELETE http://localhost:8080/schema-registry/v1/cluster/{cluster-name}/tenant/{tenant-name}/subject/{subject-name}/schema
 
 # Update schema and generate a new version, you can also use default cluster and tenant like register interface
-$ curl -X put -H "Content-Type: application/json" \
---data '{"details":{"schemaRecords":[{"idl":"{\"type\":\"record\",\"name\":\"Demo\",\"namespace\":\"com.schema.example\",\"fields\":[{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"type\",\"type\":\"string\"}]}"}]}, "meta":{"compatibility":"BACKWARD","namespace":"com.schema.example","owner":"test","schemaName":"Demo","tenant":"default","type":"AVRO"}}' \
-http://localhost:8080/schema-registry/v1/cluster/{cluster-name}/tenant/{tenant-name}/subject/{subject-name}/schema/{schema-name}
+$ curl -X PUT -H "Content-Type: application/json" \
+-d '{"schemaIdl":"{\"type\":\"record\",\"name\":\"SchemaName\",\"namespace\":\"rocketmq.schema.example\",\"fields\":[{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"id\",\"type\":\"string\",\"default\":\"0\"}]}"}' \
+http://localhost:8080/schema-registry/v1/subject/RMQTopic/schema/SchemaName
 
 # Get binding schema version by subject with specified cluster and tenant, , you can also use default cluster and tenant like register interface
-$ curl -X GET http://localhost:8081/schema-registry/v1/cluster/{cluster-name}/tenant/{tenant-name}/subject/{subject-name}/schema
+$ curl -X GET http://localhost:8080/schema-registry/v1/subject/RMQTopic/schema
 
 # Get schema record by specified version
-$ curl -X GET http://localhost:8081/schema-registry/v1/cluster/{cluster-name}/tenant/{tenant-name}/subject/{subject-name}/schema/versions/{version}
+$ curl -X GET http://localhost:8080/schema-registry/v1/cluster/{cluster-name}/tenant/{tenant-name}/subject/{subject-name}/schema/versions/{version}
 
 # Get all schema record
-$ curl -X GET http://localhost:8081/schema-registry/v1/cluster/{cluster-name}/tenant/{tenant-name}/subject/{subject-name}/schema/versions
+$ curl -X GET http://localhost:8080/schema-registry/v1/cluster/{cluster-name}/tenant/{tenant-name}/subject/{subject-name}/schema/versions
 ```
 
 Contribute
diff --git a/common/pom.xml b/common/pom.xml
index 5e8883a..7bcfc08 100644
--- a/common/pom.xml
+++ b/common/pom.xml
@@ -22,7 +22,7 @@
     <parent>
         <artifactId>rocketmq-schema-registry-all</artifactId>
         <groupId>org.apache.rocketmq</groupId>
-        <version>0.0.2-SNAPSHOT</version>
+        <version>0.0.3-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/common/src/main/java/org/apache/rocketmq/schema/registry/common/dto/BaseDto.java b/common/src/main/java/org/apache/rocketmq/schema/registry/common/dto/BaseDto.java
index e7445ac..0e11939 100644
--- a/common/src/main/java/org/apache/rocketmq/schema/registry/common/dto/BaseDto.java
+++ b/common/src/main/java/org/apache/rocketmq/schema/registry/common/dto/BaseDto.java
@@ -38,32 +38,5 @@ public abstract class BaseDto implements Serializable {
     public String toString() {
         return JSON_CONVERTER.toString(this);
     }
-//
-//    /**
-//     * Deserialize data from the input stream.
-//     *
-//     * @param inputStream input stream
-//     * @return Json ObjectNode
-//     * @throws IOException exception deserializing the stream
-//     */
-//    @Nullable
-//    public static ObjectNode deserializeObjectNode(
-//        @Nonnull @NonNull final ObjectInputStream inputStream
-//    ) throws IOException {
-//        return JSON_CONVERTER.deserializeObjectNode(inputStream);
-//    }
-//
-//    /**
-//     * Serialize data in the output stream.
-//     *
-//     * @param outputStream output stream
-//     * @param jsonObject         jsonObject
-//     * @throws IOException exception serializing the json
-//     */
-//    public static void serializeObjectNode(
-//        @Nonnull @NonNull final ObjectOutputStream outputStream,
-//        @Nullable final ObjectNode jsonObject
-//    ) throws IOException {
-//        JSON_CONVERTER.serializeObjectNode(outputStream, jsonObject);
-//    }
+
 }
diff --git a/common/src/main/java/org/apache/rocketmq/schema/registry/common/model/SchemaStorageInfo.java b/common/src/main/java/org/apache/rocketmq/schema/registry/common/dto/RegisterSchemaRequest.java
similarity index 55%
copy from common/src/main/java/org/apache/rocketmq/schema/registry/common/model/SchemaStorageInfo.java
copy to common/src/main/java/org/apache/rocketmq/schema/registry/common/dto/RegisterSchemaRequest.java
index 491924e..6e1e514 100644
--- a/common/src/main/java/org/apache/rocketmq/schema/registry/common/model/SchemaStorageInfo.java
+++ b/common/src/main/java/org/apache/rocketmq/schema/registry/common/dto/RegisterSchemaRequest.java
@@ -15,28 +15,38 @@
  * limitations under the License.
  */
 
-package org.apache.rocketmq.schema.registry.common.model;
+package org.apache.rocketmq.schema.registry.common.dto;
 
 import io.swagger.annotations.ApiModelProperty;
-import java.io.Serializable;
-import java.util.Map;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.NoArgsConstructor;
+import org.apache.rocketmq.schema.registry.common.model.Compatibility;
+import org.apache.rocketmq.schema.registry.common.model.SchemaType;
 
 @Data
 @EqualsAndHashCode(callSuper = false)
 @Builder
 @NoArgsConstructor
 @AllArgsConstructor
-public class SchemaStorageInfo implements Serializable {
-    private static final long serialVersionUID = -6655281552098217740L;
-
-    private String serdeProtocol;
-    // TODO  delete?
-    private String serializationLib;
-    private Map<String, String> serdeInfo;
-    private String uri;
+public class RegisterSchemaRequest extends BaseDto {
+    private static final long serialVersionUID = 7890248374919863930L;
+
+    @ApiModelProperty(value = "First IDL of this schema", example = "{\"type\": \"string\"}", required = true)
+    private String schemaIdl;
+
+    @ApiModelProperty(value = "Schema type")
+    private SchemaType schemaType = SchemaType.AVRO;
+
+    @ApiModelProperty(value = "Schema owner", example = "li")
+    private String owner = "";
+
+    @ApiModelProperty(value = "Schema compatibility")
+    private Compatibility compatibility = Compatibility.BACKWARD;
+
+    @ApiModelProperty(value = "Schema description", example = "my first schema")
+    private String desc = "";
+
 }
diff --git a/common/src/main/java/org/apache/rocketmq/schema/registry/common/model/AuditInfo.java b/common/src/main/java/org/apache/rocketmq/schema/registry/common/dto/RegisterSchemaResponse.java
similarity index 73%
copy from common/src/main/java/org/apache/rocketmq/schema/registry/common/model/AuditInfo.java
copy to common/src/main/java/org/apache/rocketmq/schema/registry/common/dto/RegisterSchemaResponse.java
index 66cbd5e..5e82c10 100644
--- a/common/src/main/java/org/apache/rocketmq/schema/registry/common/model/AuditInfo.java
+++ b/common/src/main/java/org/apache/rocketmq/schema/registry/common/dto/RegisterSchemaResponse.java
@@ -15,11 +15,9 @@
  * limitations under the License.
  */
 
-package org.apache.rocketmq.schema.registry.common.model;
+package org.apache.rocketmq.schema.registry.common.dto;
 
 import io.swagger.annotations.ApiModelProperty;
-import java.io.Serializable;
-import java.util.Date;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
@@ -29,14 +27,14 @@ import lombok.NoArgsConstructor;
 @Data
 @EqualsAndHashCode(callSuper = false)
 @Builder
-@AllArgsConstructor
 @NoArgsConstructor
-public class AuditInfo implements Serializable {
-    private static final long serialVersionUID = 2258089775496856662L;
+@AllArgsConstructor
+public class RegisterSchemaResponse extends BaseDto {
+    private static final long serialVersionUID = 5961720146684473323L;
+
+    @ApiModelProperty(value = "Schema unique id", required = true)
+    private long schemaId;
 
-    private String desc;
-    private String createdBy;
-    private Date createdTime;
-    private String lastModifiedBy;
-    private Date lastModifiedTime;
+    @ApiModelProperty(value = "Version of this schema record")
+    private long version;
 }
diff --git a/common/src/main/java/org/apache/rocketmq/schema/registry/common/model/SchemaStorageInfo.java b/common/src/main/java/org/apache/rocketmq/schema/registry/common/dto/UpdateSchemaRequest.java
similarity index 62%
copy from common/src/main/java/org/apache/rocketmq/schema/registry/common/model/SchemaStorageInfo.java
copy to common/src/main/java/org/apache/rocketmq/schema/registry/common/dto/UpdateSchemaRequest.java
index 491924e..7d22f19 100644
--- a/common/src/main/java/org/apache/rocketmq/schema/registry/common/model/SchemaStorageInfo.java
+++ b/common/src/main/java/org/apache/rocketmq/schema/registry/common/dto/UpdateSchemaRequest.java
@@ -15,28 +15,31 @@
  * limitations under the License.
  */
 
-package org.apache.rocketmq.schema.registry.common.model;
+package org.apache.rocketmq.schema.registry.common.dto;
 
 import io.swagger.annotations.ApiModelProperty;
-import java.io.Serializable;
-import java.util.Map;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.NoArgsConstructor;
+import org.apache.rocketmq.schema.registry.common.model.Compatibility;
+import org.apache.rocketmq.schema.registry.common.model.SchemaType;
 
 @Data
 @EqualsAndHashCode(callSuper = false)
 @Builder
 @NoArgsConstructor
 @AllArgsConstructor
-public class SchemaStorageInfo implements Serializable {
-    private static final long serialVersionUID = -6655281552098217740L;
+public class UpdateSchemaRequest extends BaseDto {
+    private static final long serialVersionUID = 2966846398643703675L;
 
-    private String serdeProtocol;
-    // TODO  delete?
-    private String serializationLib;
-    private Map<String, String> serdeInfo;
-    private String uri;
+    @ApiModelProperty(value = "Update IDL of this schema", example = "{\"type\": \"int\"}", required = true)
+    private String schemaIdl;
+
+    @ApiModelProperty(value = "Schema owner", example = "li")
+    private String owner = "";
+
+    @ApiModelProperty(value = "Schema description", example = "update schema")
+    private String desc = "";
 }
diff --git a/common/src/main/java/org/apache/rocketmq/schema/registry/common/model/AuditInfo.java b/common/src/main/java/org/apache/rocketmq/schema/registry/common/dto/UpdateSchemaResponse.java
similarity index 73%
copy from common/src/main/java/org/apache/rocketmq/schema/registry/common/model/AuditInfo.java
copy to common/src/main/java/org/apache/rocketmq/schema/registry/common/dto/UpdateSchemaResponse.java
index 66cbd5e..cb3f54f 100644
--- a/common/src/main/java/org/apache/rocketmq/schema/registry/common/model/AuditInfo.java
+++ b/common/src/main/java/org/apache/rocketmq/schema/registry/common/dto/UpdateSchemaResponse.java
@@ -15,11 +15,9 @@
  * limitations under the License.
  */
 
-package org.apache.rocketmq.schema.registry.common.model;
+package org.apache.rocketmq.schema.registry.common.dto;
 
 import io.swagger.annotations.ApiModelProperty;
-import java.io.Serializable;
-import java.util.Date;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
@@ -29,14 +27,14 @@ import lombok.NoArgsConstructor;
 @Data
 @EqualsAndHashCode(callSuper = false)
 @Builder
-@AllArgsConstructor
 @NoArgsConstructor
-public class AuditInfo implements Serializable {
-    private static final long serialVersionUID = 2258089775496856662L;
+@AllArgsConstructor
+public class UpdateSchemaResponse extends BaseDto {
+    private static final long serialVersionUID = 822296169833367618L;
+
+    @ApiModelProperty(value = "Schema unique id", required = true)
+    private long schemaId;
 
-    private String desc;
-    private String createdBy;
-    private Date createdTime;
-    private String lastModifiedBy;
-    private Date lastModifiedTime;
+    @ApiModelProperty(value = "Version of this schema record")
+    private long version;
 }
diff --git a/common/src/main/java/org/apache/rocketmq/schema/registry/common/json/JsonConverterImpl.java b/common/src/main/java/org/apache/rocketmq/schema/registry/common/json/JsonConverterImpl.java
index 03b1f1f..c3e3f89 100644
--- a/common/src/main/java/org/apache/rocketmq/schema/registry/common/json/JsonConverterImpl.java
+++ b/common/src/main/java/org/apache/rocketmq/schema/registry/common/json/JsonConverterImpl.java
@@ -19,6 +19,7 @@ package org.apache.rocketmq.schema.registry.common.json;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.gson.Gson;
+import com.google.gson.JsonObject;
 import java.nio.charset.StandardCharsets;
 import lombok.NoArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -89,7 +90,7 @@ public class JsonConverterImpl implements JsonConverter {
 
     @Override
     public String toString(Object o) {
-        return null;
+        return gson.toJson(o);
     }
 
     @Override
diff --git a/common/src/main/java/org/apache/rocketmq/schema/registry/common/model/AuditInfo.java b/common/src/main/java/org/apache/rocketmq/schema/registry/common/model/AuditInfo.java
index 66cbd5e..7f7b274 100644
--- a/common/src/main/java/org/apache/rocketmq/schema/registry/common/model/AuditInfo.java
+++ b/common/src/main/java/org/apache/rocketmq/schema/registry/common/model/AuditInfo.java
@@ -39,4 +39,16 @@ public class AuditInfo implements Serializable {
     private Date createdTime;
     private String lastModifiedBy;
     private Date lastModifiedTime;
+
+    public void createBy(String user, String desc) {
+        this.desc = desc;
+        this.createdBy = user;
+        this.lastModifiedBy = user;
+        this.createdTime = this.lastModifiedTime = new Date(System.currentTimeMillis());
+    }
+
+    public void updateBy(String user) {
+        this.lastModifiedBy = user;
+        this.lastModifiedTime = new Date(System.currentTimeMillis());
+    }
 }
diff --git a/common/src/main/java/org/apache/rocketmq/schema/registry/common/model/SchemaDetailInfo.java b/common/src/main/java/org/apache/rocketmq/schema/registry/common/model/SchemaDetailInfo.java
index aa93dbf..2f1c820 100644
--- a/common/src/main/java/org/apache/rocketmq/schema/registry/common/model/SchemaDetailInfo.java
+++ b/common/src/main/java/org/apache/rocketmq/schema/registry/common/model/SchemaDetailInfo.java
@@ -19,6 +19,7 @@ package org.apache.rocketmq.schema.registry.common.model;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
 import java.io.Serializable;
+import java.util.ArrayList;
 import java.util.List;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
@@ -34,7 +35,11 @@ import org.apache.rocketmq.schema.registry.common.exception.SchemaException;
 public class SchemaDetailInfo implements Serializable {
     private static final long serialVersionUID = 3113021009662503334L;
 
-    private List<SchemaRecordInfo> schemaRecords;
+    private List<SchemaRecordInfo> schemaRecords = new ArrayList<>();
+
+    public SchemaDetailInfo(SchemaRecordInfo firstSchemaRecord) {
+        this.schemaRecords.add(firstSchemaRecord);
+    }
 
     public SchemaRecordInfo lastRecord() {
         if (schemaRecords == null || schemaRecords.isEmpty()) {
diff --git a/common/src/main/java/org/apache/rocketmq/schema/registry/common/model/SchemaInfo.java b/common/src/main/java/org/apache/rocketmq/schema/registry/common/model/SchemaInfo.java
index 6fc1ecf..1ff8489 100644
--- a/common/src/main/java/org/apache/rocketmq/schema/registry/common/model/SchemaInfo.java
+++ b/common/src/main/java/org/apache/rocketmq/schema/registry/common/model/SchemaInfo.java
@@ -17,12 +17,14 @@
 
 package org.apache.rocketmq.schema.registry.common.model;
 
+import java.util.HashMap;
 import java.util.Map;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.NoArgsConstructor;
+import org.apache.rocketmq.schema.registry.common.QualifiedName;
 
 @Data
 @Builder
@@ -32,13 +34,23 @@ import lombok.NoArgsConstructor;
 public class SchemaInfo extends BaseInfo {
     private static final long serialVersionUID = -5143258312429353896L;
 
-    private SchemaMetaInfo meta;
+    private SchemaMetaInfo meta = new SchemaMetaInfo();
 
-    private SchemaDetailInfo details;
+    private SchemaDetailInfo details = new SchemaDetailInfo();
 
-    private SchemaStorageInfo storage;
+    private SchemaStorageInfo storage = new SchemaStorageInfo();
 
-    private Map<String, String> extras;
+    private Map<String, String> extras = new HashMap<>();
+
+    public SchemaInfo(final QualifiedName qualifiedName,
+        final AuditInfo audit,
+        final SchemaMetaInfo meta,
+        final SchemaDetailInfo details
+    ) {
+        super(qualifiedName, audit);
+        this.meta = meta;
+        this.details = details;
+    }
 
     public String getSchemaName() {
         return getQualifiedName().getSchema();
@@ -77,6 +89,7 @@ public class SchemaInfo extends BaseInfo {
         return getLastRecord().getVersion();
     }
 
+    @Deprecated
     public void setLastRecordVersion(long version) {
         getLastRecord().setVersion(version);
     }
diff --git a/common/src/main/java/org/apache/rocketmq/schema/registry/common/model/SchemaRecordInfo.java b/common/src/main/java/org/apache/rocketmq/schema/registry/common/model/SchemaRecordInfo.java
index 02af194..0cfe3a0 100644
--- a/common/src/main/java/org/apache/rocketmq/schema/registry/common/model/SchemaRecordInfo.java
+++ b/common/src/main/java/org/apache/rocketmq/schema/registry/common/model/SchemaRecordInfo.java
@@ -33,17 +33,14 @@ public class SchemaRecordInfo implements Serializable {
 
     private String schema;
     private long schemaId;
-    private long version;
+    private long version = 1L;
     private String idl;
     private Dependency dependency;
-    private List<SubjectInfo> subjects;
+    private List<SubjectInfo> subjects = new ArrayList<>();
     private SchemaType type;
     //    private List<FieldInfo> fields;
 
     public void bindSubject(final SubjectInfo subjectInfo) {
-        if (getSubjects() == null) {
-            setSubjects(new ArrayList<>());
-        }
         getSubjects().add(subjectInfo);
     }
 
diff --git a/common/src/main/java/org/apache/rocketmq/schema/registry/common/model/SchemaStorageInfo.java b/common/src/main/java/org/apache/rocketmq/schema/registry/common/model/SchemaStorageInfo.java
index 491924e..e85d44c 100644
--- a/common/src/main/java/org/apache/rocketmq/schema/registry/common/model/SchemaStorageInfo.java
+++ b/common/src/main/java/org/apache/rocketmq/schema/registry/common/model/SchemaStorageInfo.java
@@ -35,7 +35,6 @@ public class SchemaStorageInfo implements Serializable {
     private static final long serialVersionUID = -6655281552098217740L;
 
     private String serdeProtocol;
-    // TODO  delete?
     private String serializationLib;
     private Map<String, String> serdeInfo;
     private String uri;
diff --git a/core/pom.xml b/core/pom.xml
index 0b6ae01..b6f4ac6 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.apache.rocketmq</groupId>
         <artifactId>rocketmq-schema-registry-all</artifactId>
-        <version>0.0.2-SNAPSHOT</version>
+        <version>0.0.3-SNAPSHOT</version>
     </parent>
 
     <packaging>jar</packaging>
@@ -22,7 +22,7 @@
 
         <dependency>
             <groupId>org.apache.rocketmq</groupId>
-            <artifactId>schema-storage-rocketmq</artifactId>
+            <artifactId>storage-rocketmq</artifactId>
             <version>${project.version}</version>
         </dependency>
     </dependencies>
@@ -70,12 +70,12 @@
                     <include>**/*.*</include>
                 </includes>
             </resource>
-            <resource>
-                <directory>../storage-rocketmq/src/main/resources</directory>
-                <includes>
-                    <include>**/*.*</include>
-                </includes>
-            </resource>
+<!--            <resource>-->
+<!--                <directory>../storage-rocketmq/src/main/resources</directory>-->
+<!--                <includes>-->
+<!--                    <include>**/*.*</include>-->
+<!--                </includes>-->
+<!--            </resource>-->
         </resources>
     </build>
 
diff --git a/core/src/main/java/org/apache/rocketmq/schema/registry/core/api/v1/SchemaController.java b/core/src/main/java/org/apache/rocketmq/schema/registry/core/api/v1/SchemaController.java
index 97fe8bb..01e5501 100644
--- a/core/src/main/java/org/apache/rocketmq/schema/registry/core/api/v1/SchemaController.java
+++ b/core/src/main/java/org/apache/rocketmq/schema/registry/core/api/v1/SchemaController.java
@@ -16,8 +16,12 @@ import io.swagger.annotations.ApiResponse;
 import io.swagger.annotations.ApiResponses;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.rocketmq.schema.registry.common.QualifiedName;
+import org.apache.rocketmq.schema.registry.common.dto.RegisterSchemaRequest;
+import org.apache.rocketmq.schema.registry.common.dto.RegisterSchemaResponse;
 import org.apache.rocketmq.schema.registry.common.dto.SchemaDto;
 import org.apache.rocketmq.schema.registry.common.dto.SchemaRecordDto;
+import org.apache.rocketmq.schema.registry.common.dto.UpdateSchemaRequest;
+import org.apache.rocketmq.schema.registry.common.dto.UpdateSchemaResponse;
 import org.apache.rocketmq.schema.registry.core.api.RequestProcessor;
 import org.apache.rocketmq.schema.registry.core.service.SchemaService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -90,15 +94,15 @@ public class SchemaController {
             )
         }
     )
-    public SchemaDto registerSchema(
+    public RegisterSchemaResponse registerSchema(
         @ApiParam(value = "The subject of the schema", required = true)
         @PathVariable(value = "subject-name") final String subject,
         @ApiParam(value = "The name of the schema", required = true)
         @PathVariable(value = "schema-name") final String schemaName,
         @ApiParam(value = "The schema detail", required = true)
-        @RequestBody final SchemaDto schemaDto
+        @RequestBody final RegisterSchemaRequest registerSchemaRequest
     ) {
-        return registerSchema(DEFAULT_CLUSTER, DEFAULT_TENANT, subject, schemaName, schemaDto);
+        return registerSchema(DEFAULT_CLUSTER, DEFAULT_TENANT, subject, schemaName, registerSchemaRequest);
     }
 
     @RequestMapping(
@@ -123,7 +127,7 @@ public class SchemaController {
             )
         }
     )
-    public SchemaDto registerSchema(
+    public RegisterSchemaResponse registerSchema(
         @ApiParam(value = "The cluster of the subject", required = true)
         @PathVariable(value = "cluster-name") final String cluster,
         @ApiParam(value = "The tenant of the schema", required = true)
@@ -133,17 +137,16 @@ public class SchemaController {
         @ApiParam(value = "The name of the schema", required = true)
         @PathVariable(value = "schema-name") final String schemaName,
         @ApiParam(value = "The schema detail", required = true)
-        @RequestBody final SchemaDto schemaDto
+        @RequestBody final RegisterSchemaRequest registerSchemaDto
     ) {
         // TODO: support register by sql
         final QualifiedName name = new QualifiedName(cluster, tenant, subject, schemaName);
-        schemaDto.setQualifiedName(name);
 
         return this.requestProcessor.processRequest(
             name,
             "register",
             () -> {
-                return this.schemaService.register(name, schemaDto);
+                return this.schemaService.register(name, registerSchemaDto);
             }
         );
     }
@@ -246,15 +249,15 @@ public class SchemaController {
             )
         }
     )
-    public SchemaDto updateSchema(
+    public UpdateSchemaResponse updateSchema(
         @ApiParam(value = "The subject of the schema", required = true)
         @PathVariable(value = "subject-name") final String subject,
         @ApiParam(value = "The name of the schema", required = true)
         @PathVariable(value = "schema-name") final String schemaName,
         @ApiParam(value = "The schema detail", required = true)
-        @RequestBody final SchemaDto schemaDto
+        @RequestBody final UpdateSchemaRequest updateSchemaRequest
     ) {
-        return updateSchema(DEFAULT_CLUSTER, DEFAULT_TENANT, subject, schemaName, schemaDto);
+        return updateSchema(DEFAULT_CLUSTER, DEFAULT_TENANT, subject, schemaName, updateSchemaRequest);
     }
 
     @RequestMapping(
@@ -278,7 +281,7 @@ public class SchemaController {
             )
         }
     )
-    public SchemaDto updateSchema(
+    public UpdateSchemaResponse updateSchema(
         @ApiParam(value = "The cluster of the subject", required = true)
         @PathVariable(value = "cluster-name") final String cluster,
         @ApiParam(value = "The tenant of the schema", required = true)
@@ -288,13 +291,13 @@ public class SchemaController {
         @ApiParam(value = "The name of the schema", required = true)
         @PathVariable(value = "schema-name") final String schemaName,
         @ApiParam(value = "The schema detail", required = true)
-        @RequestBody final SchemaDto schemaDto
+        @RequestBody final UpdateSchemaRequest updateSchemaRequest
     ) {
         QualifiedName name = new QualifiedName(cluster, tenant, subject, schemaName);
         return this.requestProcessor.processRequest(
             name,
             "updateSchema",
-            () -> this.schemaService.update(name, schemaDto)
+            () -> this.schemaService.update(name, updateSchemaRequest)
         );
     }
 
diff --git a/core/src/main/java/org/apache/rocketmq/schema/registry/core/dependency/DependencyHelper.java b/core/src/main/java/org/apache/rocketmq/schema/registry/core/dependency/DependencyHelper.java
index f095476..1c4bab2 100644
--- a/core/src/main/java/org/apache/rocketmq/schema/registry/core/dependency/DependencyHelper.java
+++ b/core/src/main/java/org/apache/rocketmq/schema/registry/core/dependency/DependencyHelper.java
@@ -17,6 +17,8 @@
 
 package org.apache.rocketmq.schema.registry.core.dependency;
 
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
 import java.io.File;
 import java.io.FileWriter;
 import java.io.IOException;
@@ -64,6 +66,12 @@ public class DependencyHelper {
     public DependencyHelper(final String jdkPath, final String parentDir, final SchemaInfo schemaInfo) {
         this.schemaName = schemaInfo.getSchemaName();
 
+        JsonObject object = JsonParser.parseString(schemaInfo.getLastRecordIdl()).getAsJsonObject();
+        if (object.get("namespace") == null) {
+            throw new SchemaException("namespace field should not be empty");
+        }
+
+        schemaInfo.getMeta().setNamespace(object.get("namespace").getAsString());
         this.dependency = Dependency.builder()
             .groupId(schemaInfo.getNamespace())
             .artifactId(schemaInfo.getSchemaName())
diff --git a/core/src/main/java/org/apache/rocketmq/schema/registry/core/service/SchemaService.java b/core/src/main/java/org/apache/rocketmq/schema/registry/core/service/SchemaService.java
index 84c70cc..a468595 100644
--- a/core/src/main/java/org/apache/rocketmq/schema/registry/core/service/SchemaService.java
+++ b/core/src/main/java/org/apache/rocketmq/schema/registry/core/service/SchemaService.java
@@ -18,12 +18,13 @@
 package org.apache.rocketmq.schema.registry.core.service;
 
 import java.util.List;
-import java.util.Optional;
 import org.apache.rocketmq.schema.registry.common.QualifiedName;
 import org.apache.rocketmq.schema.registry.common.dto.BaseDto;
-import org.apache.rocketmq.schema.registry.common.dto.SchemaDto;
+import org.apache.rocketmq.schema.registry.common.dto.RegisterSchemaRequest;
+import org.apache.rocketmq.schema.registry.common.dto.RegisterSchemaResponse;
 import org.apache.rocketmq.schema.registry.common.dto.SchemaRecordDto;
-import org.apache.rocketmq.schema.registry.common.model.SchemaRecordInfo;
+import org.apache.rocketmq.schema.registry.common.dto.UpdateSchemaRequest;
+import org.apache.rocketmq.schema.registry.common.dto.UpdateSchemaResponse;
 
 public interface SchemaService<T extends BaseDto> {
 
@@ -34,7 +35,7 @@ public interface SchemaService<T extends BaseDto> {
      * @param dto register resource information
      * @return registered schema object
      */
-    T register(QualifiedName qualifiedName, T dto);
+    RegisterSchemaResponse register(QualifiedName qualifiedName, RegisterSchemaRequest dto);
 
     /**
      * Register the schema.
@@ -43,7 +44,7 @@ public interface SchemaService<T extends BaseDto> {
      * @param dto update information
      * @return updated schema object
      */
-    T update(QualifiedName qualifiedName, T dto);
+    UpdateSchemaResponse update(QualifiedName qualifiedName, UpdateSchemaRequest dto);
 
     /**
      * Deletes the schema.
diff --git a/core/src/main/java/org/apache/rocketmq/schema/registry/core/service/SchemaServiceImpl.java b/core/src/main/java/org/apache/rocketmq/schema/registry/core/service/SchemaServiceImpl.java
index 9d368b9..f06ec76 100644
--- a/core/src/main/java/org/apache/rocketmq/schema/registry/core/service/SchemaServiceImpl.java
+++ b/core/src/main/java/org/apache/rocketmq/schema/registry/core/service/SchemaServiceImpl.java
@@ -27,14 +27,21 @@ import org.apache.rocketmq.schema.registry.common.QualifiedName;
 import org.apache.rocketmq.schema.registry.common.auth.AccessControlService;
 import org.apache.rocketmq.schema.registry.common.context.RequestContext;
 import org.apache.rocketmq.schema.registry.common.context.RequestContextManager;
+import org.apache.rocketmq.schema.registry.common.dto.RegisterSchemaRequest;
+import org.apache.rocketmq.schema.registry.common.dto.RegisterSchemaResponse;
 import org.apache.rocketmq.schema.registry.common.dto.SchemaDto;
 import org.apache.rocketmq.schema.registry.common.dto.SchemaRecordDto;
+import org.apache.rocketmq.schema.registry.common.dto.UpdateSchemaRequest;
+import org.apache.rocketmq.schema.registry.common.dto.UpdateSchemaResponse;
 import org.apache.rocketmq.schema.registry.common.exception.SchemaCompatibilityException;
 import org.apache.rocketmq.schema.registry.common.exception.SchemaException;
 import org.apache.rocketmq.schema.registry.common.exception.SchemaExistException;
 import org.apache.rocketmq.schema.registry.common.exception.SchemaNotFoundException;
+import org.apache.rocketmq.schema.registry.common.model.AuditInfo;
 import org.apache.rocketmq.schema.registry.common.model.Dependency;
+import org.apache.rocketmq.schema.registry.common.model.SchemaDetailInfo;
 import org.apache.rocketmq.schema.registry.common.model.SchemaInfo;
+import org.apache.rocketmq.schema.registry.common.model.SchemaMetaInfo;
 import org.apache.rocketmq.schema.registry.common.model.SchemaOperation;
 import org.apache.rocketmq.schema.registry.common.model.SchemaRecordInfo;
 import org.apache.rocketmq.schema.registry.common.model.SubjectInfo;
@@ -78,28 +85,36 @@ public class SchemaServiceImpl implements SchemaService<SchemaDto> {
      * {@inheritDoc}
      */
     @Override
-    public SchemaDto register(QualifiedName qualifiedName, SchemaDto schemaDto) {
+    public RegisterSchemaResponse register(QualifiedName qualifiedName, RegisterSchemaRequest registerSchemaDto) {
         final RequestContext requestContext = RequestContextManager.getContext();
         log.info("register get request context: " + requestContext);
 
-        schemaDto.setQualifiedName(qualifiedName);
-        checkSchemaValid(schemaDto);
-        checkSchemaExist(qualifiedName);
-
         // TODO: add user and ak sk
         accessController.checkPermission("", qualifiedName.getTenant(), SchemaOperation.REGISTER);
 
-        SchemaInfo current = storageServiceProxy.get(qualifiedName, config.isCacheEnabled());
-        if (current != null) {
-            throw new SchemaExistException(qualifiedName);
-        }
+        checkSchemaExist(qualifiedName);
+
+        final AuditInfo audit = new AuditInfo();
+        audit.createBy(registerSchemaDto.getOwner(), registerSchemaDto.getDesc());
+
+        long schemaId = idGenerator.nextId();
+        final SchemaMetaInfo meta = new SchemaMetaInfo();
+        meta.setCompatibility(registerSchemaDto.getCompatibility());
+        meta.setOwner(registerSchemaDto.getOwner());
+        meta.setType(registerSchemaDto.getSchemaType());
+        meta.setSchemaName(qualifiedName.getSchema());
+        meta.setTenant(qualifiedName.getTenant());
+        meta.setUniqueId(schemaId);
 
-        SchemaInfo schemaInfo = storageUtil.convertFromSchemaDto(schemaDto);
-        schemaInfo.setUniqueId(idGenerator.nextId());
-        schemaInfo.setLastRecordVersion(1L);
-        schemaInfo.getLastRecord().setSchema(qualifiedName.schemaFullName());
-        schemaInfo.getLastRecord().setType(schemaInfo.getMeta().getType());
-        schemaInfo.getLastRecord().bindSubject(qualifiedName.subjectInfo());
+        final SchemaRecordInfo firstRecord = new SchemaRecordInfo();
+        firstRecord.setSchema(qualifiedName.schemaFullName());
+        firstRecord.setSchemaId(schemaId);
+        firstRecord.setType(registerSchemaDto.getSchemaType());
+        firstRecord.setIdl(registerSchemaDto.getSchemaIdl());
+        firstRecord.bindSubject(qualifiedName.subjectInfo());
+
+        final SchemaDetailInfo details = new SchemaDetailInfo(firstRecord);
+        final SchemaInfo schemaInfo = new SchemaInfo(qualifiedName, audit, meta, details);
 
         if (config.isUploadEnabled()) {
             // TODO: async upload to speed up register operation and keep atomic with register
@@ -109,18 +124,16 @@ public class SchemaServiceImpl implements SchemaService<SchemaDto> {
 
         log.info("Creating schema info {}: {}", qualifiedName, schemaInfo);
         storageServiceProxy.register(qualifiedName, schemaInfo);
-        return storageUtil.convertToSchemaDto(schemaInfo);
+        return new RegisterSchemaResponse(schemaInfo.getUniqueId(), schemaInfo.getLastRecordVersion());
     }
 
     /**
      * {@inheritDoc}
      */
     @Override
-    public SchemaDto update(QualifiedName qualifiedName, SchemaDto schemaDto) {
+    public UpdateSchemaResponse update(QualifiedName qualifiedName, UpdateSchemaRequest updateSchemaRequest) {
         final RequestContext requestContext = RequestContextManager.getContext();
-        log.info("update get request context: " + requestContext);
-
-        schemaDto.setQualifiedName(qualifiedName);
+        log.info("update request context: " + requestContext);
 
         this.accessController.checkPermission("", "", SchemaOperation.UPDATE);
 
@@ -129,39 +142,38 @@ public class SchemaServiceImpl implements SchemaService<SchemaDto> {
             throw new SchemaNotFoundException("Schema " + qualifiedName + " not exist, ignored update.");
         }
 
-        SchemaInfo update = storageUtil.convertFromSchemaDto(schemaDto);
+        current.getAudit().updateBy(updateSchemaRequest.getOwner());
+
+        final SchemaRecordInfo updateRecord = new SchemaRecordInfo();
+        updateRecord.setSchema(qualifiedName.schemaFullName());
+        updateRecord.setSchemaId(current.getUniqueId());
+        updateRecord.setType(current.getSchemaType());
+        updateRecord.setIdl(updateSchemaRequest.getSchemaIdl());
+        updateRecord.bindSubject(qualifiedName.subjectInfo());
+        updateRecord.setVersion(current.getLastRecordVersion() + 1);
 
-        if (update.getDetails() != null) {
-            SubjectInfo subjectInfo = qualifiedName.subjectInfo();
-            SchemaRecordInfo updateRecord = update.getDetails().lastRecord();
-            updateRecord.setVersion(current.getLastRecordVersion() + 1);
-            updateRecord.setSchema(qualifiedName.schemaFullName());
-            updateRecord.setSchemaId(current.getUniqueId());
-            updateRecord.bindSubject(subjectInfo);
-            current.getLastRecord().unbindSubject(subjectInfo);
+        final List<SchemaRecordInfo> updateRecords = new ArrayList<>(current.getDetails().getSchemaRecords());
+        updateRecords.add(updateRecord);
 
-            List<SchemaRecordInfo> currentRecords = new ArrayList<>(current.getDetails().getSchemaRecords());
-            currentRecords.add(updateRecord);
-            update.getDetails().setSchemaRecords(currentRecords);
+        final SchemaInfo update = new SchemaInfo();
+        update.getDetails().setSchemaRecords(updateRecords);
+
+        if (current.getQualifiedName() != null) {
+            update.setQualifiedName(current.getQualifiedName());
         }
 
-        if (update.getMeta() == null) {
+        if (current.getMeta() != null) {
             update.setMeta(current.getMeta());
         }
 
-        if (update.getStorage() == null) {
+        if (current.getStorage() != null) {
             update.setStorage(current.getStorage());
         }
 
-        if (update.getExtras() == null) {
+        if (update.getExtras() != null) {
             update.setExtras(current.getExtras());
         }
 
-        if (update.getAudit() == null) {
-            update.setAudit(current.getAudit());
-        }
-
-//        checkSchemaValid(schemaDto);
         CommonUtil.validateCompatibility(update, current, current.getMeta().getCompatibility());
 
         if (config.isUploadEnabled()) {
@@ -171,7 +183,7 @@ public class SchemaServiceImpl implements SchemaService<SchemaDto> {
 
         log.info("Updating schema info {}: {}", qualifiedName, update);
         storageServiceProxy.update(qualifiedName, update);
-        return storageUtil.convertToSchemaDto(update);
+        return new UpdateSchemaResponse(updateRecord.getSchemaId(), updateRecord.getVersion());
     }
 
     /**
diff --git a/core/src/main/resources/application.properties b/core/src/main/resources/application.properties
index 022e3dc..44a196c 100644
--- a/core/src/main/resources/application.properties
+++ b/core/src/main/resources/application.properties
@@ -2,7 +2,7 @@
 spring.profiles.active = dev
 spring.application.name = rocketmq-schema-registry
 server.port=8080
-logging.file.name = log/app.log
+logging.file.name = schema-registry/log/app.log
 
 schema.dependency.upload-enabled = false
 #schema.dependency.jdk-path
diff --git a/pom.xml b/pom.xml
index 425de31..e955a22 100644
--- a/pom.xml
+++ b/pom.xml
@@ -11,7 +11,7 @@
 
     <groupId>org.apache.rocketmq</groupId>
     <artifactId>rocketmq-schema-registry-all</artifactId>
-    <version>0.0.2-SNAPSHOT</version>
+    <version>0.0.3-SNAPSHOT</version>
     <packaging>pom</packaging>
     <name>rocketmq-schema-registry-${project.version}</name>
     <description>rocketmq-schema-registry</description>
diff --git a/storage-rocketmq/pom.xml b/storage-rocketmq/pom.xml
index b933223..a2a2c17 100644
--- a/storage-rocketmq/pom.xml
+++ b/storage-rocketmq/pom.xml
@@ -22,7 +22,7 @@
     <parent>
         <artifactId>rocketmq-schema-registry-all</artifactId>
         <groupId>org.apache.rocketmq</groupId>
-        <version>0.0.2-SNAPSHOT</version>
+        <version>0.0.3-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/storage-rocketmq/src/main/java/org/apache/rocketmq/schema/registry/storage/rocketmq/RocketmqClient.java b/storage-rocketmq/src/main/java/org/apache/rocketmq/schema/registry/storage/rocketmq/RocketmqClient.java
index f671a7b..ccd9749 100644
--- a/storage-rocketmq/src/main/java/org/apache/rocketmq/schema/registry/storage/rocketmq/RocketmqClient.java
+++ b/storage-rocketmq/src/main/java/org/apache/rocketmq/schema/registry/storage/rocketmq/RocketmqClient.java
@@ -53,6 +53,7 @@ import org.apache.rocketmq.schema.registry.common.json.JsonConverterImpl;
 import org.apache.rocketmq.schema.registry.common.model.SchemaInfo;
 import org.apache.rocketmq.schema.registry.common.model.SchemaRecordInfo;
 import org.apache.rocketmq.schema.registry.common.model.SubjectInfo;
+import org.apache.rocketmq.schema.registry.common.utils.CommonUtil;
 import org.apache.rocketmq.tools.admin.DefaultMQAdminExt;
 import org.rocksdb.ColumnFamilyDescriptor;
 import org.rocksdb.ColumnFamilyHandle;
@@ -157,6 +158,7 @@ public class RocketmqClient {
 
     private void startLocalCache() {
         try {
+            CommonUtil.mkdir(cachePath);
             List<byte[]> cfs = RocksDB.listColumnFamilies(options, cachePath);
             if (cfs.size() <= 1) {
                 List<byte[]> columnFamilies = Arrays.asList(STORAGE_ROCKSDB_SCHEMA_COLUMN_FAMILY,
diff --git a/storage-rocketmq/src/main/java/org/apache/rocketmq/schema/registry/storage/rocketmq/configs/RocketmqConfigConstants.java b/storage-rocketmq/src/main/java/org/apache/rocketmq/schema/registry/storage/rocketmq/configs/RocketmqConfigConstants.java
index 4ec11b2..17e1263 100644
--- a/storage-rocketmq/src/main/java/org/apache/rocketmq/schema/registry/storage/rocketmq/configs/RocketmqConfigConstants.java
+++ b/storage-rocketmq/src/main/java/org/apache/rocketmq/schema/registry/storage/rocketmq/configs/RocketmqConfigConstants.java
@@ -38,7 +38,7 @@ public class RocketmqConfigConstants {
     public static final String STORAGE_ROCKETMQ_TOPIC_DEFAULT = "RMQ_SYS_schema_registry_storage";
 
     public static final String STORAGE_LOCAL_CACHE_PATH = "storage.local.cache.path";
-    public static final String STORAGE_LOCAL_CACHE_PATH_DEFAULT = "/tmp/schema-registry/cache";
+    public static final String STORAGE_LOCAL_CACHE_PATH_DEFAULT = "schema-registry/cache";
 
     public static final byte[] STORAGE_ROCKSDB_SCHEMA_DEFAULT_FAMILY = "default".getBytes(StandardCharsets.UTF_8);
     public static final byte[] STORAGE_ROCKSDB_SCHEMA_COLUMN_FAMILY = "schema".getBytes(StandardCharsets.UTF_8);
diff --git a/storage-rocketmq/src/main/resources/rocketmq.properties b/storage-rocketmq/src/main/resources/rocketmq.properties
index 5070713..2a6e6a3 100644
--- a/storage-rocketmq/src/main/resources/rocketmq.properties
+++ b/storage-rocketmq/src/main/resources/rocketmq.properties
@@ -15,5 +15,5 @@
 # limitations under the License.
 #
 
-storage.type=rocketmq
+#storage.type=rocketmq
 #storage.local.cache.path
\ No newline at end of file
diff --git a/war/pom.xml b/war/pom.xml
index cb7b4cb..4109000 100644
--- a/war/pom.xml
+++ b/war/pom.xml
@@ -22,7 +22,7 @@
     <parent>
         <artifactId>rocketmq-schema-registry-all</artifactId>
         <groupId>org.apache.rocketmq</groupId>
-        <version>0.0.2-SNAPSHOT</version>
+        <version>0.0.3-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>