You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@linkis.apache.org by en...@apache.org on 2022/01/05 13:36:10 UTC

[incubator-linkis] branch dev-1.1.0-DataSource updated: Dev 1.1.0 data source (#1271)

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

enjoyyin pushed a commit to branch dev-1.1.0-DataSource
in repository https://gitbox.apache.org/repos/asf/incubator-linkis.git


The following commit(s) were added to refs/heads/dev-1.1.0-DataSource by this push:
     new 0dc6df7  Dev 1.1.0 data source (#1271)
0dc6df7 is described below

commit 0dc6df7e477a9f60d8869e4f134715e7d8313f3c
Author: David hua <da...@hotmail.com>
AuthorDate: Wed Jan 5 21:36:02 2022 +0800

    Dev 1.1.0 data source (#1271)
    
    * Repair the problem in rest controllers; Add JsonErrorException; Enhance the strategy in DataSourceParameterValidator
    
    * Enhance the loading method in MetaClassLoaderManager; Add MetaMethodInvokeException
    
    * Change the assembly files in linkis-metadata-manager/service
    
    * Adjust the directory name and the startup/stop script content
    
    * Complete the linkis-datasource-client module
    
    * Add the require annotation @RequestBody
---
 ...sourcemanager => linkis-ps-data-source-manager} |   2 +-
 .../sbin/ext/linkis-ps-metadatamanager             |  61 ++-
 .../sbin/ext/linkis-ps-metadatamanager-es          |  33 --
 .../sbin/ext/linkis-ps-metadatamanager-hive        |  33 --
 .../sbin/ext/linkis-ps-metadatamanager-kafka       |  33 --
 .../sbin/ext/linkis-ps-metadatamanager-mysql       |  33 --
 .../src/main/assembly/assembly.xml                 |  59 +--
 .../core/restful/DataSourceCoreRestfulApi.java     | 368 ------------------
 .../validate/DataSourceParameterValidator.java     |  82 ----
 .../pom.xml                                        |   6 +-
 .../datasource/client/AbstractRemoteClient.scala   |   0
 .../datasource/client/DataSourceRemoteClient.scala |  27 +-
 .../datasource/client/MetaDataRemoteClient.scala   |  10 +-
 .../linkis/datasource/client/RemoteClient.scala    |   0
 .../client/config/DatasourceClientConfig.scala     |   5 +-
 .../DataSourceClientBuilderException.scala         |   7 +-
 .../client/impl/LinkisDataSourceRemoteClient.scala |   8 +-
 .../client/impl/LinkisMetaDataRemoteClient.scala   |   0
 .../client/request/CreateDataSourceAction.scala    |   6 +-
 .../client/request/DataSourceAction.scala          |   0
 .../request/DataSourceTestConnectAction.scala      |  18 +-
 .../client/request/DeleteDataSourceAction.scala    |  12 +-
 .../client/request/ExpireDataSourceAction.scala    |  14 +-
 .../request/GetAllDataSourceTypesAction.scala      |   2 +-
 .../GetConnectParamsByDataSourceIdAction.scala     |   6 +-
 .../GetConnectParamsByDataSourceNameAction.scala}  |  56 +--
 .../request/GetDataSourceVersionsAction.scala      |   8 +-
 .../request/GetInfoByDataSourceIdAction.scala      |   6 +-
 .../request/GetKeyTypeDatasourceAction.scala       |   6 +-
 .../client/request/MetadataGetColumnsAction.scala  |   6 +-
 .../request/MetadataGetDatabasesAction.scala       |   6 +-
 .../request/MetadataGetPartitionsAction.scala      |   6 +-
 .../request/MetadataGetTablePropsAction.scala      |   6 +-
 .../client/request/MetadataGetTablesAction.scala   |   6 +-
 .../request/PublishDataSourceVersionAction.scala   |  18 +-
 .../client/request/QueryDataSourceAction.scala     |  28 +-
 .../client/request/QueryDataSourceEnvAction.scala  |  20 +-
 .../client/request/UpdateDataSourceAction.scala    |  18 +-
 .../request/UpdateDataSourceParameterAction.scala  |  18 +-
 .../client/response/CreateDataSourceResult.scala   |   3 +-
 .../response/DataSourceTestConnectResult.scala     |   3 +-
 .../client/response/DeleteDataSourceResult.scala   |   3 +-
 .../client/response/ExpireDataSourceResult.scala   |   3 +-
 .../response/GetAllDataSourceTypesResult.scala     |   8 +-
 .../GetConnectParamsByDataSourceIdResult.scala     |   2 +-
 .../GetConnectParamsByDataSourceNameResult.scala}  |   5 +-
 .../response/GetDataSourceVersionsResult.scala     |  11 +-
 .../response/GetInfoByDataSourceIdResult.scala     |   4 +-
 .../response/GetKeyTypeDatasourceResult.scala      |  10 +-
 .../client/response/MetadataGetColumnsResult.scala |   6 +-
 .../response/MetadataGetDatabasesResult.scala      |   2 +-
 .../response/MetadataGetPartitionsResult.scala     |   2 +-
 .../response/MetadataGetTablePropsResult.scala     |   2 +-
 .../client/response/MetadataGetTablesResult.scala  |   2 +-
 .../response/PublishDataSourceVersionResult.scala  |   3 +-
 .../client/response/QueryDataSourceEnvResult.scala |   6 +-
 .../client/response/QueryDataSourceResult.scala    |   7 +-
 .../response/UpdateDataSourceParameterResult.scala |   3 +-
 .../client/response/UpdateDataSourceResult.scala   |   3 +-
 .../datasource/client/TestDataSourceClient.scala   |   6 +-
 .../common/pom.xml                                 |   2 +-
 .../datasourcemanager/common/ServiceErrorCode.java |   0
 .../datasourcemanager/common/auth/AuthContext.java |  81 ++++
 .../common/domain/DataSource.java                  |   9 +-
 .../common/domain/DataSourceEnv.java               |   7 +-
 .../domain/DataSourceParamKeyDefinition.java       |  30 +-
 .../common/domain/DataSourceParameter.java         |   0
 .../common/domain/DataSourceType.java              |   0
 .../common/domain/DatasourceVersion.java           |   7 +-
 .../common/exception/JsonErrorException.java}      |  23 +-
 .../datasourcemanager/common/util/CryptoUtils.java |   0
 .../common/util/PatternInjectUtils.java            |   9 +-
 .../datasourcemanager/common/util/json/Json.java   |  24 +-
 .../common/protocol/DsmQueryProtocol.scala         |   2 +-
 .../server/pom.xml                                 |  31 +-
 .../server/src/main/assembly/distribution.xml      |   2 +-
 .../core/LinkisDataSourceManagerApplication.java   |   0
 .../datasourcemanager/core/dao/DataSourceDao.java  |  21 +-
 .../core/dao/DataSourceEnvDao.java                 |   0
 .../core/dao/DataSourceParamKeyDao.java            |   4 +-
 .../core/dao/DataSourceTypeDao.java                |   0
 .../core/dao/DataSourceTypeEnvDao.java             |   0
 .../core/dao/DataSourceVersionDao.java             |   2 +-
 .../core/dao/mapper/DataSouceMapper.xml            |  26 +-
 .../core/dao/mapper/DataSourceEnvMapper.xml        |   0
 .../core/dao/mapper/DataSourceParamKeyMapper.xml   |   0
 .../core/dao/mapper/DataSourceTypeEnvMapper.xml    |   0
 .../core/dao/mapper/DataSourceTypeMapper.xml       |   0
 .../core/dao/mapper/DataSourceVersionMapper.xml    |   2 +-
 .../CustomMultiPartFormDataTransformer.java        |   0
 .../core/formdata/FormDataTransformerFactory.java  |   0
 .../core/formdata/FormStreamContent.java           |   0
 .../formdata/MultiPartFormDataTransformer.java     |   0
 .../core/restful/DataSourceAdminRestfulApi.java    | 120 +++---
 .../core/restful/DataSourceCoreRestfulApi.java     | 432 +++++++++++++++++++++
 .../core/restful/DataSourceOperateRestfulApi.java  |  28 +-
 .../core/restful/RestfulApiHelper.java             |   4 +-
 .../exception/BeanValidationExceptionMapper.java   |   0
 .../core/service/BmlAppService.java                |   0
 .../core/service/DataSourceInfoService.java        |  20 +-
 .../core/service/DataSourceOpService.java          |   0
 .../core/service/DataSourceRelateService.java      |   0
 .../core/service/MetadataOperateService.java       |   3 +-
 .../core/service/impl/BmlAppServiceImpl.java       |   1 +
 .../service/impl/DataSourceInfoServiceImpl.java    |  91 ++++-
 .../service/impl/DataSourceRelateServiceImpl.java  |   0
 .../service/impl/MetadataOperateServiceImpl.java   |  10 +-
 .../validate/DataSourceParameterValidator.java     | 106 +++++
 .../core/validate/ParameterValidateException.java  |   0
 .../core/validate/ParameterValidateStrategy.java   |   2 +-
 .../core/validate/ParameterValidator.java          |   0
 .../strategy/RegExpParameterValidateStrategy.java  |   5 +-
 .../strategy/TypeParameterValidateStrategy.java    |   2 +-
 .../datasourcemanager/core/vo/DataSourceEnvVo.java |   0
 .../datasourcemanager/core/vo/DataSourceVo.java    |  10 +
 .../datasourcemanager/core/vo/PageViewVo.java      |   0
 .../core/receivers/DsmReceiver.scala               |  30 +-
 .../common/pom.xml                                 |   9 +-
 .../metadatamanager/common/MdmConfiguration.java   |   2 +-
 .../common/cache/CacheConfiguration.java           |   8 +-
 .../metadatamanager/common/cache/CacheManager.java |   0
 .../common/cache/ConnCacheManager.java             |  30 +-
 .../common/domain/MetaColumnInfo.java              |   0
 .../common/domain/MetaPartitionInfo.java           |   0
 .../exception/MetaMethodInvokeException.java}      |  36 +-
 .../common/exception/MetaRuntimeException.java     |   3 +-
 .../common/service/AbstractMetaService.java        |  86 +++-
 .../common/service/BaseMetadataService.java        |   0
 .../common/service/MetadataConnection.java         |   0
 .../common/service/MetadataDbService.java          |   0
 .../common/service/MetadataService.java            |   0
 .../common/protocol/MetadataOperateProtocol.scala  |   6 +-
 .../common/protocol/MetadataProtocol.scala         |   0
 .../common/protocol/MetadataQueryProtocol.scala    |  32 +-
 .../server/pom.xml                                 |  18 +-
 .../server}/src/main/assembly/distribution.xml     |  60 ++-
 .../server/LinkisMetadataManagerApplication.java   |   0
 .../server/loader/MetaClassLoaderManager.java      | 201 ++++++++++
 .../server/restful/MetadataCoreRestful.java        | 159 ++++++++
 .../server/service/MetadataAppService.java         |  20 +-
 .../service/impl/MetadataAppServiceImpl.java       | 189 +++++++++
 .../server/utils/MetadataUtils.java                | 157 ++++++++
 .../service/elasticsearch/pom.xml                  |   6 +-
 .../src/main/assembly/distribution.xml             |   4 +-
 .../metadatamanager/service/ElasticConnection.java |   8 +-
 .../service/ElasticParamsMapper.java               |   0
 .../metadatamanager/service/EsMetaService.java}    |   4 +-
 .../service/hive/pom.xml                           | 103 ++++-
 .../hive/src/main/assembly/distribution.xml        | 238 ++++++++++++
 .../metadatamanager/service/HiveConnection.java    |   7 +-
 .../metadatamanager/service/HiveMetaService.java   |  28 +-
 .../metadatamanager/service/HiveParamsMapper.java  |   2 +
 .../service/kafka/pom.xml                          |  12 +-
 .../kafka/src/main/assembly/distribution.xml       |   4 +-
 .../metadatamanager/service/KafkaConnection.java   |   0
 .../metadatamanager/service/KafkaMetaService.java  |   4 +-
 .../metadatamanager/service/KafkaParamsMapper.java |   0
 .../service/mysql/pom.xml                          |   6 +-
 .../mysql}/src/main/assembly/distribution.xml      |   4 +-
 .../metadatamanager/service/MysqlMetaService.java} |   4 +-
 .../metadatamanager/service/SqlConnection.java     |   8 +
 .../metadatamanager/service/SqlParamsMapper.java   |   0
 .../apache/linkis/metadatamanager/common/Json.java | 114 ------
 .../server/loader/MetaClassLoaderManager.java      | 123 ------
 .../server/restful/MetadataCoreRestful.java        | 134 -------
 .../service/impl/MetadataAppServiceImpl.java       | 140 -------
 .../mysql/src/main/assembly/distribution.xml       |  56 ---
 .../linkis-datasource/pom.xml                      |  42 ++
 linkis-public-enhancements/pom.xml                 |  10 +-
 169 files changed, 2654 insertions(+), 1696 deletions(-)

diff --git a/assembly-combined-package/assembly-combined/sbin/ext/linkis-ps-datasourcemanager b/assembly-combined-package/assembly-combined/sbin/ext/linkis-ps-data-source-manager
similarity index 93%
rename from assembly-combined-package/assembly-combined/sbin/ext/linkis-ps-datasourcemanager
rename to assembly-combined-package/assembly-combined/sbin/ext/linkis-ps-data-source-manager
index a8ad83e..e31bde6 100644
--- a/assembly-combined-package/assembly-combined/sbin/ext/linkis-ps-datasourcemanager
+++ b/assembly-combined-package/assembly-combined/sbin/ext/linkis-ps-data-source-manager
@@ -17,8 +17,8 @@
 #
 # Modified for Linkis 1.0.0
 
+export SERVER_SUFFIX="linkis-public-enhancements/linkis-ps-data-source-manager"
 
-export SERVER_SUFFIX="linkis-public-enhancements/linkis-ps-datasourcemanager"
 
 #export DEBUG_PORT=
 
diff --git a/assembly-combined-package/assembly-combined/sbin/ext/linkis-ps-metadatamanager b/assembly-combined-package/assembly-combined/sbin/ext/linkis-ps-metadatamanager
index c767432..85ee7cc 100644
--- a/assembly-combined-package/assembly-combined/sbin/ext/linkis-ps-metadatamanager
+++ b/assembly-combined-package/assembly-combined/sbin/ext/linkis-ps-metadatamanager
@@ -18,16 +18,65 @@
 # Modified for Linkis 1.0.0
 
 
-export SERVER_SUFFIX="linkis-public-enhancements/linkis-ps-metadatamanager"
+source $LINKIS_CONF_DIR/linkis-env.sh
+
+SERVER_SUFFIX="linkis-public-enhancements/linkis-ps-metadatamanager"
 
-#export DEBUG_PORT=
 
 export SERVER_CLASS=org.apache.linkis.metadatamanager.server.LinkisMetadataManagerApplication
 
-export COMMON_START_BIN=$LINKIS_HOME/sbin/ext/linkis-common-start
-if [[ ! -f "${COMMON_START_BIN}" ]]; then
-    echo "The $COMMON_START_BIN  does not exist!"
+if [ "$LINKIS_LOG_DIR" = "" ]; then
+  export LINKIS_LOG_DIR="$LINKIS_HOME/logs"
+fi
+if [ ! -w "$LINKIS_LOG_DIR" ] ; then
+  sudo mkdir -p $LINKIS_LOG_DIR; sudo chown -R hadoop:hadoop $LINKIS_LOG_DIR
+fi
+
+if test -z "$SERVER_HEAP_SIZE"
+then
+  export SERVER_HEAP_SIZE="512M"
+fi
+
+if [ "$DEBUG_PORT" ];
+then
+   export DEBUG_CMD="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=$DEBUG_PORT"
+fi
+
+if test -z "$SERVER_JAVA_OPTS"
+then
+  export SERVER_JAVA_OPTS=" -DserviceName=$SERVER_NAME -Xmx$SERVER_HEAP_SIZE -XX:+UseG1GC -Xloggc:$LINKIS_LOG_DIR/${SERVER_NAME}-gc.log $DEBUG_CMD "
+fi
+
+## conf dir
+export SERVER_CONF_PATH=$LINKIS_CONF_DIR
+
+## commons lib
+export LINKIS_COMMONS_LIB=$LINKIS_HOME/$LINKIS_PUBLIC_MODULE
+if [ ! -r "$LINKIS_COMMONS_LIB" ] ; then
+    echo "linkis commons lib not exists $LINKIS_COMMONS_LIB"
+    exit 1
+fi
+
+## server lib
+export SERVER_LIB=$LINKIS_HOME/lib/$SERVER_SUFFIX
+if [ ! -r "$SERVER_LIB" ] ; then
+    echo "server lib not exists $SERVER_LIB"
+    exit 1
+fi
+# set the wds.linkis.server.mdm.service.lib.dir to ${SERVER_LIB}/service
+SERVER_JAVA_OPTS=" -Dwds.linkis.server.mdm.service.lib.dir=${SERVER_LIB}/service"${SERVER_JAVA_OPTS}
+
+## set class path
+export SERVER_CLASS_PATH=$SERVER_CONF_PATH:$LINKIS_COMMONS_LIB/*:$SERVER_LIB/*
+
+nohup java $SERVER_JAVA_OPTS -cp $SERVER_CLASS_PATH $SERVER_CLASS $SPRING_ARGS 2>&1 > $LINKIS_LOG_DIR/${SERVER_NAME}.out &
+
+pid=$!
+sleep 2
+if [[ -z "${pid}" ]]; then
+    echo "server $SERVER_NAME start failed!"
     exit 1
 else
-    sh $COMMON_START_BIN
+    echo "server $SERVER_NAME start succeeded!"
+    echo $pid > $SERVER_PID
 fi
\ No newline at end of file
diff --git a/assembly-combined-package/assembly-combined/sbin/ext/linkis-ps-metadatamanager-es b/assembly-combined-package/assembly-combined/sbin/ext/linkis-ps-metadatamanager-es
deleted file mode 100644
index a57d3df..0000000
--- a/assembly-combined-package/assembly-combined/sbin/ext/linkis-ps-metadatamanager-es
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/bin/bash
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-# http://www.apache.org/licenses/LICENSE-2.0
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# description:  metadatamanager-es start cmd
-#
-# Modified for Linkis 1.0.0
-
-
-export SERVER_SUFFIX="linkis-public-enhancements/linkis-ps-metadatamanager-es"
-
-#export DEBUG_PORT=
-
-export SERVER_CLASS=org.apache.linkis.metadatamanager.LinkisMetadataManagerEsApplication
-
-export COMMON_START_BIN=$LINKIS_HOME/sbin/ext/linkis-common-start
-if [[ ! -f "${COMMON_START_BIN}" ]]; then
-    echo "The $COMMON_START_BIN  does not exist!"
-    exit 1
-else
-    sh $COMMON_START_BIN
-fi
diff --git a/assembly-combined-package/assembly-combined/sbin/ext/linkis-ps-metadatamanager-hive b/assembly-combined-package/assembly-combined/sbin/ext/linkis-ps-metadatamanager-hive
deleted file mode 100644
index d263465..0000000
--- a/assembly-combined-package/assembly-combined/sbin/ext/linkis-ps-metadatamanager-hive
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/bin/bash
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-# http://www.apache.org/licenses/LICENSE-2.0
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# description:  metadatamanager-hive start cmd
-#
-# Modified for Linkis 1.0.0
-
-
-export SERVER_SUFFIX="linkis-public-enhancements/linkis-ps-metadatamanager-hive"
-
-#export DEBUG_PORT=
-
-export SERVER_CLASS=org.apache.linkis.metadatamanager.LinkisMetadataManagerHiveApplication
-
-export COMMON_START_BIN=$LINKIS_HOME/sbin/ext/linkis-common-start
-if [[ ! -f "${COMMON_START_BIN}" ]]; then
-    echo "The $COMMON_START_BIN  does not exist!"
-    exit 1
-else
-    sh $COMMON_START_BIN
-fi
\ No newline at end of file
diff --git a/assembly-combined-package/assembly-combined/sbin/ext/linkis-ps-metadatamanager-kafka b/assembly-combined-package/assembly-combined/sbin/ext/linkis-ps-metadatamanager-kafka
deleted file mode 100644
index 88af4d8..0000000
--- a/assembly-combined-package/assembly-combined/sbin/ext/linkis-ps-metadatamanager-kafka
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/bin/bash
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-# http://www.apache.org/licenses/LICENSE-2.0
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# description:  metadatamanager-kafka start cmd
-#
-# Modified for Linkis 1.0.0
-
-
-export SERVER_SUFFIX="linkis-public-enhancements/linkis-ps-metadatamanager-kafka"
-
-#export DEBUG_PORT=
-
-export SERVER_CLASS=org.apache.linkis.metadatamanager.LinkisMetadataManagerKafkaApplication
-
-export COMMON_START_BIN=$LINKIS_HOME/sbin/ext/linkis-common-start
-if [[ ! -f "${COMMON_START_BIN}" ]]; then
-    echo "The $COMMON_START_BIN  does not exist!"
-    exit 1
-else
-    sh $COMMON_START_BIN
-fi
\ No newline at end of file
diff --git a/assembly-combined-package/assembly-combined/sbin/ext/linkis-ps-metadatamanager-mysql b/assembly-combined-package/assembly-combined/sbin/ext/linkis-ps-metadatamanager-mysql
deleted file mode 100644
index 6af428c..0000000
--- a/assembly-combined-package/assembly-combined/sbin/ext/linkis-ps-metadatamanager-mysql
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/bin/bash
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-# http://www.apache.org/licenses/LICENSE-2.0
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# description:  metadatamanager-mysql start cmd
-#
-# Modified for Linkis 1.0.0
-
-
-export SERVER_SUFFIX="linkis-public-enhancements/linkis-ps-metadatamanager-mysql"
-
-#export DEBUG_PORT=
-
-export SERVER_CLASS=org.apache.linkis.metadatamanager.LinkisMetadataManagerMysqlApplication
-
-export COMMON_START_BIN=$LINKIS_HOME/sbin/ext/linkis-common-start
-if [[ ! -f "${COMMON_START_BIN}" ]]; then
-    echo "The $COMMON_START_BIN  does not exist!"
-    exit 1
-else
-    sh $COMMON_START_BIN
-fi
\ No newline at end of file
diff --git a/assembly-combined-package/assembly-combined/src/main/assembly/assembly.xml b/assembly-combined-package/assembly-combined/src/main/assembly/assembly.xml
index 0009d71..1846300 100644
--- a/assembly-combined-package/assembly-combined/src/main/assembly/assembly.xml
+++ b/assembly-combined-package/assembly-combined/src/main/assembly/assembly.xml
@@ -349,75 +349,28 @@
       </fileSet>
 
 
+      <!-- data source manager-->
       <fileSet>
           <directory>
-              ${project.parent.basedir}/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/target/out/lib
+              ../../linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/target/out/lib/
           </directory>
           <outputDirectory>
-              lib/linkis-public-enhancements/linkis-ps-datasourcemanager
+              lib/linkis-public-enhancements/linkis-ps-data-source-manager
           </outputDirectory>
           <includes>
               <include>*.jar</include>
           </includes>
       </fileSet>
-
+      <!-- metadata manager -->
       <fileSet>
           <directory>
-              ${project.parent.basedir}/linkis-public-enhancements/linkis-datasource/metadatamanager/server/target/out/lib
+              ../../linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/server/target/out/lib/
           </directory>
           <outputDirectory>
               lib/linkis-public-enhancements/linkis-ps-metadatamanager
           </outputDirectory>
           <includes>
-              <include>*.jar</include>
-          </includes>
-      </fileSet>
-
-      <fileSet>
-          <directory>
-              ${project.parent.basedir}/linkis-public-enhancements/linkis-datasource/metadatamanager/service/mysql/target/out/lib
-          </directory>
-          <outputDirectory>
-              lib/linkis-public-enhancements/linkis-ps-metadatamanager-mysql
-          </outputDirectory>
-          <includes>
-              <include>*.jar</include>
-          </includes>
-      </fileSet>
-
-      <fileSet>
-          <directory>
-              ${project.parent.basedir}/linkis-public-enhancements/linkis-datasource/metadatamanager/service/kafka/target/out/lib
-          </directory>
-          <outputDirectory>
-              lib/linkis-public-enhancements/linkis-ps-metadatamanager-kafka
-          </outputDirectory>
-          <includes>
-              <include>*.jar</include>
-          </includes>
-      </fileSet>
-
-      <fileSet>
-          <directory>
-              ${project.parent.basedir}/linkis-public-enhancements/linkis-datasource/metadatamanager/service/hive/target/out/lib
-          </directory>
-          <outputDirectory>
-              lib/linkis-public-enhancements/linkis-ps-metadatamanager-hive
-          </outputDirectory>
-          <includes>
-              <include>*.jar</include>
-          </includes>
-      </fileSet>
-
-      <fileSet>
-          <directory>
-              ${project.parent.basedir}/linkis-public-enhancements/linkis-datasource/metadatamanager/service/elasticsearch/target/out/lib
-          </directory>
-          <outputDirectory>
-              lib/linkis-public-enhancements/linkis-ps-metadatamanager-es
-          </outputDirectory>
-          <includes>
-              <include>*.jar</include>
+              <include>**/*</include>
           </includes>
       </fileSet>
   </fileSets>
diff --git a/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/restful/DataSourceCoreRestfulApi.java b/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/restful/DataSourceCoreRestfulApi.java
deleted file mode 100644
index ea30387..0000000
--- a/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/restful/DataSourceCoreRestfulApi.java
+++ /dev/null
@@ -1,368 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.linkis.datasourcemanager.core.restful;
-
-import com.github.pagehelper.PageInfo;
-import org.apache.linkis.common.exception.ErrorException;
-import org.apache.linkis.datasourcemanager.common.ServiceErrorCode;
-import org.apache.linkis.datasourcemanager.common.domain.*;
-import org.apache.linkis.datasourcemanager.core.formdata.FormDataTransformerFactory;
-import org.apache.linkis.datasourcemanager.core.formdata.MultiPartFormDataTransformer;
-import org.apache.linkis.datasourcemanager.core.service.DataSourceInfoService;
-import org.apache.linkis.datasourcemanager.core.service.DataSourceRelateService;
-import org.apache.linkis.datasourcemanager.core.service.MetadataOperateService;
-import org.apache.linkis.datasourcemanager.core.vo.DataSourceVo;
-import org.apache.linkis.datasourcemanager.core.validate.ParameterValidateException;
-import org.apache.linkis.datasourcemanager.core.validate.ParameterValidator;
-import org.apache.linkis.metadatamanager.common.MdmConfiguration;
-import org.apache.linkis.server.Message;
-import org.apache.linkis.server.security.SecurityFilter;
-import org.apache.commons.lang.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-import org.springframework.web.bind.annotation.RequestParam;
-
-import javax.annotation.PostConstruct;
-import javax.servlet.http.HttpServletRequest;
-import javax.validation.ConstraintViolation;
-import javax.validation.ConstraintViolationException;
-import javax.validation.Validator;
-import javax.validation.groups.Default;
-import javax.ws.rs.*;
-import javax.ws.rs.core.Context;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-import java.util.*;
-
-@Path("/data_source")
-@Consumes(MediaType.APPLICATION_JSON)
-@Produces(MediaType.APPLICATION_JSON)
-@Component
-public class DataSourceCoreRestfulApi {
-
-    private static final Logger LOG = LoggerFactory.getLogger(DataSourceCoreRestfulApi.class);
-    @Autowired
-    private DataSourceInfoService dataSourceInfoService;
-
-    @Autowired
-    private DataSourceRelateService dataSourceRelateService;
-
-    @Autowired
-    private ParameterValidator parameterValidator;
-
-    @Autowired
-    private Validator beanValidator;
-
-    @Autowired
-    private MetadataOperateService metadataOperateService;
-
-    private MultiPartFormDataTransformer formDataTransformer;
-
-
-    @PostConstruct
-    public void initRestful() {
-        this.formDataTransformer = FormDataTransformerFactory.buildCustom();
-    }
-
-
-    @GET
-    @Path("/type/all")
-    public Response getAllDataSourceTypes() {
-        return RestfulApiHelper.doAndResponse(() -> {
-            List<DataSourceType> dataSourceTypes = dataSourceRelateService.getAllDataSourceTypes();
-            return Message.ok().data("type_list", dataSourceTypes);
-        }, "/data_source/type/all", "Fail to get all types of data source[获取数据源类型列表失败]");
-    }
-
-
-    @GET
-    @Path("/key_define/type/{type_id}")
-    public Response getKeyDefinitionsByType(@PathParam("type_id") Long dataSourceTypeId) {
-        return RestfulApiHelper.doAndResponse(() -> {
-                    List<DataSourceParamKeyDefinition> keyDefinitions = dataSourceRelateService.getKeyDefinitionsByType(dataSourceTypeId);
-                    return Message.ok().data("key_define", keyDefinitions);
-                }, "/data_source/key_define/type/" + dataSourceTypeId,
-                "Fail to get key definitions of data source type[查询数据源参数键值对失败]");
-    }
-
-
-    @POST
-    @Path("/info/json")
-    public Response insertJsonInfo(DataSource dataSource, @Context HttpServletRequest req) {
-        return RestfulApiHelper.doAndResponse(() -> {
-            String userName = SecurityFilter.getLoginUsername(req);
-            //Bean validation
-            Set<ConstraintViolation<DataSource>> result = beanValidator.validate(dataSource, Default.class);
-            if (result.size() > 0) {
-                throw new ConstraintViolationException(result);
-            }
-            dataSource.setCreateUser(userName);
-            insertDataSource(dataSource);
-            return Message.ok().data("insert_id", dataSource.getId());
-        }, "/data_source/info/json", "Fail to insert data source[新增数据源失败]");
-    }
-
-    @PUT
-    @Path("/info/{data_source_id}/json")
-    public Response updateDataSourceInJson(DataSource dataSource,
-                                           @PathParam("data_source_id") Long dataSourceId,
-                                           @Context HttpServletRequest req) {
-        return RestfulApiHelper.doAndResponse(() -> {
-            String userName = SecurityFilter.getLoginUsername(req);
-            //Bean validation
-            Set<ConstraintViolation<DataSource>> result = beanValidator.validate(dataSource, Default.class);
-            if (result.size() > 0) {
-                throw new ConstraintViolationException(result);
-            }
-            dataSource.setId(dataSourceId);
-            dataSource.setModifyUser(userName);
-            dataSource.setModifyTime(Calendar.getInstance().getTime());
-            DataSource storedDataSource = dataSourceInfoService.getDataSourceInfoBrief(dataSourceId);
-            if (null == storedDataSource) {
-                return Message.error("This data source was not found [更新数据源失败]");
-            }
-            dataSourceInfoService.updateDataSourceInfo(dataSource);
-            return Message.ok().data("update_id", dataSourceId);
-        }, "/data_source/info/" + dataSourceId + "/json", "Fail to update data source[更新数据源失败]");
-    }
-
-    /**
-     * create or update parameter, save a version of parameter,return version id.
-     *
-     * @param params
-     * @param req
-     * @return
-     */
-    @POST
-    @Path("/parameter/{datasource_id}/json")
-    public Response insertJsonParameter(
-            @PathParam("datasource_id") Long datasourceId,
-            @RequestParam("params") Map<String, Object> params,
-            @Context HttpServletRequest req) {
-        return RestfulApiHelper.doAndResponse(() -> {
-            Map<String, Object> connectParams = (Map) params.get("connectParams");
-            String comment = params.get("comment").toString();
-            String userName = SecurityFilter.getLoginUsername(req);
-
-            DataSource dataSource = dataSourceInfoService.getDataSourceInfoBrief(datasourceId);
-            if (null == dataSource) {
-                throw new ErrorException(ServiceErrorCode.DATASOURCE_NOTFOUND_ERROR.getValue(), "datasource not found ");
-            }
-            List<DataSourceParamKeyDefinition> keyDefinitionList = dataSourceRelateService
-                    .getKeyDefinitionsByType(dataSource.getDataSourceTypeId());
-            parameterValidator.validate(keyDefinitionList, connectParams);
-            //Encrypt password value type
-            RestfulApiHelper.encryptPasswordKey(keyDefinitionList, connectParams);
-
-            long versionId = dataSourceInfoService.insertDataSourceParameter(keyDefinitionList, datasourceId, connectParams, userName, comment);
-
-            return Message.ok().data("version", versionId);
-        }, "/data_source/parameter/" + datasourceId + "/json", "Fail to insert data source parameter [保存数据源参数失败]");
-    }
-
-
-    /**
-     * get datasource detail, for current version
-     *
-     * @param dataSourceId
-     * @param request
-     * @return
-     */
-    @GET
-    @Path("/info/{data_source_id}")
-    public Response getInfoByDataSourceId(@PathParam("data_source_id") Long dataSourceId,
-                                          @Context HttpServletRequest request) {
-        return RestfulApiHelper.doAndResponse(() -> {
-            DataSource dataSource = dataSourceInfoService.getDataSourceInfo(dataSourceId);
-            // Decrypt
-            if (null != dataSource) {
-                RestfulApiHelper.decryptPasswordKey(dataSourceRelateService.getKeyDefinitionsByType(dataSource.getDataSourceTypeId())
-                        , dataSource.getConnectParams());
-            }
-            return Message.ok().data("info", dataSource);
-        }, "/data_source/info/" + dataSourceId, "Fail to access data source[获取数据源信息失败]");
-    }
-
-    /**
-     * get datasource detail
-     *
-     * @param dataSourceId
-     * @param version
-     * @return
-     */
-    @GET
-    @Path("/info/{data_source_id}/{version}")
-    public Response getInfoByDataSourceIdAndVersion(@PathParam("data_source_id") Long dataSourceId,
-                                                    @PathParam("version") Long version) {
-        return RestfulApiHelper.doAndResponse(() -> {
-            DataSource dataSource = dataSourceInfoService.getDataSourceInfo(dataSourceId, version);
-            // Decrypt
-            if (null != dataSource) {
-                RestfulApiHelper.decryptPasswordKey(dataSourceRelateService.getKeyDefinitionsByType(dataSource.getDataSourceTypeId())
-                        , dataSource.getConnectParams());
-            }
-            return Message.ok().data("info", dataSource);
-        }, "/data_source/info/" + dataSourceId + "/" + version, "Fail to access data source[获取数据源信息失败]");
-    }
-
-    /**
-     * get verion list for datasource
-     *
-     * @param dataSourceId
-     * @param request
-     * @return
-     */
-    @GET
-    @Path("/{data_source_id}/versions")
-    public Response getVersionList(@PathParam("data_source_id") Long dataSourceId,
-                                   @Context HttpServletRequest request) {
-        return RestfulApiHelper.doAndResponse(() -> {
-            DataSource dataSource = dataSourceInfoService.getDataSourceInfoBrief(dataSourceId);
-            List<DatasourceVersion> versions = dataSourceInfoService.getVersionList(dataSourceId);
-            // Decrypt
-            if (null != versions) {
-                versions.forEach(version -> {
-                    RestfulApiHelper.decryptPasswordKey(dataSourceRelateService.getKeyDefinitionsByType(dataSource.getDataSourceTypeId())
-                            , version.getConnectParams());
-                });
-            }
-            return Message.ok().data("versions", versions);
-        }, "/data_source/" + dataSourceId + "/versions", "Fail to access data source[获取数据源信息失败]");
-    }
-
-
-    @POST
-    @Path("/publish/{datasource_id}/{version_id}")
-    public Response publishByDataSourceId(@PathParam("datasource_id") Long dataSourceId,
-                                          @PathParam("version_id") Long versionId,
-                                          @Context HttpServletRequest request) {
-        return RestfulApiHelper.doAndResponse(() -> {
-            int updateResult = dataSourceInfoService.publishByDataSourceId(dataSourceId, versionId);
-            if (0 == updateResult) {
-                return Message.error("publish error");
-            }
-            return Message.ok();
-        }, "/data_source/publish/" + dataSourceId + "/" + versionId, "Fail to publish datasource[数据源版本发布失败]");
-    }
-
-
-    /**
-     * Dangerous operation!
-     *
-     * @param dataSourceId
-     * @return
-     */
-    @DELETE
-    @Path("/info/{data_source_id}")
-    public Response removeDataSource(@PathParam("data_source_id") Long dataSourceId) {
-        return RestfulApiHelper.doAndResponse(() -> {
-            Long removeId = dataSourceInfoService.removeDataSourceInfo(dataSourceId, "");
-            if (removeId < 0) {
-                return Message.error("Fail to remove data source[删除数据源信息失败], [id:" + dataSourceId + "]");
-            }
-            return Message.ok().data("remove_id", removeId);
-        }, "/data_source/info/" + dataSourceId, "Fail to remove data source[删除数据源信息失败]");
-    }
-
-    @PUT
-    @Path("/info/{data_source_id}/expire")
-    public Response expireDataSource(@PathParam("data_source_id") Long dataSourceId) {
-        return RestfulApiHelper.doAndResponse(() -> {
-            Long expireId = dataSourceInfoService.expireDataSource(dataSourceId);
-            if (expireId < 0) {
-                return Message.error("Fail to expire data source[数据源过期失败], [id:" + dataSourceId + "]");
-            }
-            return Message.ok().data("expire_id", expireId);
-        }, "/data_source/info/" + dataSourceId + "/expire", "Fail to expire data source[数据源过期失败]");
-    }
-
-    /**
-     * get datasource connect params for current version
-     * @param dataSourceId
-     * @param req
-     * @return
-     */
-    @GET
-    @Path("/{data_source_id}/connect_params")
-    public Response getConnectParams(@PathParam("data_source_id") Long dataSourceId,
-                                      @Context HttpServletRequest req) {
-        return RestfulApiHelper.doAndResponse(() -> {
-            String operator = SecurityFilter.getLoginUsername(req);
-            DataSource dataSource = dataSourceInfoService.getDataSourceInfoForConnect(dataSourceId);
-            Map<String, Object> connectParams = dataSource.getConnectParams();
-            RestfulApiHelper.decryptPasswordKey(dataSourceRelateService.getKeyDefinitionsByType(dataSource.getDataSourceTypeId())
-                    , connectParams);
-            return Message.ok().data("connectParams", connectParams);
-
-        }, "/data_source/" + dataSourceId  + "/connect_params", "Fail to connect data source[连接数据源失败]");
-    }
-
-    @PUT
-    @Path("/{data_source_id}/{version}/op/connect")
-    public Response connectDataSource(@PathParam("data_source_id") Long dataSourceId,
-                                      @PathParam("version") Long version,
-                                      @Context HttpServletRequest req) {
-        return RestfulApiHelper.doAndResponse(() -> {
-            String operator = SecurityFilter.getLoginUsername(req);
-            DataSource dataSource = dataSourceInfoService.getDataSourceInfoForConnect(dataSourceId, version);
-
-
-            String dataSourceTypeName = dataSource.getDataSourceType().getName();
-            String mdRemoteServiceName = MdmConfiguration.METADATA_SERVICE_APPLICATION.getValue()
-                    + (StringUtils.isNotBlank(dataSourceTypeName) ? ("-" + dataSourceTypeName.toLowerCase()) : "");
-
-            metadataOperateService.doRemoteConnect(mdRemoteServiceName, operator, dataSource.getConnectParams());
-            ;
-            return Message.ok().data("ok", true);
-        }, "/data_source/" + dataSourceId + "/" + version + "/op/connect", "Fail to connect data source[连接数据源失败]");
-    }
-
-    @GET
-    @Path("/info")
-    public Response queryDataSource(@QueryParam("system") String createSystem,
-                                    @QueryParam("name") String dataSourceName,
-                                    @QueryParam("typeId") Long dataSourceTypeId,
-                                    @QueryParam("identifies") String identifies,
-                                    @QueryParam("currentPage") Integer currentPage,
-                                    @QueryParam("pageSize") Integer pageSize) {
-        return RestfulApiHelper.doAndResponse(() -> {
-            DataSourceVo dataSourceVo = new DataSourceVo(dataSourceName, dataSourceTypeId,
-                    identifies, createSystem);
-            dataSourceVo.setCurrentPage(null != currentPage ? currentPage : 1);
-            dataSourceVo.setPageSize(null != pageSize ? pageSize : 10);
-            PageInfo<DataSource> pageInfo = dataSourceInfoService.queryDataSourceInfoPage(dataSourceVo);
-            List<DataSource> queryList = pageInfo.getList();
-            return Message.ok().data("query_list", queryList).data("totalPage", pageInfo.getTotal());
-        }, "/data_source/info", "Fail to query page of data source[查询数据源失败]");
-    }
-
-    /**
-     * Inner method to insert data source
-     *
-     * @param dataSource data source entity
-     * @throws ParameterValidateException
-     */
-    private void insertDataSource(DataSource dataSource) throws ErrorException {
-        List<DataSourceParamKeyDefinition> keyDefinitionList = dataSourceRelateService
-                .getKeyDefinitionsByType(dataSource.getDataSourceTypeId());
-        dataSource.setKeyDefinitions(keyDefinitionList);
-        dataSourceInfoService.saveDataSourceInfo(dataSource);
-    }
-}
diff --git a/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/validate/DataSourceParameterValidator.java b/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/validate/DataSourceParameterValidator.java
deleted file mode 100644
index ffb725f..0000000
--- a/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/validate/DataSourceParameterValidator.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- 
-package org.apache.linkis.datasourcemanager.core.validate;
-
-import org.apache.linkis.datasourcemanager.common.domain.DataSourceParamKeyDefinition;
-import org.apache.linkis.datasourcemanager.core.validate.strategy.RegExpParameterValidateStrategy;
-import org.apache.linkis.datasourcemanager.core.validate.strategy.TypeParameterValidateStrategy;
-import org.apache.commons.lang.StringUtils;
-import org.springframework.stereotype.Component;
-
-import javax.annotation.PostConstruct;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-@Component
-public class DataSourceParameterValidator implements ParameterValidator {
-    @PostConstruct
-    public void initToRegister(){
-        registerStrategy(new TypeParameterValidateStrategy());
-        registerStrategy(new RegExpParameterValidateStrategy());
-    }
-    /**
-     * strategies list
-     */
-    private List<ParameterValidateStrategy> strategies = new ArrayList<>();
-
-    @Override
-    public void registerStrategy(ParameterValidateStrategy strategy) {
-        strategies.add(strategy);
-    }
-
-    @Override
-    public void validate(List<DataSourceParamKeyDefinition> paramKeyDefinitions,
-                         Map<String, Object> parameters) throws ParameterValidateException{
-        for(DataSourceParamKeyDefinition paramKeyDefinition : paramKeyDefinitions){
-            String keyName = paramKeyDefinition.getKey();
-            Object keyValue = parameters.get(keyName);
-            DataSourceParamKeyDefinition.ValueType valueType = paramKeyDefinition.getValueType();
-            if(null == keyValue){
-                String defaultValue = paramKeyDefinition.getDefaultValue();
-                if(StringUtils.isNotBlank(defaultValue) &&
-                        valueType == DataSourceParamKeyDefinition.ValueType.SELECT){
-                    defaultValue = defaultValue.split(",")[0].trim();
-                }
-                keyValue = defaultValue;
-            }
-            if(null == keyValue || StringUtils.isBlank(String.valueOf(keyValue))){
-                if(paramKeyDefinition.isRequire()) {
-                    throw new ParameterValidateException("Param Validate Failed[参数校验出错], [the value of key: '"
-                            + keyName + " cannot be blank']");
-                }
-                continue;
-            }
-            for(ParameterValidateStrategy validateStrategy : strategies){
-                if(validateStrategy.accept(valueType)) {
-                    validateStrategy.validate(paramKeyDefinition, keyValue);
-                }
-            }
-        }
-    }
-
-    @Override
-    public List<ParameterValidateStrategy> getStrategies() {
-        return strategies;
-    }
-}
diff --git a/linkis-public-enhancements/linkis-datasource/datasource-client/pom.xml b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/pom.xml
similarity index 93%
rename from linkis-public-enhancements/linkis-datasource/datasource-client/pom.xml
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-client/pom.xml
index be680ef..8b08396 100644
--- a/linkis-public-enhancements/linkis-datasource/datasource-client/pom.xml
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/pom.xml
@@ -22,7 +22,7 @@
     <modelVersion>4.0.0</modelVersion>
 
     <parent>
-        <artifactId>linkis-public-enhancements</artifactId>
+        <artifactId>linkis</artifactId>
         <groupId>org.apache.linkis</groupId>
         <version>1.0.3</version>
         <relativePath>../../pom.xml</relativePath>
@@ -39,13 +39,13 @@
 
         <dependency>
             <groupId>org.apache.linkis</groupId>
-            <artifactId>linkis-datasourcemanager-common</artifactId>
+            <artifactId>linkis-datasource-manager-common</artifactId>
             <version>${linkis.version}</version>
         </dependency>
 
         <dependency>
             <groupId>org.apache.linkis</groupId>
-            <artifactId>linkis-metadatamanager-common</artifactId>
+            <artifactId>linkis-metadata-manager-common</artifactId>
             <version>${linkis.version}</version>
         </dependency>
     </dependencies>
diff --git a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/AbstractRemoteClient.scala b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/AbstractRemoteClient.scala
similarity index 100%
rename from linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/AbstractRemoteClient.scala
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/AbstractRemoteClient.scala
diff --git a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/DataSourceRemoteClient.scala b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/DataSourceRemoteClient.scala
similarity index 64%
rename from linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/DataSourceRemoteClient.scala
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/DataSourceRemoteClient.scala
index 84e4257..65d5fda 100644
--- a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/DataSourceRemoteClient.scala
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/DataSourceRemoteClient.scala
@@ -21,19 +21,18 @@ import org.apache.linkis.datasource.client.request.{CreateDataSourceAction, Data
 import org.apache.linkis.datasource.client.response.{CreateDataSourceResult, DataSourceTestConnectResult, DeleteDataSourceResult, ExpireDataSourceResult, GetAllDataSourceTypesResult, GetConnectParamsByDataSourceIdResult, GetDataSourceVersionsResult, GetInfoByDataSourceIdResult, GetKeyTypeDatasourceResult, PublishDataSourceVersionResult, QueryDataSourceEnvResult, QueryDataSourceResult, UpdateDataSourceParameterResult, UpdateDataSourceResult}
 
 trait DataSourceRemoteClient extends RemoteClient {
-  def getAllDataSourceTypes(action:GetAllDataSourceTypesAction): GetAllDataSourceTypesResult
-  def queryDataSourceEnv(action:QueryDataSourceEnvAction): QueryDataSourceEnvResult
-  def getInfoByDataSourceId(action:GetInfoByDataSourceIdAction): GetInfoByDataSourceIdResult
-  def queryDataSource(action:QueryDataSourceAction): QueryDataSourceResult
+  def getAllDataSourceTypes(action: GetAllDataSourceTypesAction): GetAllDataSourceTypesResult
+  def queryDataSourceEnv(action: QueryDataSourceEnvAction): QueryDataSourceEnvResult
+  def getInfoByDataSourceId(action: GetInfoByDataSourceIdAction): GetInfoByDataSourceIdResult
+  def queryDataSource(action: QueryDataSourceAction): QueryDataSourceResult
   def getConnectParams(action: GetConnectParamsByDataSourceIdAction): GetConnectParamsByDataSourceIdResult
-  def createDataSource(action:CreateDataSourceAction):CreateDataSourceResult
-  def getDataSourceTestConnect(action:DataSourceTestConnectAction):DataSourceTestConnectResult
-  def deleteDataSource(action:DeleteDataSourceAction):DeleteDataSourceResult
-  def expireDataSource(action:ExpireDataSourceAction):ExpireDataSourceResult
-  def getDataSourceVersions(action:GetDataSourceVersionsAction):GetDataSourceVersionsResult
-  def publishDataSourceVersion(action:PublishDataSourceVersionAction):PublishDataSourceVersionResult
-  def updateDataSource(action: UpdateDataSourceAction):UpdateDataSourceResult
-  def updateDataSourceParameter(action: UpdateDataSourceParameterAction):UpdateDataSourceParameterResult
-  def getKeyDefinitionsByType(action:GetKeyTypeDatasourceAction):GetKeyTypeDatasourceResult
-
+  def createDataSource(action: CreateDataSourceAction): CreateDataSourceResult
+  def getDataSourceTestConnect(action: DataSourceTestConnectAction): DataSourceTestConnectResult
+  def deleteDataSource(action: DeleteDataSourceAction): DeleteDataSourceResult
+  def expireDataSource(action: ExpireDataSourceAction): ExpireDataSourceResult
+  def getDataSourceVersions(action: GetDataSourceVersionsAction): GetDataSourceVersionsResult
+  def publishDataSourceVersion(action: PublishDataSourceVersionAction): PublishDataSourceVersionResult
+  def updateDataSource(action: UpdateDataSourceAction): UpdateDataSourceResult
+  def updateDataSourceParameter(action: UpdateDataSourceParameterAction): UpdateDataSourceParameterResult
+  def getKeyDefinitionsByType(action: GetKeyTypeDatasourceAction): GetKeyTypeDatasourceResult
 }
diff --git a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/MetaDataRemoteClient.scala b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/MetaDataRemoteClient.scala
similarity index 75%
rename from linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/MetaDataRemoteClient.scala
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/MetaDataRemoteClient.scala
index 3859efa..6cd6f76 100644
--- a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/MetaDataRemoteClient.scala
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/MetaDataRemoteClient.scala
@@ -21,9 +21,9 @@ import org.apache.linkis.datasource.client.request.{MetadataGetColumnsAction, Me
 import org.apache.linkis.datasource.client.response.{MetadataGetColumnsResult, MetadataGetDatabasesResult, MetadataGetPartitionsResult, MetadataGetTablePropsResult, MetadataGetTablesResult}
 
 trait MetaDataRemoteClient extends RemoteClient {
-  def getDatabases(action:MetadataGetDatabasesAction): MetadataGetDatabasesResult
-  def getTables(action:MetadataGetTablesAction): MetadataGetTablesResult
-  def getTableProps(action:MetadataGetTablePropsAction): MetadataGetTablePropsResult
-  def getPartitions(action:MetadataGetPartitionsAction): MetadataGetPartitionsResult
-  def getColumns(action:MetadataGetColumnsAction): MetadataGetColumnsResult
+  def getDatabases(action: MetadataGetDatabasesAction): MetadataGetDatabasesResult
+  def getTables(action: MetadataGetTablesAction): MetadataGetTablesResult
+  def getTableProps(action: MetadataGetTablePropsAction): MetadataGetTablePropsResult
+  def getPartitions(action: MetadataGetPartitionsAction): MetadataGetPartitionsResult
+  def getColumns(action: MetadataGetColumnsAction): MetadataGetColumnsResult
 }
diff --git a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/RemoteClient.scala b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/RemoteClient.scala
similarity index 100%
rename from linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/RemoteClient.scala
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/RemoteClient.scala
diff --git a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/config/DatasourceClientConfig.scala b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/config/DatasourceClientConfig.scala
similarity index 89%
rename from linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/config/DatasourceClientConfig.scala
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/config/DatasourceClientConfig.scala
index c98771b..c347edb 100644
--- a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/config/DatasourceClientConfig.scala
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/config/DatasourceClientConfig.scala
@@ -20,7 +20,8 @@ package org.apache.linkis.datasource.client.config
 import org.apache.linkis.common.conf.CommonVars
 
 object DatasourceClientConfig {
-  var METADATA_SERVICE_MODULE: CommonVars[String] = CommonVars.apply("wds.linkis.server.mdm.module.name", "metadata")
+  var METADATA_SERVICE_MODULE: CommonVars[String] = CommonVars.apply("wds.linkis.server.mdm.module.name", "metadatamanager")
+
+  var DATA_SOURCE_SERVICE_MODULE: CommonVars[String] = CommonVars.apply("wds.linkis.server.dsm.module.name", "data-source-manager")
 
-  var DATA_SOURCE_SERVICE_MODULE: CommonVars[String] = CommonVars.apply("wds.linkis.server.dsm.module.name", "datasource")
 }
diff --git a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/exception/DataSourceClientBuilderException.scala b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/exception/DataSourceClientBuilderException.scala
similarity index 87%
rename from linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/exception/DataSourceClientBuilderException.scala
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/exception/DataSourceClientBuilderException.scala
index 9a80949..89d32f9 100644
--- a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/exception/DataSourceClientBuilderException.scala
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/exception/DataSourceClientBuilderException.scala
@@ -19,4 +19,9 @@ package org.apache.linkis.datasource.client.exception
 
 import org.apache.linkis.common.exception.ErrorException
 
-class DataSourceClientBuilderException(errorDesc: String) extends ErrorException(31000, errorDesc)
+class DataSourceClientBuilderException(errorDesc: String) extends ErrorException(31000, errorDesc) {
+  def this(errorDesc: String, t: Throwable) = {
+    this(errorDesc)
+    super.initCause(t)
+  }
+}
diff --git a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/impl/LinkisDataSourceRemoteClient.scala b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/impl/LinkisDataSourceRemoteClient.scala
similarity index 73%
rename from linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/impl/LinkisDataSourceRemoteClient.scala
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/impl/LinkisDataSourceRemoteClient.scala
index 0928cbb..f9d259f 100644
--- a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/impl/LinkisDataSourceRemoteClient.scala
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/impl/LinkisDataSourceRemoteClient.scala
@@ -17,8 +17,8 @@
 
 package org.apache.linkis.datasource.client.impl
 
-import org.apache.linkis.datasource.client.request.{GetAllDataSourceTypesAction, GetConnectParamsByDataSourceIdAction, GetInfoByDataSourceIdAction, QueryDataSourceAction, QueryDataSourceEnvAction}
-import org.apache.linkis.datasource.client.response.{GetAllDataSourceTypesResult, GetConnectParamsByDataSourceIdResult, GetInfoByDataSourceIdResult, QueryDataSourceEnvResult, QueryDataSourceResult}
+import org.apache.linkis.datasource.client.request.{CreateDataSourceAction, DataSourceTestConnectAction, DeleteDataSourceAction, ExpireDataSourceAction, GetAllDataSourceTypesAction, GetConnectParamsByDataSourceIdAction, GetDataSourceVersionsAction, GetInfoByDataSourceIdAction, GetKeyTypeDatasourceAction, PublishDataSourceVersionAction, QueryDataSourceAction, QueryDataSourceEnvAction, UpdateDataSourceAction, UpdateDataSourceParameterAction}
+import org.apache.linkis.datasource.client.response.{CreateDataSourceResult, DataSourceTestConnectResult, DeleteDataSourceResult, ExpireDataSourceResult, GetAllDataSourceTypesResult, GetConnectParamsByDataSourceIdResult, GetDataSourceVersionsResult, GetInfoByDataSourceIdResult, GetKeyTypeDatasourceResult, PublishDataSourceVersionResult, QueryDataSourceEnvResult, QueryDataSourceResult, UpdateDataSourceParameterResult, UpdateDataSourceResult}
 import org.apache.linkis.datasource.client.{AbstractRemoteClient, DataSourceRemoteClient}
 import org.apache.linkis.httpclient.dws.DWSHttpClient
 import org.apache.linkis.httpclient.dws.config.DWSClientConfig
@@ -27,9 +27,9 @@ import org.apache.linkis.httpclient.dws.config.DWSClientConfig
 class LinkisDataSourceRemoteClient(clientConfig: DWSClientConfig) extends AbstractRemoteClient with DataSourceRemoteClient {
   protected override val dwsHttpClient = new DWSHttpClient(clientConfig, "DataSource-Client")
 
-  override def getAllDataSourceTypes(action:GetAllDataSourceTypesAction): GetAllDataSourceTypesResult =  execute(action).asInstanceOf[GetAllDataSourceTypesResult]
+  override def getAllDataSourceTypes(action: GetAllDataSourceTypesAction): GetAllDataSourceTypesResult = execute(action).asInstanceOf[GetAllDataSourceTypesResult]
 
-  override def queryDataSourceEnv(action:QueryDataSourceEnvAction): QueryDataSourceEnvResult = execute(action).asInstanceOf[QueryDataSourceEnvResult]
+  override def queryDataSourceEnv(action: QueryDataSourceEnvAction): QueryDataSourceEnvResult = execute(action).asInstanceOf[QueryDataSourceEnvResult]
 
   override def getInfoByDataSourceId(action: GetInfoByDataSourceIdAction): GetInfoByDataSourceIdResult = execute(action).asInstanceOf[GetInfoByDataSourceIdResult]
 
diff --git a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/impl/LinkisMetaDataRemoteClient.scala b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/impl/LinkisMetaDataRemoteClient.scala
similarity index 100%
rename from linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/impl/LinkisMetaDataRemoteClient.scala
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/impl/LinkisMetaDataRemoteClient.scala
diff --git a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/CreateDataSourceAction.scala b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/CreateDataSourceAction.scala
similarity index 94%
rename from linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/CreateDataSourceAction.scala
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/CreateDataSourceAction.scala
index 278359d..4f3e6d3 100644
--- a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/CreateDataSourceAction.scala
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/CreateDataSourceAction.scala
@@ -23,7 +23,7 @@ import org.apache.linkis.httpclient.dws.DWSHttpClient
 import org.apache.linkis.httpclient.request.POSTAction
 
 import java.util
-import scala.collection.JavaConversions._
+import scala.collection.JavaConverters._
 
 class CreateDataSourceAction extends POSTAction with DataSourceAction{
   override def getRequestPayload: String = DWSHttpClient.jacksonJson.writeValueAsString(getRequestPayloads)
@@ -49,7 +49,7 @@ object CreateDataSourceAction {
     }
 
     def addRequestPayload(key: String, value: Any): Builder = {
-      if(value != null) this.payload.put(key, value)
+      if (value != null) this.payload.put(key, value)
       this
     }
 
@@ -61,7 +61,7 @@ object CreateDataSourceAction {
     def build(): CreateDataSourceAction = {
       val action = new CreateDataSourceAction
       action.setUser(user)
-      this.payload.foreach(k=>{
+      this.payload.asScala.foreach(k => {
         action.addRequestPayload(k._1, k._2)
       })
       action
diff --git a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/DataSourceAction.scala b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/DataSourceAction.scala
similarity index 100%
rename from linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/DataSourceAction.scala
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/DataSourceAction.scala
diff --git a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/DataSourceTestConnectAction.scala b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/DataSourceTestConnectAction.scala
similarity index 83%
rename from linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/DataSourceTestConnectAction.scala
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/DataSourceTestConnectAction.scala
index 5531bfd..49d45cf 100644
--- a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/DataSourceTestConnectAction.scala
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/DataSourceTestConnectAction.scala
@@ -26,9 +26,9 @@ import org.apache.linkis.httpclient.request.PutAction
 class DataSourceTestConnectAction private() extends PutAction with DataSourceAction {
   private var user: String = _
 
-  private var dataSourceId:String= _
+  private var dataSourceId: String = _
 
-  private var version:String = _
+  private var version: String = _
 
   override def setUser(user: String): Unit = this.user = user
 
@@ -43,31 +43,31 @@ object DataSourceTestConnectAction {
 
   class Builder private[DataSourceTestConnectAction]() {
     private var user: String = _
-    private var dataSourceId:String=_
-    private var version:String=_
+    private var dataSourceId: String = _
+    private var version: String = _
 
-    def setUser(user:String):Builder={
+    def setUser(user: String): Builder = {
       this.user = user
       this
     }
 
-    def setDataSourceId(dataSourceId:String): Builder ={
+    def setDataSourceId(dataSourceId: String): Builder = {
       this.dataSourceId = dataSourceId
       this
     }
 
-    def setVersion(version:String): Builder ={
+    def setVersion(version: String): Builder = {
       this.version = version
       this
     }
 
     def build(): DataSourceTestConnectAction = {
-      if(dataSourceId == null) throw new DataSourceClientBuilderException("dataSourceId is needed!")
+      if (dataSourceId == null) throw new DataSourceClientBuilderException("dataSourceId is needed!")
       if(version == null) throw new DataSourceClientBuilderException("version is needed!")
       if(user == null) throw new DataSourceClientBuilderException("user is needed!")
 
       val action = new DataSourceTestConnectAction()
-      action.dataSourceId =dataSourceId
+      action.dataSourceId = dataSourceId
       action.version = version
       action.user = user
 
diff --git a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/DeleteDataSourceAction.scala b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/DeleteDataSourceAction.scala
similarity index 86%
rename from linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/DeleteDataSourceAction.scala
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/DeleteDataSourceAction.scala
index 5e9c9b7..e373742 100644
--- a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/DeleteDataSourceAction.scala
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/DeleteDataSourceAction.scala
@@ -25,7 +25,7 @@ import org.apache.linkis.httpclient.request.DeleteAction
 class DeleteDataSourceAction extends DeleteAction with DataSourceAction  {
   private var user: String = _
 
-  private var resourceId:String=_
+  private var resourceId: String = _
 
   override def setUser(user: String): Unit = this.user = user
 
@@ -37,20 +37,20 @@ object DeleteDataSourceAction{
   def builder(): Builder = new Builder
   class Builder private[DeleteDataSourceAction]() {
     private var user: String = _
-    private var resourceId:String=_
+    private var resourceId: String = _
 
-    def setUser(user: String): Builder ={
+    def setUser(user: String): Builder = {
       this.user = user
       this
     }
 
-    def setResourceId(resourceId:String): Builder ={
+    def setResourceId(resourceId: String): Builder = {
       this.resourceId = resourceId
       this
     }
 
-    def builder():DeleteDataSourceAction={
-      if(user == null) throw new DataSourceClientBuilderException("user is needed!")
+    def builder(): DeleteDataSourceAction = {
+      if (user == null) throw new DataSourceClientBuilderException("user is needed!")
       if(resourceId == null) throw new DataSourceClientBuilderException("resourceId is needed!")
 
       val action = new DeleteDataSourceAction
diff --git a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/ExpireDataSourceAction.scala b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/ExpireDataSourceAction.scala
similarity index 83%
rename from linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/ExpireDataSourceAction.scala
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/ExpireDataSourceAction.scala
index e30dc34..ef20f16 100644
--- a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/ExpireDataSourceAction.scala
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/ExpireDataSourceAction.scala
@@ -27,35 +27,35 @@ class ExpireDataSourceAction extends PutAction with DataSourceAction {
 
   private var user: String = _
 
-  private var dataSourceId:String = _
+  private var dataSourceId: String = _
 
   override def setUser(user: String): Unit = this.user = user
 
   override def getUser: String = this.user
 
-  override def suffixURLs: Array[String] = Array(DATA_SOURCE_SERVICE_MODULE.getValue, "info",dataSourceId, "expire")
+  override def suffixURLs: Array[String] = Array(DATA_SOURCE_SERVICE_MODULE.getValue, "info", dataSourceId, "expire")
 }
 object ExpireDataSourceAction{
   def builder(): Builder = new Builder
   class Builder private[ExpireDataSourceAction]() {
     private var user: String = _
-    private var dataSourceId:String = _
+    private var dataSourceId: String = _
 
-    def setUser(user:String):Builder={
+    def setUser(user: String): Builder = {
       this.user = user
       this
     }
 
-    def setDataSourceId(dataSourceId:String): Builder ={
+    def setDataSourceId(dataSourceId: String): Builder = {
       this.dataSourceId = dataSourceId
       this
     }
     def build(): ExpireDataSourceAction = {
-      if(dataSourceId == null) throw new DataSourceClientBuilderException("dataSourceId is needed!")
+      if (dataSourceId == null) throw new DataSourceClientBuilderException("dataSourceId is needed!")
       if(user == null) throw new DataSourceClientBuilderException("user is needed!")
 
       val action = new ExpireDataSourceAction()
-      action.dataSourceId =dataSourceId
+      action.dataSourceId = dataSourceId
       action.user = user
       action
     }
diff --git a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/GetAllDataSourceTypesAction.scala b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/GetAllDataSourceTypesAction.scala
similarity index 98%
rename from linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/GetAllDataSourceTypesAction.scala
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/GetAllDataSourceTypesAction.scala
index 0c56d2e..d4582c2 100644
--- a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/GetAllDataSourceTypesAction.scala
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/GetAllDataSourceTypesAction.scala
@@ -24,7 +24,7 @@ import org.apache.linkis.httpclient.request.GetAction
 class GetAllDataSourceTypesAction extends GetAction with DataSourceAction {
   override def suffixURLs: Array[String] = Array(DATA_SOURCE_SERVICE_MODULE.getValue, "type", "all")
 
-  private var user:String = _
+  private var user: String = _
 
   override def setUser(user: String): Unit = this.user = user
 
diff --git a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/GetConnectParamsByDataSourceIdAction.scala b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/GetConnectParamsByDataSourceIdAction.scala
similarity index 93%
rename from linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/GetConnectParamsByDataSourceIdAction.scala
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/GetConnectParamsByDataSourceIdAction.scala
index 67b5e1f..0c78ec6 100644
--- a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/GetConnectParamsByDataSourceIdAction.scala
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/GetConnectParamsByDataSourceIdAction.scala
@@ -27,7 +27,7 @@ class GetConnectParamsByDataSourceIdAction extends GetAction with DataSourceActi
 
   override def suffixURLs: Array[String] = Array(DATA_SOURCE_SERVICE_MODULE.getValue, dataSourceId.toString, "connect_params")
 
-  private var user:String = _
+  private var user: String = _
 
   override def setUser(user: String): Unit = this.user = user
 
@@ -40,7 +40,7 @@ object GetConnectParamsByDataSourceIdAction {
 
   class Builder private[GetConnectParamsByDataSourceIdAction]() {
     private var dataSourceId: Long = _
-    private var system:String = _
+    private var system: String = _
     private var user: String = _
 
     def setUser(user: String): Builder = {
@@ -59,7 +59,7 @@ object GetConnectParamsByDataSourceIdAction {
     }
 
     def build(): GetConnectParamsByDataSourceIdAction = {
-      if(dataSourceId == null) throw new DataSourceClientBuilderException("dataSourceId is needed!")
+      if (dataSourceId == null) throw new DataSourceClientBuilderException("dataSourceId is needed!")
       if(system == null) throw new DataSourceClientBuilderException("system is needed!")
       if(user == null) throw new DataSourceClientBuilderException("user is needed!")
 
diff --git a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/GetInfoByDataSourceIdAction.scala b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/GetConnectParamsByDataSourceNameAction.scala
similarity index 51%
copy from linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/GetInfoByDataSourceIdAction.scala
copy to linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/GetConnectParamsByDataSourceNameAction.scala
index 24bb3a0..19d6de0 100644
--- a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/GetInfoByDataSourceIdAction.scala
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/GetConnectParamsByDataSourceNameAction.scala
@@ -17,29 +17,33 @@
 
 package org.apache.linkis.datasource.client.request
 
-import org.apache.linkis.datasource.client.config.DatasourceClientConfig.DATA_SOURCE_SERVICE_MODULE
+import java.net.URLEncoder
+import java.nio.charset.StandardCharsets
+
 import org.apache.linkis.datasource.client.exception.DataSourceClientBuilderException
+import org.apache.linkis.datasource.client.config.DatasourceClientConfig.DATA_SOURCE_SERVICE_MODULE
 import org.apache.linkis.httpclient.request.GetAction
+/**
+  * Get version parameters from data source
+ */
+class GetConnectParamsByDataSourceNameAction extends GetAction with DataSourceAction{
+  private var dataSourceName: String = _
 
+  private var user: String = _
 
-class GetInfoByDataSourceIdAction extends GetAction with DataSourceAction {
-  private var dataSourceId: Long = _
-
-  override def suffixURLs: Array[String] = Array(DATA_SOURCE_SERVICE_MODULE.getValue, "info", dataSourceId.toString)
-
-  private var user:String = _
+  override def suffixURLs: Array[String] = Array(DATA_SOURCE_SERVICE_MODULE.getValue, "name", dataSourceName, "connect_params")
 
   override def setUser(user: String): Unit = this.user = user
 
-  override def getUser: String = this.user
+  override def getUser: String = user
 }
 
-object GetInfoByDataSourceIdAction {
+object GetConnectParamsByDataSourceNameAction{
   def builder(): Builder = new Builder
 
-  class Builder private[GetInfoByDataSourceIdAction]() {
-    private var dataSourceId: Long = _
-    private var system:String = _
+  class Builder private[GetConnectParamsByDataSourceNameAction]() {
+    private var dataSourceName: String = _
+    private var system: String = _
     private var user: String = _
 
     def setUser(user: String): Builder = {
@@ -47,8 +51,8 @@ object GetInfoByDataSourceIdAction {
       this
     }
 
-    def setDataSourceId(dataSourceId: Long): Builder = {
-      this.dataSourceId = dataSourceId
+    def setDataSourceName(dataSourceName: String): Builder = {
+      this.dataSourceName = dataSourceName
       this
     }
 
@@ -57,17 +61,23 @@ object GetInfoByDataSourceIdAction {
       this
     }
 
-    def build(): GetInfoByDataSourceIdAction = {
-      if(dataSourceId == null) throw new DataSourceClientBuilderException("dataSourceId is needed!")
+    def build(): GetConnectParamsByDataSourceNameAction = {
+      if (dataSourceName == null) throw new DataSourceClientBuilderException("dataSourceId is needed!")
       if(system == null) throw new DataSourceClientBuilderException("system is needed!")
       if(user == null) throw new DataSourceClientBuilderException("user is needed!")
-
-      val getInfoByDataSourceIdAction = new GetInfoByDataSourceIdAction
-      getInfoByDataSourceIdAction.dataSourceId = this.dataSourceId
-      getInfoByDataSourceIdAction.setParameter("system", system)
-      getInfoByDataSourceIdAction.setUser(user)
-      getInfoByDataSourceIdAction
+      // Use URIEncoder to encode the datSourceName
+      var requestDataSourceName = this.dataSourceName
+      try {
+        requestDataSourceName = URLEncoder.encode(dataSourceName, StandardCharsets.UTF_8.name())
+      } catch {
+        case e: Exception =>
+          throw new DataSourceClientBuilderException(s"Cannot encode the name of data source:[$dataSourceName] for request", e)
+      }
+      val getConnectParamsByDataSourceNameAction = new GetConnectParamsByDataSourceNameAction
+      getConnectParamsByDataSourceNameAction.dataSourceName = requestDataSourceName
+      getConnectParamsByDataSourceNameAction.setParameter("system", system)
+      getConnectParamsByDataSourceNameAction.setUser(user)
+      getConnectParamsByDataSourceNameAction
     }
   }
-
 }
diff --git a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/GetDataSourceVersionsAction.scala b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/GetDataSourceVersionsAction.scala
similarity index 89%
rename from linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/GetDataSourceVersionsAction.scala
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/GetDataSourceVersionsAction.scala
index f4cf6e4..e07c5fa 100644
--- a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/GetDataSourceVersionsAction.scala
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/GetDataSourceVersionsAction.scala
@@ -23,7 +23,7 @@ import org.apache.linkis.httpclient.request.GetAction
 
 class GetDataSourceVersionsAction extends GetAction with DataSourceAction {
   private var user: String = _
-  private var resourceId:String=_
+  private var resourceId: String = _
 
   override def setUser(user: String): Unit = this.user = user
 
@@ -36,20 +36,20 @@ object GetDataSourceVersionsAction {
 
   class Builder private[GetDataSourceVersionsAction]() {
     private var user: String = _
-    private var resourceId:String = _
+    private var resourceId: String = _
 
     def setUser(user: String): Builder = {
       this.user = user
       this
     }
 
-    def setResourceId(resourceId:String): Builder ={
+    def setResourceId(resourceId: String): Builder = {
       this.resourceId = resourceId
       this
     }
 
     def build(): GetDataSourceVersionsAction = {
-      if(resourceId == null) throw new DataSourceClientBuilderException("resourceId is needed!")
+      if (resourceId == null) throw new DataSourceClientBuilderException("resourceId is needed!")
       if(user == null) throw new DataSourceClientBuilderException("user is needed!")
 
       val action = new GetDataSourceVersionsAction
diff --git a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/GetInfoByDataSourceIdAction.scala b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/GetInfoByDataSourceIdAction.scala
similarity index 93%
rename from linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/GetInfoByDataSourceIdAction.scala
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/GetInfoByDataSourceIdAction.scala
index 24bb3a0..b5c5e9b 100644
--- a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/GetInfoByDataSourceIdAction.scala
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/GetInfoByDataSourceIdAction.scala
@@ -27,7 +27,7 @@ class GetInfoByDataSourceIdAction extends GetAction with DataSourceAction {
 
   override def suffixURLs: Array[String] = Array(DATA_SOURCE_SERVICE_MODULE.getValue, "info", dataSourceId.toString)
 
-  private var user:String = _
+  private var user: String = _
 
   override def setUser(user: String): Unit = this.user = user
 
@@ -39,7 +39,7 @@ object GetInfoByDataSourceIdAction {
 
   class Builder private[GetInfoByDataSourceIdAction]() {
     private var dataSourceId: Long = _
-    private var system:String = _
+    private var system: String = _
     private var user: String = _
 
     def setUser(user: String): Builder = {
@@ -58,7 +58,7 @@ object GetInfoByDataSourceIdAction {
     }
 
     def build(): GetInfoByDataSourceIdAction = {
-      if(dataSourceId == null) throw new DataSourceClientBuilderException("dataSourceId is needed!")
+      if (dataSourceId == null) throw new DataSourceClientBuilderException("dataSourceId is needed!")
       if(system == null) throw new DataSourceClientBuilderException("system is needed!")
       if(user == null) throw new DataSourceClientBuilderException("user is needed!")
 
diff --git a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/GetKeyTypeDatasourceAction.scala b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/GetKeyTypeDatasourceAction.scala
similarity index 91%
rename from linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/GetKeyTypeDatasourceAction.scala
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/GetKeyTypeDatasourceAction.scala
index 2a3789b..fcb27e6 100644
--- a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/GetKeyTypeDatasourceAction.scala
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/GetKeyTypeDatasourceAction.scala
@@ -25,9 +25,9 @@ import org.apache.linkis.httpclient.request.GetAction
 class GetKeyTypeDatasourceAction extends GetAction with DataSourceAction{
   private var dataSourceTypeId: Long = _
 
-  override def suffixURLs: Array[String] = Array(DATA_SOURCE_SERVICE_MODULE.getValue, "key_define","type", dataSourceTypeId.toString)
+  override def suffixURLs: Array[String] = Array(DATA_SOURCE_SERVICE_MODULE.getValue, "key_define", "type", dataSourceTypeId.toString)
 
-  private var user:String = _
+  private var user: String = _
 
   override def setUser(user: String): Unit = this.user = user
 
@@ -51,7 +51,7 @@ object GetKeyTypeDatasourceAction{
     }
 
     def build(): GetKeyTypeDatasourceAction = {
-      if(user == null) throw new DataSourceClientBuilderException("user is needed!")
+      if (user == null) throw new DataSourceClientBuilderException("user is needed!")
 
       val getKeyTypeDatasourceAction = new GetKeyTypeDatasourceAction
       getKeyTypeDatasourceAction.dataSourceTypeId = this.dataSourceTypeId
diff --git a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/MetadataGetColumnsAction.scala b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/MetadataGetColumnsAction.scala
similarity index 94%
rename from linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/MetadataGetColumnsAction.scala
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/MetadataGetColumnsAction.scala
index a665b58..39955ba 100644
--- a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/MetadataGetColumnsAction.scala
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/MetadataGetColumnsAction.scala
@@ -29,7 +29,7 @@ class MetadataGetColumnsAction extends GetAction with DataSourceAction {
 
   override def suffixURLs: Array[String] = Array(METADATA_SERVICE_MODULE.getValue, "columns", dataSourceId.toString, "db", database, "table", table)
 
-  private var user:String = _
+  private var user: String = _
 
   override def setUser(user: String): Unit = this.user = user
 
@@ -44,7 +44,7 @@ object MetadataGetColumnsAction {
     private var dataSourceId: Long = _
     private var database: String = _
     private var table: String = _
-    private var system:String = _
+    private var system: String = _
     private var user: String = _
 
     def setUser(user: String): Builder = {
@@ -73,7 +73,7 @@ object MetadataGetColumnsAction {
     }
 
     def build(): MetadataGetColumnsAction = {
-      if(dataSourceId == null) throw new DataSourceClientBuilderException("dataSourceId is needed!")
+      if (dataSourceId == null) throw new DataSourceClientBuilderException("dataSourceId is needed!")
       if(database == null) throw new DataSourceClientBuilderException("database is needed!")
       if(table == null) throw new DataSourceClientBuilderException("table is needed!")
       if(system == null) throw new DataSourceClientBuilderException("system is needed!")
diff --git a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/MetadataGetDatabasesAction.scala b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/MetadataGetDatabasesAction.scala
similarity index 93%
rename from linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/MetadataGetDatabasesAction.scala
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/MetadataGetDatabasesAction.scala
index ebb539f..bff6435 100644
--- a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/MetadataGetDatabasesAction.scala
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/MetadataGetDatabasesAction.scala
@@ -27,7 +27,7 @@ class MetadataGetDatabasesAction extends GetAction with DataSourceAction {
 
   override def suffixURLs: Array[String] = Array(METADATA_SERVICE_MODULE.getValue, "dbs", dataSourceId.toString)
 
-  private var user:String = _
+  private var user: String = _
 
   override def setUser(user: String): Unit = this.user = user
 
@@ -39,7 +39,7 @@ object MetadataGetDatabasesAction {
 
   class Builder private[MetadataGetDatabasesAction]() {
     private var dataSourceId: Long = _
-    private var system:String = _
+    private var system: String = _
     private var user: String = _
 
     def setUser(user: String): Builder = {
@@ -58,7 +58,7 @@ object MetadataGetDatabasesAction {
     }
 
     def build(): MetadataGetDatabasesAction = {
-      if(dataSourceId == null) throw new DataSourceClientBuilderException("dataSourceId is needed!")
+      if (dataSourceId == null) throw new DataSourceClientBuilderException("dataSourceId is needed!")
       if(system == null) throw new DataSourceClientBuilderException("system is needed!")
       if(user == null) throw new DataSourceClientBuilderException("user is needed!")
 
diff --git a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/MetadataGetPartitionsAction.scala b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/MetadataGetPartitionsAction.scala
similarity index 94%
rename from linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/MetadataGetPartitionsAction.scala
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/MetadataGetPartitionsAction.scala
index 45c225b..9bbde2e 100644
--- a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/MetadataGetPartitionsAction.scala
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/MetadataGetPartitionsAction.scala
@@ -29,7 +29,7 @@ class MetadataGetPartitionsAction extends GetAction with DataSourceAction {
 
   override def suffixURLs: Array[String] = Array(METADATA_SERVICE_MODULE.getValue, "partitions", dataSourceId, "db", database, "table", table)
 
-  private var user:String = _
+  private var user: String = _
 
   override def setUser(user: String): Unit = this.user = user
 
@@ -44,7 +44,7 @@ object MetadataGetPartitionsAction {
     private var dataSourceId: String = _
     private var database: String = _
     private var table: String = _
-    private var system:String = _
+    private var system: String = _
     private var user: String = _
 
     def setUser(user: String): Builder = {
@@ -73,7 +73,7 @@ object MetadataGetPartitionsAction {
     }
 
     def build(): MetadataGetPartitionsAction = {
-      if(dataSourceId == null) throw new DataSourceClientBuilderException("dataSourceId is needed!")
+      if (dataSourceId == null) throw new DataSourceClientBuilderException("dataSourceId is needed!")
       if(database == null) throw new DataSourceClientBuilderException("database is needed!")
       if(table == null) throw new DataSourceClientBuilderException("table is needed!")
       if(system == null) throw new DataSourceClientBuilderException("system is needed!")
diff --git a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/MetadataGetTablePropsAction.scala b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/MetadataGetTablePropsAction.scala
similarity index 94%
rename from linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/MetadataGetTablePropsAction.scala
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/MetadataGetTablePropsAction.scala
index c3439f1..1f67f22 100644
--- a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/MetadataGetTablePropsAction.scala
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/MetadataGetTablePropsAction.scala
@@ -29,7 +29,7 @@ class MetadataGetTablePropsAction extends GetAction with DataSourceAction {
 
   override def suffixURLs: Array[String] = Array(METADATA_SERVICE_MODULE.getValue, "props", dataSourceId.toString, "db", database, "table", table)
 
-  private var user:String = _
+  private var user: String = _
 
   override def setUser(user: String): Unit = this.user = user
 
@@ -43,7 +43,7 @@ object MetadataGetTablePropsAction {
     private var dataSourceId: Long = _
     private var database: String = _
     private var table: String = _
-    private var system:String = _
+    private var system: String = _
     private var user: String = _
 
     def setUser(user: String): Builder = {
@@ -72,7 +72,7 @@ object MetadataGetTablePropsAction {
     }
 
     def build(): MetadataGetTablePropsAction = {
-      if(dataSourceId == null) throw new DataSourceClientBuilderException("dataSourceId is needed!")
+      if (dataSourceId == null) throw new DataSourceClientBuilderException("dataSourceId is needed!")
       if(database == null) throw new DataSourceClientBuilderException("database is needed!")
       if(table == null) throw new DataSourceClientBuilderException("table is needed!")
       if(system == null) throw new DataSourceClientBuilderException("system is needed!")
diff --git a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/MetadataGetTablesAction.scala b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/MetadataGetTablesAction.scala
similarity index 94%
rename from linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/MetadataGetTablesAction.scala
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/MetadataGetTablesAction.scala
index 03eb811..be9494f 100644
--- a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/MetadataGetTablesAction.scala
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/MetadataGetTablesAction.scala
@@ -28,7 +28,7 @@ class MetadataGetTablesAction extends GetAction with DataSourceAction {
 
   override def suffixURLs: Array[String] = Array(METADATA_SERVICE_MODULE.getValue, "tables", dataSourceId.toString, "db", database)
 
-  private var user:String = _
+  private var user: String = _
 
   override def setUser(user: String): Unit = this.user = user
 
@@ -41,7 +41,7 @@ object MetadataGetTablesAction {
   class Builder private[MetadataGetTablesAction]() {
     private var dataSourceId: Long = _
     private var database: String = _
-    private var system:String = _
+    private var system: String = _
     private var user: String = _
 
     def setUser(user: String): Builder = {
@@ -64,7 +64,7 @@ object MetadataGetTablesAction {
     }
 
     def build(): MetadataGetTablesAction = {
-      if(dataSourceId == null) throw new DataSourceClientBuilderException("dataSourceId is needed!")
+      if (dataSourceId == null) throw new DataSourceClientBuilderException("dataSourceId is needed!")
       if(database == null) throw new DataSourceClientBuilderException("database is needed!")
       if(system == null) throw new DataSourceClientBuilderException("system is needed!")
       if(user == null) throw new DataSourceClientBuilderException("user is needed!")
diff --git a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/PublishDataSourceVersionAction.scala b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/PublishDataSourceVersionAction.scala
similarity index 83%
rename from linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/PublishDataSourceVersionAction.scala
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/PublishDataSourceVersionAction.scala
index 7e57863..e6a7b8e 100644
--- a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/PublishDataSourceVersionAction.scala
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/PublishDataSourceVersionAction.scala
@@ -26,8 +26,8 @@ import org.apache.linkis.httpclient.request.POSTAction
 class PublishDataSourceVersionAction extends POSTAction with DataSourceAction{
   override def getRequestPayload: String = DWSHttpClient.jacksonJson.writeValueAsString(getRequestPayloads)
   private var user: String = _
-  private var dataSourceId:String=_
-  private var versionId:String=_
+  private var dataSourceId: String = _
+  private var versionId: String = _
 
   override def setUser(user: String): Unit = this.user = user
 
@@ -40,31 +40,31 @@ object PublishDataSourceVersionAction {
 
   class Builder private[PublishDataSourceVersionAction]() {
     private var user: String = _
-    private var dataSourceId:String=_
-    private var versionId:String=_
+    private var dataSourceId: String = _
+    private var versionId: String = _
 
-    def setUser(user:String):Builder={
+    def setUser(user: String): Builder = {
       this.user = user
       this
     }
 
-    def setDataSourceId(dataSourceId:String): Builder ={
+    def setDataSourceId(dataSourceId: String): Builder = {
       this.dataSourceId = dataSourceId
       this
     }
 
-    def setVersion(versionId:String): Builder ={
+    def setVersion(versionId: String): Builder = {
       this.versionId = versionId
       this
     }
 
     def build(): PublishDataSourceVersionAction = {
-      if(dataSourceId == null) throw new DataSourceClientBuilderException("dataSourceId is needed!")
+      if (dataSourceId == null) throw new DataSourceClientBuilderException("dataSourceId is needed!")
       if(versionId == null) throw new DataSourceClientBuilderException("versionId is needed!")
       if(user == null) throw new DataSourceClientBuilderException("user is needed!")
 
       val action = new PublishDataSourceVersionAction()
-      action.dataSourceId =dataSourceId
+      action.dataSourceId = dataSourceId
       action.versionId = versionId
       action.user = user
 
diff --git a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/QueryDataSourceAction.scala b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/QueryDataSourceAction.scala
similarity index 82%
rename from linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/QueryDataSourceAction.scala
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/QueryDataSourceAction.scala
index e4b6a95..af780f5 100644
--- a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/QueryDataSourceAction.scala
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/QueryDataSourceAction.scala
@@ -25,7 +25,7 @@ import org.apache.linkis.httpclient.request.GetAction
 class QueryDataSourceAction extends GetAction with DataSourceAction{
   override def suffixURLs: Array[String] = Array(DATA_SOURCE_SERVICE_MODULE.getValue, "info")
 
-  private var user:String = _
+  private var user: String = _
 
   override def setUser(user: String): Unit = this.user = user
 
@@ -36,12 +36,12 @@ object QueryDataSourceAction {
   def builder(): Builder = new Builder
 
   class Builder private[QueryDataSourceAction]() {
-    private var system:String = _
-    private var name:String = _
-    private var typeId:Long = _
-    private var identifies:String = _
-    private var currentPage:Integer = _
-    private var pageSize:Integer = _
+    private var system: String = _
+    private var name: String = _
+    private var typeId: Long = _
+    private var identifies: String = _
+    private var currentPage: Integer = _
+    private var pageSize: Integer = _
     private var user: String = _
 
     def setUser(user: String): Builder = {
@@ -49,38 +49,38 @@ object QueryDataSourceAction {
       this
     }
 
-    def setSystem(system:String):Builder={
+    def setSystem(system: String): Builder = {
       this.system = system
       this
     }
 
-    def setName(name:String):Builder={
+    def setName(name: String): Builder = {
       this.name = name
       this
     }
 
-    def setTypeId(typeId:Long):Builder={
+    def setTypeId(typeId: Long): Builder = {
       this.typeId = typeId
       this
     }
 
-    def setIdentifies(identifies:String):Builder={
+    def setIdentifies(identifies: String): Builder = {
       this.identifies = identifies
       this
     }
 
-    def setCurrentPage(currentPage:Integer):Builder={
+    def setCurrentPage(currentPage: Integer): Builder = {
       this.currentPage = currentPage
       this
     }
 
-    def setPageSize(pageSize:Integer):Builder={
+    def setPageSize(pageSize: Integer): Builder = {
       this.pageSize = pageSize
       this
     }
 
     def build(): QueryDataSourceAction = {
-      if(system == null) throw new DataSourceClientBuilderException("system is needed!")
+      if (system == null) throw new DataSourceClientBuilderException("system is needed!")
       if(name == null) throw new DataSourceClientBuilderException("name is needed!")
       if(typeId == null) throw new DataSourceClientBuilderException("typeId is needed!")
       if(identifies == null) throw new DataSourceClientBuilderException("identifies is needed!")
diff --git a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/QueryDataSourceEnvAction.scala b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/QueryDataSourceEnvAction.scala
similarity index 85%
rename from linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/QueryDataSourceEnvAction.scala
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/QueryDataSourceEnvAction.scala
index 267b4d3..97a3504 100644
--- a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/QueryDataSourceEnvAction.scala
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/QueryDataSourceEnvAction.scala
@@ -25,7 +25,7 @@ import org.apache.linkis.httpclient.request.GetAction
 class QueryDataSourceEnvAction extends GetAction with DataSourceAction{
   override def suffixURLs: Array[String] = Array(DATA_SOURCE_SERVICE_MODULE.getValue, "env")
 
-  private var user:String = _
+  private var user: String = _
 
   override def setUser(user: String): Unit = this.user = user
 
@@ -37,10 +37,10 @@ object QueryDataSourceEnvAction {
   def builder(): Builder = new Builder
 
   class Builder private[QueryDataSourceEnvAction]() {
-    private var name:String = _
-    private var typeId:Long = _
-    private var currentPage:Integer = _
-    private var pageSize:Integer = _
+    private var name: String = _
+    private var typeId: Long = _
+    private var currentPage: Integer = _
+    private var pageSize: Integer = _
     private var user: String = _
 
     def setUser(user: String): Builder = {
@@ -48,28 +48,28 @@ object QueryDataSourceEnvAction {
       this
     }
 
-    def setName(name:String):Builder={
+    def setName(name: String): Builder = {
       this.name = name
       this
     }
 
-    def setTypeId(typeId:Long):Builder={
+    def setTypeId(typeId: Long): Builder = {
       this.typeId = typeId
       this
     }
 
-    def setCurrentPage(currentPage:Integer):Builder={
+    def setCurrentPage(currentPage: Integer): Builder = {
       this.currentPage = currentPage
       this
     }
 
-    def setPageSize(pageSize:Integer):Builder={
+    def setPageSize(pageSize: Integer): Builder = {
       this.pageSize = pageSize
       this
     }
 
     def build(): QueryDataSourceEnvAction = {
-      if(name == null) throw new DataSourceClientBuilderException("name is needed!")
+      if (name == null) throw new DataSourceClientBuilderException("name is needed!")
       if(typeId == null) throw new DataSourceClientBuilderException("typeId is needed!")
       if(currentPage == null) throw new DataSourceClientBuilderException("currentPage is needed!")
       if(pageSize == null) throw new DataSourceClientBuilderException("pageSize is needed!")
diff --git a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/UpdateDataSourceAction.scala b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/UpdateDataSourceAction.scala
similarity index 84%
rename from linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/UpdateDataSourceAction.scala
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/UpdateDataSourceAction.scala
index 6547695..051d80f 100644
--- a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/UpdateDataSourceAction.scala
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/UpdateDataSourceAction.scala
@@ -24,13 +24,13 @@ import org.apache.linkis.httpclient.dws.DWSHttpClient
 import org.apache.linkis.httpclient.request.PutAction
 
 import java.util
-import scala.collection.JavaConversions._
+import scala.collection.JavaConverters._
 
 class UpdateDataSourceAction extends PutAction with DataSourceAction{
   override def getRequestPayload: String = DWSHttpClient.jacksonJson.writeValueAsString(getRequestPayloads)
 
   private var user: String = _
-  private var dataSourceId:String = _
+  private var dataSourceId: String = _
 
   override def setUser(user: String): Unit = this.user = user
 
@@ -43,21 +43,21 @@ object UpdateDataSourceAction {
 
   class Builder private[UpdateDataSourceAction]() {
     private var user: String = _
-    private var dataSourceId:String=_
+    private var dataSourceId: String = _
     private var payload: util.Map[String, Any] = new util.HashMap[String, Any]
 
-    def setUser(user:String):Builder={
+    def setUser(user: String): Builder = {
       this.user = user
       this
     }
 
-    def setDataSourceId(dataSourceId:String): Builder ={
+    def setDataSourceId(dataSourceId: String): Builder = {
       this.dataSourceId = dataSourceId
       this
     }
 
     def addRequestPayload(key: String, value: Any): Builder = {
-      if(value != null) this.payload.put(key, value)
+      if (value != null) this.payload.put(key, value)
       this
     }
 
@@ -67,14 +67,14 @@ object UpdateDataSourceAction {
     }
 
     def build(): UpdateDataSourceAction = {
-      if(dataSourceId == null) throw new DataSourceClientBuilderException("dataSourceId is needed!")
+      if (dataSourceId == null) throw new DataSourceClientBuilderException("dataSourceId is needed!")
       if(user == null) throw new DataSourceClientBuilderException("user is needed!")
 
       val action = new UpdateDataSourceAction()
-      action.dataSourceId =dataSourceId
+      action.dataSourceId = dataSourceId
       action.user = user
 
-      this.payload.foreach(k=>{
+      this.payload.asScala.foreach(k => {
         action.addRequestPayload(k._1, k._2)
       })
       action
diff --git a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/UpdateDataSourceParameterAction.scala b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/UpdateDataSourceParameterAction.scala
similarity index 84%
rename from linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/UpdateDataSourceParameterAction.scala
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/UpdateDataSourceParameterAction.scala
index 340e73f..ee38dea 100644
--- a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/UpdateDataSourceParameterAction.scala
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/request/UpdateDataSourceParameterAction.scala
@@ -22,14 +22,14 @@ import org.apache.linkis.datasource.client.exception.DataSourceClientBuilderExce
 import org.apache.linkis.httpclient.dws.DWSHttpClient
 import org.apache.linkis.httpclient.request.POSTAction
 
-import scala.collection.JavaConversions._
+import scala.collection.JavaConverters._
 import java.util
 
 class UpdateDataSourceParameterAction extends POSTAction with DataSourceAction {
   override def getRequestPayload: String = DWSHttpClient.jacksonJson.writeValueAsString(getRequestPayloads)
 
   private var user: String = _
-  private var dataSourceId:String = _
+  private var dataSourceId: String = _
 
   override def setUser(user: String): Unit = this.user = user
 
@@ -42,21 +42,21 @@ object UpdateDataSourceParameterAction {
 
   class Builder private[UpdateDataSourceParameterAction]() {
     private var user: String = _
-    private var dataSourceId:String=_
+    private var dataSourceId: String = _
     private var payload: util.Map[String, Any] = new util.HashMap[String, Any]
 
-    def setUser(user:String):Builder={
+    def setUser(user: String): Builder = {
       this.user = user
       this
     }
 
-    def setDataSourceId(dataSourceId:String): Builder ={
+    def setDataSourceId(dataSourceId: String): Builder = {
       this.dataSourceId = dataSourceId
       this
     }
 
     def addRequestPayload(key: String, value: Any): Builder = {
-      if(value != null) this.payload.put(key, value)
+      if (value != null) this.payload.put(key, value)
       this
     }
 
@@ -66,13 +66,13 @@ object UpdateDataSourceParameterAction {
     }
 
     def build(): UpdateDataSourceParameterAction = {
-      if(dataSourceId == null) throw new DataSourceClientBuilderException("dataSourceId is needed!")
+      if (dataSourceId == null) throw new DataSourceClientBuilderException("dataSourceId is needed!")
       if(user == null) throw new DataSourceClientBuilderException("user is needed!")
 
       val action = new UpdateDataSourceParameterAction()
-      action.dataSourceId =dataSourceId
+      action.dataSourceId = dataSourceId
       action.user = user
-      this.payload.foreach(k=>{
+      this.payload.asScala.foreach(k => {
         action.addRequestPayload(k._1, k._2)
       })
 
diff --git a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/CreateDataSourceResult.scala b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/CreateDataSourceResult.scala
similarity index 87%
rename from linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/CreateDataSourceResult.scala
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/CreateDataSourceResult.scala
index 3f38176..5388f68 100644
--- a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/CreateDataSourceResult.scala
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/CreateDataSourceResult.scala
@@ -17,11 +17,12 @@
 
 package org.apache.linkis.datasource.client.response
 
+import org.apache.linkis.httpclient.dws.annotation.DWSHttpMessageResult
 import org.apache.linkis.httpclient.dws.response.DWSResult
 
 import scala.beans.BeanProperty
 
-@DWSHttpMessageResult("/api/rest_j/v\\d+/datasource/info/json")
+@DWSHttpMessageResult("/api/rest_j/v\\d+/data-source-manager/info/json")
 class CreateDataSourceResult extends DWSResult{
   @BeanProperty var insert_id: Long = _
 }
diff --git a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/DataSourceTestConnectResult.scala b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/DataSourceTestConnectResult.scala
similarity index 86%
rename from linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/DataSourceTestConnectResult.scala
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/DataSourceTestConnectResult.scala
index ab6ea7e..f07283e 100644
--- a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/DataSourceTestConnectResult.scala
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/DataSourceTestConnectResult.scala
@@ -17,11 +17,12 @@
 
 package org.apache.linkis.datasource.client.response
 
+import org.apache.linkis.httpclient.dws.annotation.DWSHttpMessageResult
 import org.apache.linkis.httpclient.dws.response.DWSResult
 
 import scala.beans.BeanProperty
 
-@DWSHttpMessageResult("/api/rest_j/v\\d+/datasource/(\\S+)/(\\S+)/op/connect")
+@DWSHttpMessageResult("/api/rest_j/v\\d+/data-source-manager/(\\S+)/(\\S+)/op/connect")
 class DataSourceTestConnectResult extends DWSResult{
   @BeanProperty var ok: Boolean = _
 }
diff --git a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/DeleteDataSourceResult.scala b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/DeleteDataSourceResult.scala
similarity index 87%
rename from linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/DeleteDataSourceResult.scala
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/DeleteDataSourceResult.scala
index a28be99..f8d1f72 100644
--- a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/DeleteDataSourceResult.scala
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/DeleteDataSourceResult.scala
@@ -17,11 +17,12 @@
 
 package org.apache.linkis.datasource.client.response
 
+import org.apache.linkis.httpclient.dws.annotation.DWSHttpMessageResult
 import org.apache.linkis.httpclient.dws.response.DWSResult
 
 import scala.beans.BeanProperty
 
-@DWSHttpMessageResult("/api/rest_j/v\\d+/datasource/info/(\\S+)")
+@DWSHttpMessageResult("/api/rest_j/v\\d+/data-source-manager/info/(\\S+)")
 class DeleteDataSourceResult extends DWSResult{
   @BeanProperty var remove_id: Long = _
 }
diff --git a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/ExpireDataSourceResult.scala b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/ExpireDataSourceResult.scala
similarity index 87%
rename from linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/ExpireDataSourceResult.scala
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/ExpireDataSourceResult.scala
index 5d42b2d..ef7dbe7 100644
--- a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/ExpireDataSourceResult.scala
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/ExpireDataSourceResult.scala
@@ -17,11 +17,12 @@
 
 package org.apache.linkis.datasource.client.response
 
+import org.apache.linkis.httpclient.dws.annotation.DWSHttpMessageResult
 import org.apache.linkis.httpclient.dws.response.DWSResult
 
 import scala.beans.BeanProperty
 
-@DWSHttpMessageResult("/api/rest_j/v\\d+/datasource/info/(\\S+)/expire")
+@DWSHttpMessageResult("/api/rest_j/v\\d+/data-source-manager/info/(\\S+)/expire")
 class ExpireDataSourceResult extends DWSResult{
     @BeanProperty var expire_id: Long = _
 }
diff --git a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/GetAllDataSourceTypesResult.scala b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/GetAllDataSourceTypesResult.scala
similarity index 86%
rename from linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/GetAllDataSourceTypesResult.scala
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/GetAllDataSourceTypesResult.scala
index 89345a0..7c39539 100644
--- a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/GetAllDataSourceTypesResult.scala
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/GetAllDataSourceTypesResult.scala
@@ -25,14 +25,14 @@ import org.apache.linkis.httpclient.dws.response.DWSResult
 import java.util
 import scala.beans.BeanProperty
 
-@DWSHttpMessageResult("/api/rest_j/v\\d+/datasource/type/all")
-class GetAllDataSourceTypesResult extends DWSResult{
+@DWSHttpMessageResult("/api/rest_j/v\\d+/data-source-manager/type/all")
+class GetAllDataSourceTypesResult extends DWSResult {
   @BeanProperty var type_list: java.util.List[java.util.Map[String, Any]] = _
 
-  def getAllDataSourceType: util.List[DataSourceType]={
+  def getAllDataSourceType: util.List[DataSourceType] = {
     import scala.collection.JavaConverters._
 
-    type_list.asScala.map(x=>{
+    type_list.asScala.map(x => {
       val str = DWSHttpClient.jacksonJson.writeValueAsString(x)
       DWSHttpClient.jacksonJson.readValue(str, classOf[DataSourceType])
     }).asJava
diff --git a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/GetConnectParamsByDataSourceIdResult.scala b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/GetConnectParamsByDataSourceIdResult.scala
similarity index 93%
copy from linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/GetConnectParamsByDataSourceIdResult.scala
copy to linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/GetConnectParamsByDataSourceIdResult.scala
index 776944f..e42ec28 100644
--- a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/GetConnectParamsByDataSourceIdResult.scala
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/GetConnectParamsByDataSourceIdResult.scala
@@ -22,7 +22,7 @@ import org.apache.linkis.httpclient.dws.response.DWSResult
 
 import scala.beans.BeanProperty
 
-@DWSHttpMessageResult("/api/rest_j/v\\d+/datasource/(\\S+)/connect_params")
+@DWSHttpMessageResult("/api/rest_j/v\\d+/data-source-manager/(\\S+)/connect_params")
 class GetConnectParamsByDataSourceIdResult extends DWSResult{
   @BeanProperty var connectParams: java.util.Map[String, Any] = _
 }
diff --git a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/GetConnectParamsByDataSourceIdResult.scala b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/GetConnectParamsByDataSourceNameResult.scala
similarity index 87%
rename from linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/GetConnectParamsByDataSourceIdResult.scala
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/GetConnectParamsByDataSourceNameResult.scala
index 776944f..0cd2ea2 100644
--- a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/GetConnectParamsByDataSourceIdResult.scala
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/GetConnectParamsByDataSourceNameResult.scala
@@ -14,7 +14,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.linkis.datasource.client.response
 
 import org.apache.linkis.httpclient.dws.annotation.DWSHttpMessageResult
@@ -22,7 +21,7 @@ import org.apache.linkis.httpclient.dws.response.DWSResult
 
 import scala.beans.BeanProperty
 
-@DWSHttpMessageResult("/api/rest_j/v\\d+/datasource/(\\S+)/connect_params")
-class GetConnectParamsByDataSourceIdResult extends DWSResult{
+@DWSHttpMessageResult("/api/rest_j/v\\d+/data-source-manager/name/(\\S+)/connect_params")
+class GetConnectParamsByDataSourceNameResult extends DWSResult{
   @BeanProperty var connectParams: java.util.Map[String, Any] = _
 }
diff --git a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/GetDataSourceVersionsResult.scala b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/GetDataSourceVersionsResult.scala
similarity index 80%
rename from linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/GetDataSourceVersionsResult.scala
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/GetDataSourceVersionsResult.scala
index 2ddf6f1..90fbb45 100644
--- a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/GetDataSourceVersionsResult.scala
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/GetDataSourceVersionsResult.scala
@@ -19,17 +19,20 @@ package org.apache.linkis.datasource.client.response
 
 import org.apache.linkis.httpclient.dws.DWSHttpClient
 import org.apache.linkis.httpclient.dws.response.DWSResult
-
 import java.util
+
+import org.apache.linkis.datasourcemanager.common.domain.DatasourceVersion
+import org.apache.linkis.httpclient.dws.annotation.DWSHttpMessageResult
+
 import scala.beans.BeanProperty
 
-@DWSHttpMessageResult("/api/rest_j/v\\d+/datasource/(\\S+)/versions")
+@DWSHttpMessageResult("/api/rest_j/v\\d+/data-source-manager/(\\S+)/versions")
 class GetDataSourceVersionsResult extends DWSResult{
   @BeanProperty var versions: util.List[java.util.Map[String, Any]] = _
 
-  def getDatasourceVersion: util.List[DatasourceVersion]={
+  def getDatasourceVersion: util.List[DatasourceVersion] = {
     import scala.collection.JavaConverters._
-    versions.asScala.map(x=>{
+    versions.asScala.map(x => {
       val str = DWSHttpClient.jacksonJson.writeValueAsString(x)
       DWSHttpClient.jacksonJson.readValue(str, classOf[DatasourceVersion])
     }).asJava
diff --git a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/GetInfoByDataSourceIdResult.scala b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/GetInfoByDataSourceIdResult.scala
similarity index 92%
rename from linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/GetInfoByDataSourceIdResult.scala
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/GetInfoByDataSourceIdResult.scala
index 5adae88..ca7394b 100644
--- a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/GetInfoByDataSourceIdResult.scala
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/GetInfoByDataSourceIdResult.scala
@@ -24,11 +24,11 @@ import org.apache.linkis.httpclient.dws.response.DWSResult
 
 import scala.beans.BeanProperty
 
-@DWSHttpMessageResult("/api/rest_j/v\\d+/datasource/info/(\\S+)")
+@DWSHttpMessageResult("/api/rest_j/v\\d+/data-source-manager/info/(\\S+)")
 class GetInfoByDataSourceIdResult extends DWSResult{
   @BeanProperty var info: java.util.Map[String, Any] = _
 
-  def getDataSource: DataSource={
+  def getDataSource: DataSource = {
     val str = DWSHttpClient.jacksonJson.writeValueAsString(info)
     DWSHttpClient.jacksonJson.readValue(str, classOf[DataSource])
   }
diff --git a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/GetKeyTypeDatasourceResult.scala b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/GetKeyTypeDatasourceResult.scala
similarity index 87%
rename from linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/GetKeyTypeDatasourceResult.scala
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/GetKeyTypeDatasourceResult.scala
index 7e731ac..434a62e 100644
--- a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/GetKeyTypeDatasourceResult.scala
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/GetKeyTypeDatasourceResult.scala
@@ -20,17 +20,19 @@ package org.apache.linkis.datasource.client.response
 import org.apache.linkis.datasourcemanager.common.domain.DataSourceParamKeyDefinition
 import org.apache.linkis.httpclient.dws.DWSHttpClient
 import org.apache.linkis.httpclient.dws.response.DWSResult
-
 import java.util
+
+import org.apache.linkis.httpclient.dws.annotation.DWSHttpMessageResult
+
 import scala.beans.BeanProperty
 
-@DWSHttpMessageResult("/api/rest_j/v\\d+/datasource/key_define/type/(\\S+)")
+@DWSHttpMessageResult("/api/rest_j/v\\d+/data-source-manager/key_define/type/(\\S+)")
 class GetKeyTypeDatasourceResult extends DWSResult{
   @BeanProperty var key_define: util.List[java.util.Map[String, Any]] = _
 
-  def getDataSourceParamKeyDefinitions: util.List[DataSourceParamKeyDefinition] ={
+  def getDataSourceParamKeyDefinitions: util.List[DataSourceParamKeyDefinition] = {
     import scala.collection.JavaConverters._
-    key_define.asScala.map(x=>{
+    key_define.asScala.map(x => {
       val str = DWSHttpClient.jacksonJson.writeValueAsString(x)
       DWSHttpClient.jacksonJson.readValue(str, classOf[DataSourceParamKeyDefinition])
     }).asJava
diff --git a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/MetadataGetColumnsResult.scala b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/MetadataGetColumnsResult.scala
similarity index 89%
rename from linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/MetadataGetColumnsResult.scala
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/MetadataGetColumnsResult.scala
index 636e3bb..e5f5e34 100644
--- a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/MetadataGetColumnsResult.scala
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/MetadataGetColumnsResult.scala
@@ -25,13 +25,13 @@ import org.apache.linkis.metadatamanager.common.domain.MetaColumnInfo
 import java.util
 import scala.beans.BeanProperty
 
-@DWSHttpMessageResult("/api/rest_j/v\\d+/metadata/columns/(\\S+)/db/(\\S+)/table/(\\S+)")
+@DWSHttpMessageResult("/api/rest_j/v\\d+/metadatamanager/columns/(\\S+)/db/(\\S+)/table/(\\S+)")
 class MetadataGetColumnsResult extends DWSResult{
   @BeanProperty var columns: util.List[java.util.Map[String, Any]] = _
 
-  def getAllColumns: util.List[MetaColumnInfo]={
+  def getAllColumns: util.List[MetaColumnInfo] = {
     import scala.collection.JavaConverters._
-    columns.asScala.map(x=>{
+    columns.asScala.map(x => {
       val str = DWSHttpClient.jacksonJson.writeValueAsString(x)
       DWSHttpClient.jacksonJson.readValue(str, classOf[MetaColumnInfo])
     }).asJava
diff --git a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/MetadataGetDatabasesResult.scala b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/MetadataGetDatabasesResult.scala
similarity index 94%
rename from linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/MetadataGetDatabasesResult.scala
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/MetadataGetDatabasesResult.scala
index b6d4291..2259567 100644
--- a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/MetadataGetDatabasesResult.scala
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/MetadataGetDatabasesResult.scala
@@ -23,7 +23,7 @@ import org.apache.linkis.httpclient.dws.response.DWSResult
 import java.util
 import scala.beans.BeanProperty
 
-@DWSHttpMessageResult("/api/rest_j/v\\d+/metadata/dbs/(\\S+)")
+@DWSHttpMessageResult("/api/rest_j/v\\d+/metadatamanager/dbs/(\\S+)")
 class MetadataGetDatabasesResult extends DWSResult{
   @BeanProperty var dbs: util.List[String] = _
 }
diff --git a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/MetadataGetPartitionsResult.scala b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/MetadataGetPartitionsResult.scala
similarity index 92%
rename from linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/MetadataGetPartitionsResult.scala
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/MetadataGetPartitionsResult.scala
index 96425e3..b11b7a4 100644
--- a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/MetadataGetPartitionsResult.scala
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/MetadataGetPartitionsResult.scala
@@ -23,7 +23,7 @@ import org.apache.linkis.metadatamanager.common.domain.MetaPartitionInfo
 
 import scala.beans.BeanProperty
 
-@DWSHttpMessageResult("/api/rest_j/v\\d+/metadata/partitions/(\\S+)/db/(\\S+)/table/(\\S+)")
+@DWSHttpMessageResult("/api/rest_j/v\\d+/metadatamanager/partitions/(\\S+)/db/(\\S+)/table/(\\S+)")
 class MetadataGetPartitionsResult extends DWSResult{
   @BeanProperty var props: MetaPartitionInfo = _
 }
diff --git a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/MetadataGetTablePropsResult.scala b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/MetadataGetTablePropsResult.scala
similarity index 92%
rename from linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/MetadataGetTablePropsResult.scala
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/MetadataGetTablePropsResult.scala
index 25d43a1..ee4548d 100644
--- a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/MetadataGetTablePropsResult.scala
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/MetadataGetTablePropsResult.scala
@@ -23,7 +23,7 @@ import org.apache.linkis.httpclient.dws.response.DWSResult
 import java.util
 import scala.beans.BeanProperty
 
-@DWSHttpMessageResult("/api/rest_j/v\\d+/metadata/props/(\\S+)/db/(\\S+)/table/(\\S+)")
+@DWSHttpMessageResult("/api/rest_j/v\\d+/metadatamanager/props/(\\S+)/db/(\\S+)/table/(\\S+)")
 class MetadataGetTablePropsResult extends DWSResult{
   @BeanProperty var props: util.Map[String, String] = _
 }
diff --git a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/MetadataGetTablesResult.scala b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/MetadataGetTablesResult.scala
similarity index 93%
rename from linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/MetadataGetTablesResult.scala
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/MetadataGetTablesResult.scala
index c2ce15e..8f636ea 100644
--- a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/MetadataGetTablesResult.scala
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/MetadataGetTablesResult.scala
@@ -23,7 +23,7 @@ import org.apache.linkis.httpclient.dws.response.DWSResult
 import java.util
 import scala.beans.BeanProperty
 
-@DWSHttpMessageResult("/api/rest_j/v\\d+/metadata/tables/(\\S+)/db/(\\S+)")
+@DWSHttpMessageResult("/api/rest_j/v\\d+/metadatamanager/tables/(\\S+)/db/(\\S+)")
 class MetadataGetTablesResult extends DWSResult{
   @BeanProperty var tables: util.List[String] = _
 }
diff --git a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/PublishDataSourceVersionResult.scala b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/PublishDataSourceVersionResult.scala
similarity index 86%
rename from linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/PublishDataSourceVersionResult.scala
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/PublishDataSourceVersionResult.scala
index a2d671e..33229cf 100644
--- a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/PublishDataSourceVersionResult.scala
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/PublishDataSourceVersionResult.scala
@@ -17,9 +17,10 @@
 
 package org.apache.linkis.datasource.client.response
 
+import org.apache.linkis.httpclient.dws.annotation.DWSHttpMessageResult
 import org.apache.linkis.httpclient.dws.response.DWSResult
 
-@DWSHttpMessageResult("/api/rest_j/v\\d+/datasource/publish/(\\S+)/(\\S+)")
+@DWSHttpMessageResult("/api/rest_j/v\\d+/data-source-manager/publish/(\\S+)/(\\S+)")
 class PublishDataSourceVersionResult extends DWSResult{
 
 }
diff --git a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/QueryDataSourceEnvResult.scala b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/QueryDataSourceEnvResult.scala
similarity index 90%
rename from linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/QueryDataSourceEnvResult.scala
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/QueryDataSourceEnvResult.scala
index 8224bc2..2caa157 100644
--- a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/QueryDataSourceEnvResult.scala
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/QueryDataSourceEnvResult.scala
@@ -25,14 +25,14 @@ import org.apache.linkis.httpclient.dws.response.DWSResult
 import java.util
 import scala.beans.BeanProperty
 
-@DWSHttpMessageResult("/api/rest_j/v\\d+/datasource/env")
+@DWSHttpMessageResult("/api/rest_j/v\\d+/data-source-manager/env")
 class QueryDataSourceEnvResult extends DWSResult{
   @BeanProperty var query_list: java.util.List[java.util.Map[String, Any]] = _
 
-  def getDataSourceEnv: util.List[DataSourceEnv]={
+  def getDataSourceEnv: util.List[DataSourceEnv] = {
     import scala.collection.JavaConverters._
 
-    query_list.asScala.map(x=>{
+    query_list.asScala.map(x => {
       val str = DWSHttpClient.jacksonJson.writeValueAsString(x)
       DWSHttpClient.jacksonJson.readValue(str, classOf[DataSourceEnv])
     }).asJava
diff --git a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/QueryDataSourceResult.scala b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/QueryDataSourceResult.scala
similarity index 88%
rename from linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/QueryDataSourceResult.scala
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/QueryDataSourceResult.scala
index 8767828..5ad1217 100644
--- a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/QueryDataSourceResult.scala
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/QueryDataSourceResult.scala
@@ -25,13 +25,14 @@ import org.apache.linkis.httpclient.dws.response.DWSResult
 import java.util
 import scala.beans.BeanProperty
 
-@DWSHttpMessageResult("/api/rest_j/v\\d+/datasource/info")
+@DWSHttpMessageResult("/api/rest_j/v\\d+/data-source-manager/info")
 class QueryDataSourceResult extends DWSResult{
   @BeanProperty var query_list: util.List[java.util.Map[String, Any]] = _
+  @BeanProperty var totalPage: Int = _
 
-  def getAllDataSource: util.List[DataSource]={
+  def getAllDataSource: util.List[DataSource] = {
     import scala.collection.JavaConverters._
-    query_list.asScala.map(x=>{
+    query_list.asScala.map(x => {
       val str = DWSHttpClient.jacksonJson.writeValueAsString(x)
       DWSHttpClient.jacksonJson.readValue(str, classOf[DataSource])
     }).asJava
diff --git a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/UpdateDataSourceParameterResult.scala b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/UpdateDataSourceParameterResult.scala
similarity index 86%
rename from linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/UpdateDataSourceParameterResult.scala
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/UpdateDataSourceParameterResult.scala
index c6e014e..5e70e35 100644
--- a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/UpdateDataSourceParameterResult.scala
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/UpdateDataSourceParameterResult.scala
@@ -17,11 +17,12 @@
 
 package org.apache.linkis.datasource.client.response
 
+import org.apache.linkis.httpclient.dws.annotation.DWSHttpMessageResult
 import org.apache.linkis.httpclient.dws.response.DWSResult
 
 import scala.beans.BeanProperty
 
-@DWSHttpMessageResult("/api/rest_j/v\\d+/datasource/parameter/(\\S+)/json")
+@DWSHttpMessageResult("/api/rest_j/v\\d+/data-source-manager/parameter/(\\S+)/json")
 class UpdateDataSourceParameterResult extends DWSResult{
   @BeanProperty var version: Long = _
 }
diff --git a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/UpdateDataSourceResult.scala b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/UpdateDataSourceResult.scala
similarity index 87%
rename from linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/UpdateDataSourceResult.scala
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/UpdateDataSourceResult.scala
index 91bab5a..7d3d04d 100644
--- a/linkis-public-enhancements/linkis-datasource/datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/UpdateDataSourceResult.scala
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/main/scala/org/apache/linkis/datasource/client/response/UpdateDataSourceResult.scala
@@ -17,11 +17,12 @@
 
 package org.apache.linkis.datasource.client.response
 
+import org.apache.linkis.httpclient.dws.annotation.DWSHttpMessageResult
 import org.apache.linkis.httpclient.dws.response.DWSResult
 
 import scala.beans.BeanProperty
 
-@DWSHttpMessageResult("/api/rest_j/v\\d+/datasource/info/(\\S+)/json")
+@DWSHttpMessageResult("/api/rest_j/v\\d+/data-source-manager/info/(\\S+)/json")
 class UpdateDataSourceResult extends DWSResult{
   @BeanProperty var insert_id: Long = _
 }
diff --git a/linkis-public-enhancements/linkis-datasource/datasource-client/src/test/scala/org/apache/linkis/datasource/client/TestDataSourceClient.scala b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/test/scala/org/apache/linkis/datasource/client/TestDataSourceClient.scala
similarity index 96%
rename from linkis-public-enhancements/linkis-datasource/datasource-client/src/test/scala/org/apache/linkis/datasource/client/TestDataSourceClient.scala
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/test/scala/org/apache/linkis/datasource/client/TestDataSourceClient.scala
index f81b991..574c42c 100644
--- a/linkis-public-enhancements/linkis-datasource/datasource-client/src/test/scala/org/apache/linkis/datasource/client/TestDataSourceClient.scala
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-client/src/test/scala/org/apache/linkis/datasource/client/TestDataSourceClient.scala
@@ -30,7 +30,7 @@ object TestDataSourceClient {
       .addServerUrl("http://127.0.0.1:9001")
       .connectionTimeout(30000)
       .discoveryEnabled(false)
-      .discoveryFrequency(1,TimeUnit.MINUTES)
+      .discoveryFrequency(1, TimeUnit.MINUTES)
       .loadbalancerEnabled(true)
       .maxConnectionSize(5)
       .retryEnabled(false)
@@ -52,7 +52,7 @@ object TestDataSourceClient {
                                         .setCurrentPage(1)
                                         .setPageSize(1)
                                         .setUser("hadoop")
-                                        .build() ).getDataSourceEnv
+                                        .build()).getDataSourceEnv
 
     val getInfoByDataSourceIdResult = dataSourceClient.getInfoByDataSourceId(
         GetInfoByDataSourceIdAction.builder().setDataSourceId(1).setSystem("xx").setUser("hadoop").build()
@@ -73,8 +73,6 @@ object TestDataSourceClient {
       GetConnectParamsByDataSourceIdAction.builder().setDataSourceId(1).setSystem("xx").setUser("hadoop").build()
     )
 
-    println("ss")
-
 
   }
 }
diff --git a/linkis-public-enhancements/linkis-datasource/datasourcemanager/common/pom.xml b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/common/pom.xml
similarity index 97%
rename from linkis-public-enhancements/linkis-datasource/datasourcemanager/common/pom.xml
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/common/pom.xml
index cdcbfe1..fd3d64a 100644
--- a/linkis-public-enhancements/linkis-datasource/datasourcemanager/common/pom.xml
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/common/pom.xml
@@ -25,7 +25,7 @@
     </parent>
   <modelVersion>4.0.0</modelVersion>
 
-  <artifactId>linkis-datasourcemanager-common</artifactId>
+  <artifactId>linkis-datasource-manager-common</artifactId>
 
 
   <properties>
diff --git a/linkis-public-enhancements/linkis-datasource/datasourcemanager/common/src/main/java/org/apache/linkis/datasourcemanager/common/ServiceErrorCode.java b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/common/src/main/java/org/apache/linkis/datasourcemanager/common/ServiceErrorCode.java
similarity index 100%
rename from linkis-public-enhancements/linkis-datasource/datasourcemanager/common/src/main/java/org/apache/linkis/datasourcemanager/common/ServiceErrorCode.java
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/common/src/main/java/org/apache/linkis/datasourcemanager/common/ServiceErrorCode.java
diff --git a/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/common/src/main/java/org/apache/linkis/datasourcemanager/common/auth/AuthContext.java b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/common/src/main/java/org/apache/linkis/datasourcemanager/common/auth/AuthContext.java
new file mode 100644
index 0000000..cae7e68
--- /dev/null
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/common/src/main/java/org/apache/linkis/datasourcemanager/common/auth/AuthContext.java
@@ -0,0 +1,81 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.linkis.datasourcemanager.common.auth;
+
+import org.apache.linkis.common.conf.CommonVars;
+import org.apache.linkis.datasourcemanager.common.domain.DataSource;
+import org.apache.linkis.server.security.SecurityFilter;
+import org.apache.commons.lang.StringUtils;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * Auth context
+ */
+public class AuthContext {
+
+    public static CommonVars<String> AUTH_ADMINISTRATOR =
+            CommonVars.apply("wds.linkis.server.dsm.auth.admin", "hadoop");
+
+    public static final String AUTH_SEPARATOR = ",";
+
+    private static List<String> administrators = new ArrayList<>();
+
+    static{
+        String adminStr = AUTH_ADMINISTRATOR.getValue();
+        if(StringUtils.isNotBlank(adminStr)){
+            for(String admin : adminStr.split(AUTH_SEPARATOR)){
+                if(StringUtils.isNotBlank(admin)){
+                    administrators.add(admin);
+                }
+            }
+        }
+    }
+
+    /**
+     * If has permission of data source
+     * @param dataSource data source
+     * @param request request
+     * @return boolean
+     */
+    public static boolean hasPermission(DataSource dataSource, HttpServletRequest request){
+        String username = SecurityFilter.getLoginUsername(request);
+        return hasPermission(dataSource, username);
+    }
+
+    public static boolean hasPermission(DataSource dataSource, String username){
+        if (Objects.nonNull(dataSource)) {
+            String creator = dataSource.getCreateUser();
+            return (administrators.contains(username) ||
+                    (StringUtils.isNotBlank(creator) && username.equals(creator)));
+        }
+        return false;
+    }
+
+    /**
+     * If is admin
+     * @param username username
+     * @return boolean
+     */
+    public static boolean isAdministrator(String username){
+        return administrators.contains(username);
+    }
+}
diff --git a/linkis-public-enhancements/linkis-datasource/datasourcemanager/common/src/main/java/org/apache/linkis/datasourcemanager/common/domain/DataSource.java b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/common/src/main/java/org/apache/linkis/datasourcemanager/common/domain/DataSource.java
similarity index 94%
rename from linkis-public-enhancements/linkis-datasource/datasourcemanager/common/src/main/java/org/apache/linkis/datasourcemanager/common/domain/DataSource.java
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/common/src/main/java/org/apache/linkis/datasourcemanager/common/domain/DataSource.java
index 2ce9799..38c03ca 100644
--- a/linkis-public-enhancements/linkis-datasource/datasourcemanager/common/src/main/java/org/apache/linkis/datasourcemanager/common/domain/DataSource.java
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/common/src/main/java/org/apache/linkis/datasourcemanager/common/domain/DataSource.java
@@ -17,6 +17,7 @@
 
 package org.apache.linkis.datasourcemanager.common.domain;
 
+import org.apache.linkis.datasourcemanager.common.exception.JsonErrorException;
 import org.apache.linkis.datasourcemanager.common.util.json.Json;
 import org.apache.commons.lang.StringUtils;
 import org.codehaus.jackson.annotate.JsonIgnore;
@@ -24,6 +25,7 @@ import org.codehaus.jackson.annotate.JsonIgnoreProperties;
 import org.codehaus.jackson.map.annotate.JsonSerialize;
 
 import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Pattern;
 import javax.validation.constraints.Size;
 import java.util.*;
 
@@ -40,6 +42,7 @@ public class DataSource {
      * Data source name
      */
     @NotNull
+    @Pattern(regexp = "^[\\w\\u4e00-\\u9fa5_-]+$")
     private String dataSourceName;
 
     /**
@@ -253,7 +256,11 @@ public class DataSource {
 
     public Map<String, Object> getConnectParams() {
         if(connectParams.isEmpty() && StringUtils.isNotBlank(parameter)){
-            connectParams.putAll(Objects.requireNonNull(Json.fromJson(parameter, Map.class)));
+            try {
+                connectParams.putAll(Objects.requireNonNull(Json.fromJson(parameter, Map.class)));
+            } catch (JsonErrorException e) {
+                //Ignore
+            }
         }
         return connectParams;
     }
diff --git a/linkis-public-enhancements/linkis-datasource/datasourcemanager/common/src/main/java/org/apache/linkis/datasourcemanager/common/domain/DataSourceEnv.java b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/common/src/main/java/org/apache/linkis/datasourcemanager/common/domain/DataSourceEnv.java
similarity index 94%
rename from linkis-public-enhancements/linkis-datasource/datasourcemanager/common/src/main/java/org/apache/linkis/datasourcemanager/common/domain/DataSourceEnv.java
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/common/src/main/java/org/apache/linkis/datasourcemanager/common/domain/DataSourceEnv.java
index 3e3aa03..7448313 100644
--- a/linkis-public-enhancements/linkis-datasource/datasourcemanager/common/src/main/java/org/apache/linkis/datasourcemanager/common/domain/DataSourceEnv.java
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/common/src/main/java/org/apache/linkis/datasourcemanager/common/domain/DataSourceEnv.java
@@ -17,6 +17,7 @@
  
 package org.apache.linkis.datasourcemanager.common.domain;
 
+import org.apache.linkis.datasourcemanager.common.exception.JsonErrorException;
 import org.apache.linkis.datasourcemanager.common.util.json.Json;
 import org.apache.commons.lang.StringUtils;
 import org.codehaus.jackson.annotate.JsonIgnore;
@@ -114,7 +115,11 @@ public class DataSourceEnv {
 
     public Map<String, Object> getConnectParams() {
         if(connectParams.isEmpty() && StringUtils.isNotBlank(parameter)){
-            connectParams.putAll(Objects.requireNonNull(Json.fromJson(parameter, Map.class)));
+            try {
+                connectParams.putAll(Objects.requireNonNull(Json.fromJson(parameter, Map.class)));
+            } catch (JsonErrorException e) {
+                //Ignore
+            }
         }
         return connectParams;
     }
diff --git a/linkis-public-enhancements/linkis-datasource/datasourcemanager/common/src/main/java/org/apache/linkis/datasourcemanager/common/domain/DataSourceParamKeyDefinition.java b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/common/src/main/java/org/apache/linkis/datasourcemanager/common/domain/DataSourceParamKeyDefinition.java
similarity index 90%
rename from linkis-public-enhancements/linkis-datasource/datasourcemanager/common/src/main/java/org/apache/linkis/datasourcemanager/common/domain/DataSourceParamKeyDefinition.java
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/common/src/main/java/org/apache/linkis/datasourcemanager/common/domain/DataSourceParamKeyDefinition.java
index 2cb3d51..7d96a94 100644
--- a/linkis-public-enhancements/linkis-datasource/datasourcemanager/common/src/main/java/org/apache/linkis/datasourcemanager/common/domain/DataSourceParamKeyDefinition.java
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/common/src/main/java/org/apache/linkis/datasourcemanager/common/domain/DataSourceParamKeyDefinition.java
@@ -24,6 +24,7 @@ import java.io.InputStream;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 
 /**
  * Parameter key definition for data source type
@@ -44,6 +45,10 @@ public class DataSourceParamKeyDefinition {
          */
         TEXT(String.class),
         /**
+         * String
+         */
+        TEXTAREA(String.class),
+        /**
          * Long
          */
         NUMBER(Long.class),
@@ -219,6 +224,14 @@ public class DataSourceParamKeyDefinition {
         this.require = require;
     }
 
+    public Scope getScope() {
+        return scope;
+    }
+
+    public void setScope(Scope scope) {
+        this.scope = scope;
+    }
+
     public Long getRefId() {
         return refId;
     }
@@ -235,11 +248,20 @@ public class DataSourceParamKeyDefinition {
         this.refValue = refValue;
     }
 
-    public Scope getScope() {
-        return scope;
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+        DataSourceParamKeyDefinition that = (DataSourceParamKeyDefinition) o;
+        return Objects.equals(id, that.id);
     }
 
-    public void setScope(Scope scope) {
-        this.scope = scope;
+    @Override
+    public int hashCode() {
+        return Objects.hash(id);
     }
 }
diff --git a/linkis-public-enhancements/linkis-datasource/datasourcemanager/common/src/main/java/org/apache/linkis/datasourcemanager/common/domain/DataSourceParameter.java b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/common/src/main/java/org/apache/linkis/datasourcemanager/common/domain/DataSourceParameter.java
similarity index 100%
rename from linkis-public-enhancements/linkis-datasource/datasourcemanager/common/src/main/java/org/apache/linkis/datasourcemanager/common/domain/DataSourceParameter.java
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/common/src/main/java/org/apache/linkis/datasourcemanager/common/domain/DataSourceParameter.java
diff --git a/linkis-public-enhancements/linkis-datasource/datasourcemanager/common/src/main/java/org/apache/linkis/datasourcemanager/common/domain/DataSourceType.java b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/common/src/main/java/org/apache/linkis/datasourcemanager/common/domain/DataSourceType.java
similarity index 100%
rename from linkis-public-enhancements/linkis-datasource/datasourcemanager/common/src/main/java/org/apache/linkis/datasourcemanager/common/domain/DataSourceType.java
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/common/src/main/java/org/apache/linkis/datasourcemanager/common/domain/DataSourceType.java
diff --git a/linkis-public-enhancements/linkis-datasource/datasourcemanager/common/src/main/java/org/apache/linkis/datasourcemanager/common/domain/DatasourceVersion.java b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/common/src/main/java/org/apache/linkis/datasourcemanager/common/domain/DatasourceVersion.java
similarity index 92%
rename from linkis-public-enhancements/linkis-datasource/datasourcemanager/common/src/main/java/org/apache/linkis/datasourcemanager/common/domain/DatasourceVersion.java
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/common/src/main/java/org/apache/linkis/datasourcemanager/common/domain/DatasourceVersion.java
index 971d245..bb9030e 100644
--- a/linkis-public-enhancements/linkis-datasource/datasourcemanager/common/src/main/java/org/apache/linkis/datasourcemanager/common/domain/DatasourceVersion.java
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/common/src/main/java/org/apache/linkis/datasourcemanager/common/domain/DatasourceVersion.java
@@ -17,6 +17,7 @@
 
 package org.apache.linkis.datasourcemanager.common.domain;
 
+import org.apache.linkis.datasourcemanager.common.exception.JsonErrorException;
 import org.apache.linkis.datasourcemanager.common.util.json.Json;
 import org.apache.commons.lang.StringUtils;
 import org.codehaus.jackson.annotate.JsonIgnoreProperties;
@@ -91,7 +92,11 @@ public class DatasourceVersion {
 
     public Map<String, Object> getConnectParams() {
         if(connectParams.isEmpty() && StringUtils.isNotBlank(parameter)){
-            connectParams.putAll(Objects.requireNonNull(Json.fromJson(parameter, Map.class)));
+            try {
+                connectParams.putAll(Objects.requireNonNull(Json.fromJson(parameter, Map.class)));
+            } catch (JsonErrorException e) {
+                //Ignore
+            }
         }
         return connectParams;
     }
diff --git a/linkis-public-enhancements/linkis-datasource/datasourcemanager/common/src/main/java/org/apache/linkis/datasourcemanager/common/DsmConfiguration.java b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/common/src/main/java/org/apache/linkis/datasourcemanager/common/exception/JsonErrorException.java
similarity index 68%
rename from linkis-public-enhancements/linkis-datasource/datasourcemanager/common/src/main/java/org/apache/linkis/datasourcemanager/common/DsmConfiguration.java
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/common/src/main/java/org/apache/linkis/datasourcemanager/common/exception/JsonErrorException.java
index 547cc6b..81a059b 100644
--- a/linkis-public-enhancements/linkis-datasource/datasourcemanager/common/src/main/java/org/apache/linkis/datasourcemanager/common/DsmConfiguration.java
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/common/src/main/java/org/apache/linkis/datasourcemanager/common/exception/JsonErrorException.java
@@ -5,27 +5,26 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *   http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
- 
-package org.apache.linkis.datasourcemanager.common;
 
-import org.apache.linkis.common.conf.CommonVars;
+package org.apache.linkis.datasourcemanager.common.exception;
+
+import org.apache.linkis.common.exception.ErrorException;
 
 /**
- * Configuration
+ * Deal the exception of json processing
  */
-public class DsmConfiguration {
-
-    public static CommonVars<String> DSM_ADMIN_USER_LIST =
-            CommonVars.apply("wds.linkis.server.dsm.admin.users", "");
-
-
+public class JsonErrorException extends ErrorException {
+    public JsonErrorException(int errCode, String desc, Throwable cause) {
+        super(errCode, desc);
+        super.initCause(cause);
+    }
 }
diff --git a/linkis-public-enhancements/linkis-datasource/datasourcemanager/common/src/main/java/org/apache/linkis/datasourcemanager/common/util/CryptoUtils.java b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/common/src/main/java/org/apache/linkis/datasourcemanager/common/util/CryptoUtils.java
similarity index 100%
rename from linkis-public-enhancements/linkis-datasource/datasourcemanager/common/src/main/java/org/apache/linkis/datasourcemanager/common/util/CryptoUtils.java
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/common/src/main/java/org/apache/linkis/datasourcemanager/common/util/CryptoUtils.java
diff --git a/linkis-public-enhancements/linkis-datasource/datasourcemanager/common/src/main/java/org/apache/linkis/datasourcemanager/common/util/PatternInjectUtils.java b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/common/src/main/java/org/apache/linkis/datasourcemanager/common/util/PatternInjectUtils.java
similarity index 96%
rename from linkis-public-enhancements/linkis-datasource/datasourcemanager/common/src/main/java/org/apache/linkis/datasourcemanager/common/util/PatternInjectUtils.java
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/common/src/main/java/org/apache/linkis/datasourcemanager/common/util/PatternInjectUtils.java
index e295827..60753b0 100644
--- a/linkis-public-enhancements/linkis-datasource/datasourcemanager/common/src/main/java/org/apache/linkis/datasourcemanager/common/util/PatternInjectUtils.java
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/common/src/main/java/org/apache/linkis/datasourcemanager/common/util/PatternInjectUtils.java
@@ -17,6 +17,7 @@
  
 package org.apache.linkis.datasourcemanager.common.util;
 
+import org.apache.linkis.datasourcemanager.common.exception.JsonErrorException;
 import org.apache.linkis.datasourcemanager.common.util.json.Json;
 import org.apache.commons.lang.StringEscapeUtils;
 import org.apache.commons.lang.StringUtils;
@@ -48,7 +49,7 @@ public class PatternInjectUtils {
      * @param useDefault use default Value
      * @return
      */
-    public static String inject(String template, Object[] params, boolean useDefault, boolean escape, boolean placeholder){
+    public static String inject(String template, Object[] params, boolean useDefault, boolean escape, boolean placeholder) throws JsonErrorException {
         Matcher matcher = REGEX.matcher(template);
         StringBuffer sb = new StringBuffer();
         int offset = 0;
@@ -87,7 +88,7 @@ public class PatternInjectUtils {
         matcher.appendTail(sb);
         return sb.toString().replace("\\$","$");
     }
-    public static String inject(String pattern, Object[] params){
+    public static String inject(String pattern, Object[] params) throws JsonErrorException {
         return inject(pattern, params, true, true, true);
     }
 
@@ -98,7 +99,7 @@ public class PatternInjectUtils {
      * @param useDefault
      * @return
      */
-    public static String inject(String template, Map<String, Object> params, boolean useDefault, boolean escape, boolean placeholder){
+    public static String inject(String template, Map<String, Object> params, boolean useDefault, boolean escape, boolean placeholder) throws JsonErrorException {
         Matcher matcher = REGEX.matcher(template);
         StringBuffer sb = new StringBuffer();
         //will be more faster?
@@ -161,7 +162,7 @@ public class PatternInjectUtils {
         return sb.toString().replace("\\$", "$");
     }
 
-    public static String inject(String template, Map<String, Object> params){
+    public static String inject(String template, Map<String, Object> params) throws JsonErrorException {
         return inject(template, params, true, true, true);
     }
 
diff --git a/linkis-public-enhancements/linkis-datasource/datasourcemanager/common/src/main/java/org/apache/linkis/datasourcemanager/common/util/json/Json.java b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/common/src/main/java/org/apache/linkis/datasourcemanager/common/util/json/Json.java
similarity index 78%
rename from linkis-public-enhancements/linkis-datasource/datasourcemanager/common/src/main/java/org/apache/linkis/datasourcemanager/common/util/json/Json.java
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/common/src/main/java/org/apache/linkis/datasourcemanager/common/util/json/Json.java
index ca0ca87..ca1d6b5 100644
--- a/linkis-public-enhancements/linkis-datasource/datasourcemanager/common/src/main/java/org/apache/linkis/datasourcemanager/common/util/json/Json.java
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/common/src/main/java/org/apache/linkis/datasourcemanager/common/util/json/Json.java
@@ -21,6 +21,7 @@ import com.fasterxml.jackson.core.JsonGenerator;
 import com.fasterxml.jackson.core.JsonParser;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.*;
+import org.apache.linkis.datasourcemanager.common.exception.JsonErrorException;
 import org.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -28,6 +29,7 @@ import org.slf4j.LoggerFactory;
 import java.io.BufferedReader;
 import java.io.InputStream;
 import java.io.InputStreamReader;
+import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 
 /**
@@ -58,7 +60,7 @@ public class Json {
     private Json(){}
 
     @SuppressWarnings("unchecked")
-    public static <T> T fromJson(String json, Class<?> clazz, Class<?>... parameters){
+    public static <T> T fromJson(String json, Class<?> clazz, Class<?>... parameters)  throws JsonErrorException {
         if(StringUtils.isNotBlank(json)){
             try{
                 if(parameters.length > 0){
@@ -72,30 +74,32 @@ public class Json {
                 }
                 return (T)mapper.readValue(json, clazz);
             } catch (Exception e) {
-                logger.info(e.getLocalizedMessage());
-                throw new RuntimeException(e);
+                String message = "Unable to deserialize to object from string(json) in type: [" +
+                        (null != clazz ? clazz.getSimpleName() : "UNKNOWN") + "], parameters size: " + parameters.length;
+                throw new JsonErrorException( -1, message, e);
             }
         }
         return null;
     }
 
-    public static <T> T fromJson(InputStream stream, Class<?> clazz, Class<?>... parameters){
+    public static <T> T fromJson(InputStream stream, Class<?> clazz, Class<?>... parameters) throws JsonErrorException{
         StringBuilder builder = new StringBuilder();
         String jsonStr = null;
         try{
-            BufferedReader reader = new BufferedReader(new InputStreamReader(stream, "UTF-8"));
+            BufferedReader reader = new BufferedReader(new InputStreamReader(stream, StandardCharsets.UTF_8));
             while((jsonStr = reader.readLine()) != null){
                 builder.append(jsonStr);
             }
             reader.close();
         }catch(Exception e){
-            logger.info(e.getLocalizedMessage());
-            throw new RuntimeException(e);
+            String message = "Unable to deserialize to object from stream(json) in type: [" +
+                    (null != clazz ? clazz.getSimpleName() : "UNKNOWN") + "], parameters size: " + parameters.length;
+            throw new JsonErrorException( -1, message, e);
         }
         return fromJson(builder.toString(), clazz, parameters);
     }
 
-    public static String toJson(Object obj, Class<?> model){
+    public static String toJson(Object obj, Class<?> model) throws JsonErrorException {
         ObjectWriter writer = mapper.writer();
         if(null != obj){
             try{
@@ -104,8 +108,8 @@ public class Json {
                 }
                 return writer.writeValueAsString(obj);
             } catch (JsonProcessingException e) {
-                logger.info(e.getLocalizedMessage());
-                throw new RuntimeException(e);
+                String message = "Unable to serialize the object in type: ["+ (null != model ? model.getSimpleName() : "UNKNOWN") + "]";
+                throw new JsonErrorException( -1, message, e);
             }
         }
         return null;
diff --git a/linkis-public-enhancements/linkis-datasource/datasourcemanager/common/src/main/scala/org/apache/linkis/datasourcemanager/common/protocol/DsmQueryProtocol.scala b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/common/src/main/scala/org/apache/linkis/datasourcemanager/common/protocol/DsmQueryProtocol.scala
similarity index 92%
rename from linkis-public-enhancements/linkis-datasource/datasourcemanager/common/src/main/scala/org/apache/linkis/datasourcemanager/common/protocol/DsmQueryProtocol.scala
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/common/src/main/scala/org/apache/linkis/datasourcemanager/common/protocol/DsmQueryProtocol.scala
index 14366db..4ae9627 100644
--- a/linkis-public-enhancements/linkis-datasource/datasourcemanager/common/src/main/scala/org/apache/linkis/datasourcemanager/common/protocol/DsmQueryProtocol.scala
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/common/src/main/scala/org/apache/linkis/datasourcemanager/common/protocol/DsmQueryProtocol.scala
@@ -30,7 +30,7 @@ trait DsmQueryProtocol {
  * Query request of Data Source Information
  * @param id
  */
-case class DsInfoQueryRequest(id: String, system: String) extends DsmQueryProtocol
+case class DsInfoQueryRequest(id: String, name: String, system: String) extends DsmQueryProtocol
 
 /**
  * Response of parameter map
diff --git a/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/pom.xml b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/pom.xml
similarity index 83%
rename from linkis-public-enhancements/linkis-datasource/datasourcemanager/server/pom.xml
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/pom.xml
index 0789091..65b9c25 100644
--- a/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/pom.xml
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/pom.xml
@@ -25,7 +25,7 @@
     </parent>
   <modelVersion>4.0.0</modelVersion>
 
-  <artifactId>linkis-datasourcemanager-server</artifactId>
+  <artifactId>linkis-datasource-manager-server</artifactId>
 
 
   <properties>
@@ -47,7 +47,7 @@
     <!-- data source manager common dependency-->
     <dependency>
       <groupId>org.apache.linkis</groupId>
-      <artifactId>linkis-datasourcemanager-common</artifactId>
+      <artifactId>linkis-datasource-manager-common</artifactId>
       <version>${linkis.version}</version>
       <exclusions>
         <exclusion>
@@ -74,6 +74,14 @@
           <artifactId>hk2-api</artifactId>
           <groupId>org.glassfish.hk2</groupId>
         </exclusion>
+        <exclusion>
+          <artifactId>jersey-server</artifactId>
+          <groupId>org.glassfish.jersey.core</groupId>
+        </exclusion>
+        <exclusion>
+          <artifactId>jersey-common</artifactId>
+          <groupId>org.glassfish.jersey.core</groupId>
+        </exclusion>
       </exclusions>
     </dependency>
     <!--bml client-->
@@ -81,23 +89,40 @@
       <groupId>org.apache.linkis</groupId>
       <artifactId>linkis-bml-client</artifactId>
       <version>${linkis.version}</version>
+      <exclusions>
+        <exclusion>
+          <artifactId>guava</artifactId>
+          <groupId>com.google.guava</groupId>
+        </exclusion>
+      </exclusions>
     </dependency>
 
     <dependency>
       <groupId>org.apache.linkis</groupId>
       <artifactId>linkis-mybatis</artifactId>
       <version>${linkis.version}</version>
+      <exclusions>
+        <exclusion>
+          <artifactId>spring-core</artifactId>
+          <groupId>org.springframework</groupId>
+        </exclusion>
+        <exclusion>
+          <artifactId>spring-beans</artifactId>
+          <groupId>org.springframework</groupId>
+        </exclusion>
+      </exclusions>
     </dependency>
     <!--rpc-->
     <dependency>
       <groupId>org.apache.linkis</groupId>
       <artifactId>linkis-rpc</artifactId>
       <version>${linkis.version}</version>
+      <scope>provided</scope>
     </dependency>
     <!--Metadata common-->
     <dependency>
       <groupId>org.apache.linkis</groupId>
-      <artifactId>linkis-metadatamanager-common</artifactId>
+      <artifactId>linkis-metadata-manager-common</artifactId>
       <version>${linkis.version}</version>
     </dependency>
   </dependencies>
diff --git a/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/assembly/distribution.xml b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/assembly/distribution.xml
similarity index 98%
rename from linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/assembly/distribution.xml
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/assembly/distribution.xml
index be92b44..b50fe12 100644
--- a/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/assembly/distribution.xml
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/assembly/distribution.xml
@@ -19,7 +19,7 @@
         xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/2.3"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/2.3 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
-    <id>linkis-dsm-server</id>
+    <id>linkis-datasource-manager-server</id>
     <formats>
         <format>zip</format>
         <format>dir</format>
diff --git a/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/LinkisDataSourceManagerApplication.java b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/LinkisDataSourceManagerApplication.java
similarity index 100%
rename from linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/LinkisDataSourceManagerApplication.java
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/LinkisDataSourceManagerApplication.java
diff --git a/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/dao/DataSourceDao.java b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/dao/DataSourceDao.java
similarity index 75%
rename from linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/dao/DataSourceDao.java
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/dao/DataSourceDao.java
index 6967a3c..40f6002 100644
--- a/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/dao/DataSourceDao.java
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/dao/DataSourceDao.java
@@ -43,24 +43,37 @@ public interface DataSourceDao {
     DataSource selectOneDetail(@Param("dataSourceId") Long dataSourceId);
 
     /**
+     * View detail by name
+     * @param dataSourceName data source name
+     * @return data source entity
+     */
+    DataSource selectOneDetailByName(@Param("dataSourceName") String dataSourceName);
+    /**
      * View normal
      * @param dataSourceId data source id
      * @return data source entity
      */
     DataSource selectOne(@Param("dataSourceId") Long dataSourceId);
+
+    /**
+     * Select one by username
+     * @param dataSourceName data source name
+     * @return data source entity
+     */
+    DataSource selectOneByName(@Param("dataSourceName") String dataSourceName);
     /**
      * Delete One
      * @param dataSourceId data source id
      * @return affect row
      */
-    int removeOne(@Param("dataSourceId")Long dataSourceId);
+    int removeOne(@Param("dataSourceId") Long dataSourceId);
 
     /**
      * Expire One
      * @param dataSourceId data source id
      * @return affect row
      */
-    int expireOne(@Param("dataSourceId")Long dataSourceId);
+    int expireOne(@Param("dataSourceId") Long dataSourceId);
 
 
     /**
@@ -81,12 +94,12 @@ public interface DataSourceDao {
      * @param dataSourceId
      * @param versionId
      */
-    int setPublishedVersionId(@Param("dataSourceId")Long dataSourceId, @Param("versionId")Long versionId);
+    int setPublishedVersionId(@Param("dataSourceId") Long dataSourceId, @Param("versionId") Long versionId);
 
     /**
      * update version id
      * @param datasourceId
      * @param versionId
      */
-    void updateVersionId(@Param("dataSourceId")Long datasourceId, @Param("versionId")long versionId);
+    void updateVersionId(@Param("dataSourceId") Long datasourceId, @Param("versionId") long versionId);
 }
diff --git a/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/dao/DataSourceEnvDao.java b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/dao/DataSourceEnvDao.java
similarity index 100%
rename from linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/dao/DataSourceEnvDao.java
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/dao/DataSourceEnvDao.java
diff --git a/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/dao/DataSourceParamKeyDao.java b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/dao/DataSourceParamKeyDao.java
similarity index 92%
rename from linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/dao/DataSourceParamKeyDao.java
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/dao/DataSourceParamKeyDao.java
index 48a901a..be9fc84 100644
--- a/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/dao/DataSourceParamKeyDao.java
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/dao/DataSourceParamKeyDao.java
@@ -37,6 +37,6 @@ public interface DataSourceParamKeyDao {
      * @param scope scope
      * @return
      */
-    List<DataSourceParamKeyDefinition> listByDataSourceTypeAndScope(@Param("dataSourceTypeId")Long dataSourceTypeId,
-                                                                    @Param("scope")DataSourceParamKeyDefinition.Scope scope);
+    List<DataSourceParamKeyDefinition> listByDataSourceTypeAndScope(@Param("dataSourceTypeId") Long dataSourceTypeId,
+                                                                    @Param("scope") DataSourceParamKeyDefinition.Scope scope);
 }
diff --git a/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/dao/DataSourceTypeDao.java b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/dao/DataSourceTypeDao.java
similarity index 100%
rename from linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/dao/DataSourceTypeDao.java
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/dao/DataSourceTypeDao.java
diff --git a/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/dao/DataSourceTypeEnvDao.java b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/dao/DataSourceTypeEnvDao.java
similarity index 100%
rename from linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/dao/DataSourceTypeEnvDao.java
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/dao/DataSourceTypeEnvDao.java
diff --git a/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/dao/DataSourceVersionDao.java b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/dao/DataSourceVersionDao.java
similarity index 94%
rename from linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/dao/DataSourceVersionDao.java
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/dao/DataSourceVersionDao.java
index 285eda6..cdf4310 100644
--- a/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/dao/DataSourceVersionDao.java
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/dao/DataSourceVersionDao.java
@@ -44,7 +44,7 @@ public interface DataSourceVersionDao {
      * @param version
      * @return
      */
-    String selectOneVersion(@Param("dataSourceId")Long dataSourceId, @Param("version")Long version);
+    String selectOneVersion(@Param("dataSourceId") Long dataSourceId, @Param("version") Long version);
 
     /**
      * get version list from datasource id
diff --git a/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/dao/mapper/DataSouceMapper.xml b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/dao/mapper/DataSouceMapper.xml
similarity index 90%
rename from linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/dao/mapper/DataSouceMapper.xml
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/dao/mapper/DataSouceMapper.xml
index 8345644..746d15e 100644
--- a/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/dao/mapper/DataSouceMapper.xml
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/dao/mapper/DataSouceMapper.xml
@@ -102,7 +102,7 @@
         <include refid="data_source_insert_columns"/>
         ) VALUES(#{dataSourceName}, #{dataSourceTypeId},
         #{dataSourceDesc,jdbcType=VARCHAR}, #{createIdentify}, #{createSystem}, #{createUser},
-        #{parameter}, #{createTime}, #{modifyUser,jdbcType=VARCHAR}, #{modifyTime,jdbcType=DATE},
+        #{parameter}, #{createTime}, #{modifyUser,jdbcType=VARCHAR}, #{modifyTime,jdbcType=TIMESTAMP},
         #{labels})
     </insert>
 
@@ -116,6 +116,15 @@
         </where>
     </select>
 
+    <select id="selectOneDetailByName" resultMap="dataSourceDetailMap">
+        <![CDATA[SELECT ]]>
+        <include refid="data_source_join_type"/>
+        <![CDATA[ FROM `linkis_datasource_type` t
+        INNER JOIN `linkis_datasource` d ON t.`id` = d.`datasource_type_id`]]>
+        <where>
+            d.`datasource_name` = #{dataSourceName} LIMIT 1
+        </where>
+    </select>
     <select id="selectOne" resultMap="dataSourceMap">
         <![CDATA[SELECT ]]>
         <include refid="data_source_query_columns"/>
@@ -125,6 +134,15 @@
         </where>
     </select>
 
+    <select id="selectOneByName" resultMap="dataSourceMap">
+        <![CDATA[SELECT ]]>
+        <include refid="data_source_query_columns"/>
+        <![CDATA[ FROM `linkis_datasource` ]]>
+        <where>
+            `datasource_name` = #{dataSourceName}
+        </where>
+        <![CDATA[ LIMIT 1; ]]>
+    </select>
     <select id="selectEnvById" resultType="DataSourceEnv">
         <![CDATA[
         SELECT `env_name`, `parameter` AS `env_parameter`
@@ -150,7 +168,7 @@
             </if>
             <![CDATA[`create_identify` = #{createIdentify,jdbcType=VARCHAR},]]>
             <![CDATA[`create_system` = #{createSystem,jdbcType=VARCHAR},]]>
-            <![CDATA[`modify_time` = #{modifyTime,jdbcType=DATE},]]>
+            <![CDATA[`modify_time` = #{modifyTime,jdbcType=TIMESTAMP},]]>
             <![CDATA[`modify_user` = #{modifyUser,jdbcType=VARCHAR},]]>
             <![CDATA[`labels` = #{labels,jdbcType=VARCHAR}]]>
         </set>
@@ -181,6 +199,9 @@
             <if test="dataSourceTypeId != null and dataSourceTypeId > 0">
                 <![CDATA[AND `datasource_type_id` = #{dataSourceTypeId}]]>
             </if>
+            <if test="permissionUser != null and permissionUser != ''">
+                <![CDATA[AND `create_user` = #{permissionUser}]]>
+            </if>
 <!--            <if test="createIdentifyList.size() > 0">-->
 <!--                <choose>-->
 <!--                    <when test="createIdentifyList.size() == 1">-->
@@ -197,6 +218,7 @@
 <!--                </choose>-->
 <!--            </if>-->
         </where>
+        <![CDATA[ ORDER BY create_time DESC ]]>
     </select>
 
     <update id="setPublishedVersionId">
diff --git a/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/dao/mapper/DataSourceEnvMapper.xml b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/dao/mapper/DataSourceEnvMapper.xml
similarity index 100%
rename from linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/dao/mapper/DataSourceEnvMapper.xml
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/dao/mapper/DataSourceEnvMapper.xml
diff --git a/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/dao/mapper/DataSourceParamKeyMapper.xml b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/dao/mapper/DataSourceParamKeyMapper.xml
similarity index 100%
rename from linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/dao/mapper/DataSourceParamKeyMapper.xml
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/dao/mapper/DataSourceParamKeyMapper.xml
diff --git a/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/dao/mapper/DataSourceTypeEnvMapper.xml b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/dao/mapper/DataSourceTypeEnvMapper.xml
similarity index 100%
rename from linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/dao/mapper/DataSourceTypeEnvMapper.xml
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/dao/mapper/DataSourceTypeEnvMapper.xml
diff --git a/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/dao/mapper/DataSourceTypeMapper.xml b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/dao/mapper/DataSourceTypeMapper.xml
similarity index 100%
rename from linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/dao/mapper/DataSourceTypeMapper.xml
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/dao/mapper/DataSourceTypeMapper.xml
diff --git a/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/dao/mapper/DataSourceVersionMapper.xml b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/dao/mapper/DataSourceVersionMapper.xml
similarity index 97%
rename from linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/dao/mapper/DataSourceVersionMapper.xml
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/dao/mapper/DataSourceVersionMapper.xml
index 6bbcba7..6b435a9 100644
--- a/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/dao/mapper/DataSourceVersionMapper.xml
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/dao/mapper/DataSourceVersionMapper.xml
@@ -43,7 +43,7 @@
 
     <select id="selectOneVersion" resultType="string">
         SELECT `parameter`
-         FROM `linkis_datasource_version` WHERE datasource_id = #{dataSourceId} and `version_id` = #{version};
+         FROM `linkis_datasource_version` WHERE datasource_id = #{dataSourceId} and `version_id` = #{version, jdbcType=INTEGER};
     </select>
 
     <select id="getVersionsFromDatasourceId" resultMap="dataSourceVersionMap">
diff --git a/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/formdata/CustomMultiPartFormDataTransformer.java b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/formdata/CustomMultiPartFormDataTransformer.java
similarity index 100%
rename from linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/formdata/CustomMultiPartFormDataTransformer.java
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/formdata/CustomMultiPartFormDataTransformer.java
diff --git a/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/formdata/FormDataTransformerFactory.java b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/formdata/FormDataTransformerFactory.java
similarity index 100%
rename from linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/formdata/FormDataTransformerFactory.java
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/formdata/FormDataTransformerFactory.java
diff --git a/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/formdata/FormStreamContent.java b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/formdata/FormStreamContent.java
similarity index 100%
rename from linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/formdata/FormStreamContent.java
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/formdata/FormStreamContent.java
diff --git a/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/formdata/MultiPartFormDataTransformer.java b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/formdata/MultiPartFormDataTransformer.java
similarity index 100%
rename from linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/formdata/MultiPartFormDataTransformer.java
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/formdata/MultiPartFormDataTransformer.java
diff --git a/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/restful/DataSourceAdminRestfulApi.java b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/restful/DataSourceAdminRestfulApi.java
similarity index 64%
rename from linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/restful/DataSourceAdminRestfulApi.java
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/restful/DataSourceAdminRestfulApi.java
index 5f91a93..05b779f 100644
--- a/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/restful/DataSourceAdminRestfulApi.java
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/restful/DataSourceAdminRestfulApi.java
@@ -45,7 +45,7 @@ import java.util.Map;
 import java.util.Set;
 
 @RestController
-@RequestMapping(value = "/data_source",produces = {"application/json"})
+@RequestMapping(value = "/data-source-manager",produces = {"application/json"})
 public class DataSourceAdminRestfulApi {
 
     @Autowired
@@ -68,19 +68,21 @@ public class DataSourceAdminRestfulApi {
     }
 
     @RequestMapping(value = "/env/json",method = RequestMethod.POST)
-    public Message insertJsonEnv(DataSourceEnv dataSourceEnv, HttpServletRequest req) throws ErrorException {
-        String userName = SecurityFilter.getLoginUsername(req);
-        if(!RestfulApiHelper.isAdminUser(userName)){
-            return Message.error("User '" + userName + "' is not admin user[非管理员用户]");
-        }
-        //Bean validation
-        Set<ConstraintViolation<DataSourceEnv>> result = beanValidator.validate(dataSourceEnv, Default.class);
-        if(result.size() > 0){
-            throw new ConstraintViolationException(result);
-        }
-        dataSourceEnv.setCreateUser(userName);
-        insertDataSourceEnv(dataSourceEnv);
-        return Message.ok().data("insert_id", dataSourceEnv.getId());
+    public Message insertJsonEnv(@RequestBody DataSourceEnv dataSourceEnv, HttpServletRequest req) throws ErrorException {
+        return RestfulApiHelper.doAndResponse(()-> {
+            String userName = SecurityFilter.getLoginUsername(req);
+            if (!RestfulApiHelper.isAdminUser(userName)) {
+                return Message.error("User '" + userName + "' is not admin user[非管理员用户]");
+            }
+            //Bean validation
+            Set<ConstraintViolation<DataSourceEnv>> result = beanValidator.validate(dataSourceEnv, Default.class);
+            if (result.size() > 0) {
+                throw new ConstraintViolationException(result);
+            }
+            dataSourceEnv.setCreateUser(userName);
+            insertDataSourceEnv(dataSourceEnv);
+            return Message.ok().data("insert_id", dataSourceEnv.getId());
+        },"/data-source-manager/env/json", "Fail to insert data source environment[新增数据源环境失败]");
     }
 
 //    @RequestMapping(value = "/env/form",method = RequestMethod.POST)
@@ -97,55 +99,63 @@ public class DataSourceAdminRestfulApi {
 
     @RequestMapping(value = "/env_list/all/type/{type_id}",method = RequestMethod.GET)
     public Message getAllEnvListByDataSourceType(@PathVariable("type_id")Long typeId){
-        List<DataSourceEnv> envList = dataSourceInfoService.listDataSourceEnvByType(typeId);
-        return Message.ok().data("env_list", envList);
+        return RestfulApiHelper.doAndResponse(()-> {
+            List<DataSourceEnv> envList = dataSourceInfoService.listDataSourceEnvByType(typeId);
+            return Message.ok().data("env_list", envList);
+        }, "/data-source-manager/env_list/all/type/" + typeId, "Fail to get data source environment list[获取数据源环境清单失败]");
     }
 
     @RequestMapping (value = "/env/{env_id}",method = RequestMethod.GET)
     public Message getEnvEntityById(@PathVariable("env_id")Long envId){
-        DataSourceEnv dataSourceEnv = dataSourceInfoService.getDataSourceEnv(envId);
-        return Message.ok().data("env", dataSourceEnv);
+        return RestfulApiHelper.doAndResponse(()-> {
+            DataSourceEnv dataSourceEnv = dataSourceInfoService.getDataSourceEnv(envId);
+            return Message.ok().data("env", dataSourceEnv);
+        }, "/data-source-manager/env/" + envId, "Fail to get data source environment[获取数据源环境信息失败]");
     }
 
     @RequestMapping(value = "/env/{env_id}",method = RequestMethod.DELETE)
     public Message removeEnvEntity(@PathVariable("env_id")Long envId,
                                     HttpServletRequest request){
-        String userName = SecurityFilter.getLoginUsername(request);
-        if(!RestfulApiHelper.isAdminUser(userName)){
-            return Message.error("User '" + userName + "' is not admin user[非管理员用户]");
-        }
-        Long removeId = dataSourceInfoService.removeDataSourceEnv(envId);
-        if(removeId < 0){
-            return Message.error("Fail to remove data source environment[删除数据源环境信息失败], [id:" +
-                    envId + "]");
-        }
-        return Message.ok().data("remove_id", removeId);
+        return RestfulApiHelper.doAndResponse(() -> {
+            String userName = SecurityFilter.getLoginUsername(request);
+            if (!RestfulApiHelper.isAdminUser(userName)) {
+                return Message.error("User '" + userName + "' is not admin user[非管理员用户]");
+            }
+            Long removeId = dataSourceInfoService.removeDataSourceEnv(envId);
+            if (removeId < 0) {
+                return Message.error("Fail to remove data source environment[删除数据源环境信息失败], [id:" +
+                        envId + "]");
+            }
+            return Message.ok().data("remove_id", removeId);
+        }, "/data-source-manager/env/" + envId, "Fail to remove data source environment[删除数据源环境信息失败]");
     }
 
     @RequestMapping(value = "/env/{env_id}/json",method = RequestMethod.PUT)
-    public Message updateJsonEnv(DataSourceEnv dataSourceEnv,
+    public Message updateJsonEnv(@RequestBody DataSourceEnv dataSourceEnv,
                                   @PathVariable("env_id")Long envId,
                                    HttpServletRequest request) throws ErrorException {
-        String userName = SecurityFilter.getLoginUsername(request);
-        if(!RestfulApiHelper.isAdminUser(userName)){
-            return Message.error("User '" + userName + "' is not admin user[非管理员用户]");
-        }
-        //Bean validation
-        Set<ConstraintViolation<DataSourceEnv>> result = beanValidator.validate(dataSourceEnv, Default.class);
-        if(result.size() > 0){
-            throw new ConstraintViolationException(result);
-        }
-        dataSourceEnv.setId(envId);
-        dataSourceEnv.setModifyUser(userName);
-        dataSourceEnv.setModifyTime(Calendar.getInstance().getTime());
-        DataSourceEnv storedDataSourceEnv = dataSourceInfoService.getDataSourceEnv(envId);
-        if(null == storedDataSourceEnv){
-            return Message.error("Fail to update data source environment[更新数据源环境失败], " + "[Please check the id:'"
-                    + envId + " is correct ']");
-        }
-        dataSourceEnv.setCreateUser(storedDataSourceEnv.getCreateUser());
-        updateDataSourceEnv(dataSourceEnv, storedDataSourceEnv);
-        return Message.ok().data("update_id", envId);
+        return RestfulApiHelper.doAndResponse(() -> {
+            String userName = SecurityFilter.getLoginUsername(request);
+            if (!RestfulApiHelper.isAdminUser(userName)) {
+                return Message.error("User '" + userName + "' is not admin user[非管理员用户]");
+            }
+            //Bean validation
+            Set<ConstraintViolation<DataSourceEnv>> result = beanValidator.validate(dataSourceEnv, Default.class);
+            if (result.size() > 0) {
+                throw new ConstraintViolationException(result);
+            }
+            dataSourceEnv.setId(envId);
+            dataSourceEnv.setModifyUser(userName);
+            dataSourceEnv.setModifyTime(Calendar.getInstance().getTime());
+            DataSourceEnv storedDataSourceEnv = dataSourceInfoService.getDataSourceEnv(envId);
+            if (null == storedDataSourceEnv) {
+                return Message.error("Fail to update data source environment[更新数据源环境失败], " + "[Please check the id:'"
+                        + envId + " is correct ']");
+            }
+            dataSourceEnv.setCreateUser(storedDataSourceEnv.getCreateUser());
+            updateDataSourceEnv(dataSourceEnv, storedDataSourceEnv);
+            return Message.ok().data("update_id", envId);
+        }, "/data-source-manager/env/" + envId + "/json", "Fail to update data source environment[更新数据源环境失败]");
     }
 
 //    @RequestMapping(value = "/env/{env_id}/form",method = RequestMethod.PUT,consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
@@ -178,11 +188,13 @@ public class DataSourceAdminRestfulApi {
                                        @RequestParam(value = "typeId",required = false)Long dataSourceTypeId,
                                        @RequestParam(value = "currentPage",required = false)Integer currentPage,
                                        @RequestParam(value = "pageSize",required = false)Integer pageSize){
-        DataSourceEnvVo dataSourceEnvVo = new DataSourceEnvVo(envName, dataSourceTypeId);
-        dataSourceEnvVo.setCurrentPage(null != currentPage ? currentPage : 1);
-        dataSourceEnvVo.setPageSize(null != pageSize? pageSize : 10);
-        List<DataSourceEnv> queryList = dataSourceInfoService.queryDataSourceEnvPage(dataSourceEnvVo);
-        return Message.ok().data("query_list", queryList);
+        return RestfulApiHelper.doAndResponse(() -> {
+            DataSourceEnvVo dataSourceEnvVo = new DataSourceEnvVo(envName, dataSourceTypeId);
+            dataSourceEnvVo.setCurrentPage(null != currentPage ? currentPage : 1);
+            dataSourceEnvVo.setPageSize(null != pageSize ? pageSize : 10);
+            List<DataSourceEnv> queryList = dataSourceInfoService.queryDataSourceEnvPage(dataSourceEnvVo);
+            return Message.ok().data("query_list", queryList);
+        }, "/data-source-manager/env", "Fail to query page of data source environment[查询数据源环境失败]");
     }
 
     /**
diff --git a/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/restful/DataSourceCoreRestfulApi.java b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/restful/DataSourceCoreRestfulApi.java
new file mode 100644
index 0000000..137c712
--- /dev/null
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/restful/DataSourceCoreRestfulApi.java
@@ -0,0 +1,432 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.linkis.datasourcemanager.core.restful;
+
+import com.github.pagehelper.PageInfo;
+import org.apache.linkis.common.exception.ErrorException;
+import org.apache.linkis.datasourcemanager.common.ServiceErrorCode;
+import org.apache.linkis.datasourcemanager.common.auth.AuthContext;
+import org.apache.linkis.datasourcemanager.core.formdata.FormDataTransformerFactory;
+import org.apache.linkis.datasourcemanager.core.formdata.MultiPartFormDataTransformer;
+import org.apache.linkis.datasourcemanager.core.service.DataSourceInfoService;
+import org.apache.linkis.datasourcemanager.core.service.DataSourceRelateService;
+import org.apache.linkis.datasourcemanager.core.service.MetadataOperateService;
+import org.apache.linkis.datasourcemanager.core.vo.DataSourceVo;
+import org.apache.linkis.datasourcemanager.core.validate.ParameterValidateException;
+import org.apache.linkis.datasourcemanager.core.validate.ParameterValidator;
+import org.apache.linkis.metadatamanager.common.MdmConfiguration;
+import org.apache.linkis.datasourcemanager.common.domain.DataSource;
+import org.apache.linkis.datasourcemanager.common.domain.DataSourceParamKeyDefinition;
+import org.apache.linkis.datasourcemanager.common.domain.DataSourceType;
+import org.apache.linkis.datasourcemanager.common.domain.DatasourceVersion;
+import org.apache.linkis.server.Message;
+import org.apache.linkis.server.security.SecurityFilter;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.PostConstruct;
+import javax.servlet.http.HttpServletRequest;
+import javax.validation.ConstraintViolation;
+import javax.validation.ConstraintViolationException;
+import javax.validation.Validator;
+import javax.validation.groups.Default;
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+import java.util.*;
+
+@RestController
+@RequestMapping(value = "/data-source-manager-manager",produces = {"application/json"})
+public class DataSourceCoreRestfulApi {
+
+    private static final Logger LOG = LoggerFactory.getLogger(DataSourceCoreRestfulApi.class);
+    @Autowired
+    private DataSourceInfoService dataSourceInfoService;
+
+    @Autowired
+    private DataSourceRelateService dataSourceRelateService;
+
+    @Autowired
+    private ParameterValidator parameterValidator;
+
+    @Autowired
+    private Validator beanValidator;
+
+    @Autowired
+    private MetadataOperateService metadataOperateService;
+
+    private MultiPartFormDataTransformer formDataTransformer;
+
+
+    @PostConstruct
+    public void initRestful() {
+        this.formDataTransformer = FormDataTransformerFactory.buildCustom();
+    }
+
+
+    @RequestMapping(value = "/type/all",method = RequestMethod.GET)
+    public Message getAllDataSourceTypes() {
+        return RestfulApiHelper.doAndResponse(() -> {
+            List<DataSourceType> dataSourceTypes = dataSourceRelateService.getAllDataSourceTypes();
+            return Message.ok().data("type_list", dataSourceTypes);
+        }, "/data-source-manager/type/all", "Fail to get all types of data source[获取数据源类型列表失败]");
+    }
+
+
+    @RequestMapping(value = "/key_define/type/{type_id}",method = RequestMethod.GET)
+    public Message getKeyDefinitionsByType(@PathVariable("type_id") Long dataSourceTypeId) {
+        return RestfulApiHelper.doAndResponse(() -> {
+                    List<DataSourceParamKeyDefinition> keyDefinitions = dataSourceRelateService.getKeyDefinitionsByType(dataSourceTypeId);
+                    return Message.ok().data("key_define", keyDefinitions);
+                }, "/data-source-manager/key_define/type/" + dataSourceTypeId,
+                "Fail to get key definitions of data source type[查询数据源参数键值对失败]");
+    }
+
+
+    @RequestMapping(value = "/info/json" ,method = RequestMethod.POST)
+    public Message insertJsonInfo(@RequestBody DataSource dataSource, HttpServletRequest req) {
+        return RestfulApiHelper.doAndResponse(() -> {
+            String userName = SecurityFilter.getLoginUsername(req);
+            //Bean validation
+            Set<ConstraintViolation<DataSource>> result = beanValidator.validate(dataSource, Default.class);
+            if (result.size() > 0) {
+                throw new ConstraintViolationException(result);
+            }
+            //Escape the data source name
+            dataSource.setCreateUser(userName);
+            if (dataSourceInfoService.existDataSource(dataSource.getDataSourceName())){
+                return Message.error("The data source named: " + dataSource.getDataSourceName() + " has been existed [数据源: " +dataSource.getDataSourceName() + " 已经存在]");
+            }
+            insertDataSource(dataSource);
+            return Message.ok().data("insert_id", dataSource.getId());
+        }, "/data-source-manager/info/json", "Fail to insert data source[新增数据源失败]");
+    }
+
+    @RequestMapping(value = "/info/{data_source_id}/json",method = RequestMethod.PUT)
+    public Message updateDataSourceInJson(@RequestBody DataSource dataSource,
+                                           @PathVariable("data_source_id") Long dataSourceId,
+                                            HttpServletRequest req) {
+        return RestfulApiHelper.doAndResponse(() -> {
+            String userName = SecurityFilter.getLoginUsername(req);
+            //Bean validation
+            Set<ConstraintViolation<DataSource>> result = beanValidator.validate(dataSource, Default.class);
+            if (result.size() > 0) {
+                throw new ConstraintViolationException(result);
+            }
+            dataSource.setId(dataSourceId);
+            dataSource.setModifyUser(userName);
+            dataSource.setModifyTime(Calendar.getInstance().getTime());
+            DataSource storedDataSource = dataSourceInfoService.getDataSourceInfoBrief(dataSourceId);
+            if (null == storedDataSource) {
+                return Message.error("This data source was not found [更新数据源失败]");
+            }
+            if (!AuthContext.hasPermission(storedDataSource, userName)){
+                return Message.error("Don't have update permission for data source [没有数据源的更新权限]");
+            }
+            String dataSourceName = dataSource.getDataSourceName();
+            if (!Objects.equals(dataSourceName, storedDataSource.getDataSourceName())
+                && dataSourceInfoService.existDataSource(dataSourceName)){
+                return Message.error("The data source named: " + dataSourceName + " has been existed [数据源: " +dataSourceName + " 已经存在]");
+            }
+            dataSourceInfoService.updateDataSourceInfo(dataSource);
+            return Message.ok().data("update_id", dataSourceId);
+        }, "/data-source-manager/info/" + dataSourceId + "/json", "Fail to update data source[更新数据源失败]");
+    }
+
+    /**
+     * create or update parameter, save a version of parameter,return version id.
+     *
+     * @param params
+     * @param req
+     * @return
+     */
+    @RequestMapping(value = "/parameter/{datasource_id}/json", method = RequestMethod.POST)
+    public Message insertJsonParameter(
+            @PathVariable("datasource_id") Long datasourceId,
+            @RequestBody Map<String, Object> params,
+            HttpServletRequest req) {
+        return RestfulApiHelper.doAndResponse(() -> {
+            Map<String, Object> connectParams = (Map) params.get("connectParams");
+            String comment = params.get("comment").toString();
+            String userName = SecurityFilter.getLoginUsername(req);
+
+            DataSource dataSource = dataSourceInfoService.getDataSourceInfoBrief(datasourceId);
+            if (null == dataSource) {
+                throw new ErrorException(ServiceErrorCode.DATASOURCE_NOTFOUND_ERROR.getValue(), "datasource not found ");
+            }
+            if (!AuthContext.hasPermission(dataSource, userName)){
+                return Message.error("Don't have update permission for data source [没有数据源的更新权限]");
+            }
+            List<DataSourceParamKeyDefinition> keyDefinitionList = dataSourceRelateService
+                    .getKeyDefinitionsByType(dataSource.getDataSourceTypeId());
+            parameterValidator.validate(keyDefinitionList, connectParams);
+            //Encrypt password value type
+            RestfulApiHelper.encryptPasswordKey(keyDefinitionList, connectParams);
+
+            long versionId = dataSourceInfoService.insertDataSourceParameter(keyDefinitionList, datasourceId, connectParams, userName, comment);
+
+            return Message.ok().data("version", versionId);
+        }, "/data-source-manager/parameter/" + datasourceId + "/json", "Fail to insert data source parameter [保存数据源参数失败]");
+    }
+
+
+    /**
+     * get datasource detail, for current version
+     *
+     * @param dataSourceId
+     * @param request
+     * @return
+     */
+    @RequestMapping(value = "/info/{data_source_id}", method = RequestMethod.GET)
+    public Message getInfoByDataSourceId(@PathVariable("data_source_id") Long dataSourceId,
+                                          HttpServletRequest request) {
+        return RestfulApiHelper.doAndResponse(() -> {
+            DataSource dataSource = dataSourceInfoService.getDataSourceInfo(dataSourceId);
+            if (!AuthContext.hasPermission(dataSource, request)){
+                return Message.error("Don't have query permission for data source [没有数据源的查询权限]");
+            }
+            // Decrypt
+            if (null != dataSource) {
+                RestfulApiHelper.decryptPasswordKey(dataSourceRelateService.getKeyDefinitionsByType(dataSource.getDataSourceTypeId())
+                        , dataSource.getConnectParams());
+            }
+            return Message.ok().data("info", dataSource);
+        }, "/data-source-manager/info/" + dataSourceId, "Fail to access data source[获取数据源信息失败]");
+    }
+
+    @RequestMapping(value = "/info/name/{data_source_name}", method = RequestMethod.GET)
+    public Message getInfoByDataSourceName(@PathVariable("data_source_name")String dataSourceName,
+                                            HttpServletRequest request) throws UnsupportedEncodingException {
+        return RestfulApiHelper.doAndResponse(() -> {
+            DataSource dataSource = dataSourceInfoService.getDataSourceInfo(dataSourceName);
+            if (!AuthContext.hasPermission(dataSource, request)){
+                return Message.error("Don't have query permission for data source [没有数据源的查询权限]");
+            }
+            // Decrypt
+            if (null != dataSource) {
+                RestfulApiHelper.decryptPasswordKey(dataSourceRelateService.getKeyDefinitionsByType(dataSource.getDataSourceTypeId())
+                        , dataSource.getConnectParams());
+            }
+            return Message.ok().data("info", dataSource);
+        }, "/data-source-manager/info/name/" +  URLEncoder.encode(dataSourceName, "UTF-8") , "Fail to access data source[获取数据源信息失败]");
+    }
+
+    /**
+     * get datasource detail
+     *
+     * @param dataSourceId
+     * @param version
+     * @return
+     */
+    @RequestMapping( value = "/info/{data_source_id}/{version}", method = RequestMethod.GET)
+    public Message getInfoByDataSourceIdAndVersion(@PathVariable("data_source_id") Long dataSourceId,
+                                                    @PathVariable("version") Long version, HttpServletRequest request) {
+        return RestfulApiHelper.doAndResponse(() -> {
+            DataSource dataSource = dataSourceInfoService.getDataSourceInfo(dataSourceId, version);
+            if (!AuthContext.hasPermission(dataSource, request)){
+                return Message.error("Don't have query permission for data source [没有数据源的查询权限]");
+            }
+            // Decrypt
+            if (null != dataSource) {
+                RestfulApiHelper.decryptPasswordKey(dataSourceRelateService.getKeyDefinitionsByType(dataSource.getDataSourceTypeId())
+                        , dataSource.getConnectParams());
+            }
+            return Message.ok().data("info", dataSource);
+        }, "/data-source-manager/info/" + dataSourceId + "/" + version, "Fail to access data source[获取数据源信息失败]");
+    }
+
+    /**
+     * get verion list for datasource
+     *
+     * @param dataSourceId
+     * @param request
+     * @return
+     */
+    @RequestMapping( value = "/{data_source_id}/versions", method = RequestMethod.GET)
+    public Message getVersionList(@PathVariable("data_source_id") Long dataSourceId,
+                                    HttpServletRequest request) {
+        return RestfulApiHelper.doAndResponse(() -> {
+            DataSource dataSource = dataSourceInfoService.getDataSourceInfoBrief(dataSourceId);
+            if (!AuthContext.hasPermission(dataSource, request)){
+                return Message.error("Don't have query permission for data source [没有数据源的查询权限]");
+            }
+            List<DatasourceVersion> versions = dataSourceInfoService.getVersionList(dataSourceId);
+            // Decrypt
+            if (null != versions) {
+                versions.forEach(version -> {
+                    RestfulApiHelper.decryptPasswordKey(dataSourceRelateService.getKeyDefinitionsByType(dataSource.getDataSourceTypeId())
+                            , version.getConnectParams());
+                });
+            }
+            return Message.ok().data("versions", versions);
+        }, "/data-source-manager/" + dataSourceId + "/versions", "Fail to access data source[获取数据源信息失败]");
+    }
+
+
+    @RequestMapping(value = "/publish/{datasource_id}/{version_id}", method = RequestMethod.POST)
+    public Message publishByDataSourceId(@PathVariable("datasource_id") Long dataSourceId,
+                                          @PathVariable("version_id") Long versionId,
+                                          HttpServletRequest request) {
+        return RestfulApiHelper.doAndResponse(() -> {
+            //Get brief info
+            DataSource dataSource = dataSourceInfoService.getDataSourceInfoBrief(dataSourceId);
+            if (!AuthContext.hasPermission(dataSource, request)){
+                return Message.error("Don't have publish permission for data source [没有数据源的发布权限]");
+            }
+            int updateResult = dataSourceInfoService.publishByDataSourceId(dataSourceId, versionId);
+            if (0 == updateResult) {
+                return Message.error("publish error");
+            }
+            return Message.ok();
+        }, "/data-source-manager/publish/" + dataSourceId + "/" + versionId, "Fail to publish datasource[数据源版本发布失败]");
+    }
+
+
+    /**
+     * Dangerous operation!
+     *
+     * @param dataSourceId
+     * @return
+     */
+    @RequestMapping( value = "/info/{data_source_id}", method = RequestMethod.DELETE)
+    public Message removeDataSource(@PathVariable("data_source_id") Long dataSourceId, HttpServletRequest request) {
+        return RestfulApiHelper.doAndResponse(() -> {
+            //Get brief info
+            DataSource dataSource = dataSourceInfoService.getDataSourceInfoBrief(dataSourceId);
+            if (!AuthContext.hasPermission(dataSource, request)){
+                return Message.error("Don't have delete permission for data source [没有数据源的删除权限]");
+            }
+            Long removeId = dataSourceInfoService.removeDataSourceInfo(dataSourceId, "");
+            if (removeId < 0) {
+                return Message.error("Fail to remove data source[删除数据源信息失败], [id:" + dataSourceId + "]");
+            }
+            return Message.ok().data("remove_id", removeId);
+        }, "/data-source-manager/info/" + dataSourceId, "Fail to remove data source[删除数据源信息失败]");
+    }
+
+    @RequestMapping( value = "/info/{data_source_id}/expire", method = RequestMethod.PUT)
+    public Message expireDataSource(@PathVariable("data_source_id") Long dataSourceId, HttpServletRequest request) {
+        return RestfulApiHelper.doAndResponse(() -> {
+            //Get brief info
+            DataSource dataSource = dataSourceInfoService.getDataSourceInfoBrief(dataSourceId);
+            if (!AuthContext.hasPermission(dataSource, request)){
+                return Message.error("Don't have operation permission for data source [没有数据源的操作权限]");
+            }
+            Long expireId = dataSourceInfoService.expireDataSource(dataSourceId);
+            if (expireId < 0) {
+                return Message.error("Fail to expire data source[数据源过期失败], [id:" + dataSourceId + "]");
+            }
+            return Message.ok().data("expire_id", expireId);
+        }, "/data-source-manager/info/" + dataSourceId + "/expire", "Fail to expire data source[数据源过期失败]");
+    }
+
+    /**
+     * get datasource connect params for publish version
+     * @param dataSourceId
+     * @param req
+     * @return
+     */
+    @RequestMapping( value = "/{data_source_id}/connect_params", method = RequestMethod.GET)
+    public Message getConnectParams(@PathVariable("data_source_id") Long dataSourceId,
+                                      HttpServletRequest req) {
+        return RestfulApiHelper.doAndResponse(() -> {
+            DataSource dataSource = dataSourceInfoService.getDataSourceInfoForConnect(dataSourceId);
+            if (!AuthContext.hasPermission(dataSource, req)){
+                return Message.error("Don't have query permission for data source [没有数据源的查询权限]");
+            }
+            Map<String, Object> connectParams = dataSource.getConnectParams();
+            RestfulApiHelper.decryptPasswordKey(dataSourceRelateService.getKeyDefinitionsByType(dataSource.getDataSourceTypeId())
+                    , connectParams);
+            return Message.ok().data("connectParams", connectParams);
+
+        }, "/data-source-manager/" + dataSourceId  + "/connect_params", "Fail to connect data source[连接数据源失败]");
+    }
+
+    @RequestMapping( value = "/name/{data_source_name}/connect_params", method = RequestMethod.GET)
+    public Message getConnectParams(@PathVariable("data_source_name") String dataSourceName,
+                                     HttpServletRequest req) throws UnsupportedEncodingException {
+        return RestfulApiHelper.doAndResponse(() -> {
+            DataSource dataSource = dataSourceInfoService.getDataSourceInfoForConnect(dataSourceName);
+            if (!AuthContext.hasPermission(dataSource, req)){
+                return Message.error("Don't have query permission for data source [没有数据源的查询权限]");
+            }
+            Map<String, Object> connectParams = dataSource.getConnectParams();
+            RestfulApiHelper.decryptPasswordKey(dataSourceRelateService.getKeyDefinitionsByType(dataSource.getDataSourceTypeId())
+                    , connectParams);
+            return Message.ok().data("connectParams", connectParams);
+
+        }, "/data-source-manager/name/" + URLEncoder.encode(dataSourceName, "UTF-8")  + "/connect_params", "Fail to connect data source[连接数据源失败]");
+    }
+
+    @RequestMapping( value = "/{data_source_id}/{version}/op/connect", method = RequestMethod.PUT)
+    public Message connectDataSource(@PathVariable("data_source_id") Long dataSourceId,
+                                      @PathVariable("version") Long version,
+                                      HttpServletRequest req) {
+        return RestfulApiHelper.doAndResponse(() -> {
+            String operator = SecurityFilter.getLoginUsername(req);
+            DataSource dataSource = dataSourceInfoService.getDataSourceInfoForConnect(dataSourceId, version);
+            if (!AuthContext.hasPermission(dataSource, req)){
+                return Message.error("Don't have operation permission for data source [没有数据源的操作权限]");
+            }
+            String dataSourceTypeName = dataSource.getDataSourceType().getName();
+            String mdRemoteServiceName = MdmConfiguration.METADATA_SERVICE_APPLICATION.getValue();
+            Map<String, Object> connectParams = dataSource.getConnectParams();
+            RestfulApiHelper.decryptPasswordKey(dataSourceRelateService.getKeyDefinitionsByType(dataSource.getDataSourceTypeId())
+                    , connectParams);
+            metadataOperateService.doRemoteConnect(mdRemoteServiceName, dataSourceTypeName.toLowerCase(), operator, dataSource.getConnectParams());
+            return Message.ok().data("ok", true);
+        }, "/data_source/" + dataSourceId + "/" + version + "/op/connect", "Fail to connect data source[连接数据源失败]");
+    }
+
+    @RequestMapping(value = "/info", method = RequestMethod.GET)
+    public Message queryDataSource(@RequestParam("system") String createSystem,
+                                    @RequestParam("name") String dataSourceName,
+                                    @RequestParam("typeId") Long dataSourceTypeId,
+                                    @RequestParam("identifies") String identifies,
+                                    @RequestParam("currentPage") Integer currentPage,
+                                    @RequestParam("pageSize") Integer pageSize, HttpServletRequest req) {
+        return RestfulApiHelper.doAndResponse(() -> {
+            DataSourceVo dataSourceVo = new DataSourceVo(dataSourceName, dataSourceTypeId,
+                    identifies, createSystem);
+            dataSourceVo.setCurrentPage(null != currentPage ? currentPage : 1);
+            dataSourceVo.setPageSize(null != pageSize ? pageSize : 10);
+            String permissionUser = SecurityFilter.getLoginUsername(req);
+            if (AuthContext.isAdministrator(permissionUser)){
+                permissionUser = null;
+            }
+            dataSourceVo.setPermissionUser(permissionUser);
+            PageInfo<DataSource> pageInfo = dataSourceInfoService.queryDataSourceInfoPage(dataSourceVo);
+            List<DataSource> queryList = pageInfo.getList();
+            return Message.ok().data("query_list", queryList).data("totalPage", pageInfo.getTotal());
+        }, "/data-source-manager/info", "Fail to query page of data source[查询数据源失败]");
+    }
+
+    /**
+     * Inner method to insert data source
+     *
+     * @param dataSource data source entity
+     * @throws ParameterValidateException
+     */
+    private void insertDataSource(DataSource dataSource) throws ErrorException {
+        List<DataSourceParamKeyDefinition> keyDefinitionList = dataSourceRelateService
+                .getKeyDefinitionsByType(dataSource.getDataSourceTypeId());
+        dataSource.setKeyDefinitions(keyDefinitionList);
+        dataSourceInfoService.saveDataSourceInfo(dataSource);
+    }
+}
diff --git a/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/restful/DataSourceOperateRestfulApi.java b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/restful/DataSourceOperateRestfulApi.java
similarity index 87%
rename from linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/restful/DataSourceOperateRestfulApi.java
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/restful/DataSourceOperateRestfulApi.java
index 452bb93..17dd062 100644
--- a/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/restful/DataSourceOperateRestfulApi.java
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/restful/DataSourceOperateRestfulApi.java
@@ -34,6 +34,10 @@ import org.apache.commons.lang.StringUtils;
 //import org.glassfish.jersey.media.multipart.FormDataMultiPart;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.PostConstruct;
 import javax.servlet.http.HttpServletRequest;
@@ -41,18 +45,12 @@ import javax.validation.ConstraintViolation;
 import javax.validation.ConstraintViolationException;
 import javax.validation.Validator;
 import javax.validation.groups.Default;
-import javax.ws.rs.*;
-import javax.ws.rs.core.Context;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
-@Path("/data_source/op/")
-@Consumes(MediaType.APPLICATION_JSON)
-@Produces(MediaType.APPLICATION_JSON)
-@Component
+@RestController
+@RequestMapping(value = "/data-source-manager/op/", produces = {"application/json"})
 public class DataSourceOperateRestfulApi {
 
     @Autowired
@@ -77,10 +75,9 @@ public class DataSourceOperateRestfulApi {
         this.formDataTransformer = FormDataTransformerFactory.buildCustom();
     }
 
-    @POST
-    @Path("/connect/json")
-    public Message connect(DataSource dataSource,
-                            @Context HttpServletRequest request){
+    @RequestMapping( value = "/connect/json", method = RequestMethod.POST)
+    public Message connect(@RequestBody DataSource dataSource,
+                            HttpServletRequest request){
         return RestfulApiHelper.doAndResponse(() -> {
             String operator = SecurityFilter.getLoginUsername(request);
             //Bean validation
@@ -90,7 +87,7 @@ public class DataSourceOperateRestfulApi {
             }
             doConnect(operator, dataSource);
             return Message.ok().data("ok", true);
-        }, "/data_source/op/connect/json","");
+        }, "/data-source-manager/op/connect/json","");
     }
 
 //    @POST
@@ -102,7 +99,7 @@ public class DataSourceOperateRestfulApi {
 //            DataSource dataSource = formDataTransformer.transformToObject(multiPartForm, DataSource.class, beanValidator);
 //            doConnect(operator, dataSource);
 //            return Message.ok().data("ok", true);
-//        }, "/data_source/op/connect/form","");
+//        }, "/data-source-manager/op/connect/form","");
 //    }
 
     /**
@@ -123,8 +120,7 @@ public class DataSourceOperateRestfulApi {
         Map<String,Object> connectParams = dataSource.getConnectParams();
         parameterValidator.validate(keyDefinitionList, connectParams);
         DataSourceType dataSourceType = dataSourceRelateService.getDataSourceType(dataSource.getDataSourceTypeId());
-        metadataOperateService.doRemoteConnect(MdmConfiguration.METADATA_SERVICE_APPLICATION.getValue()
-                        + (StringUtils.isNotBlank(dataSourceType.getName())?("-" +dataSourceType.getName().toLowerCase()) : ""),
+        metadataOperateService.doRemoteConnect(MdmConfiguration.METADATA_SERVICE_APPLICATION.getValue(),dataSourceType.getName().toLowerCase(),
                 operator, dataSource.getConnectParams());
     }
 }
diff --git a/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/restful/RestfulApiHelper.java b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/restful/RestfulApiHelper.java
similarity index 96%
rename from linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/restful/RestfulApiHelper.java
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/restful/RestfulApiHelper.java
index 2a0dd28..5272a63 100644
--- a/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/restful/RestfulApiHelper.java
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/restful/RestfulApiHelper.java
@@ -18,7 +18,7 @@
 package org.apache.linkis.datasourcemanager.core.restful;
 
 import org.apache.linkis.common.exception.WarnException;
-import org.apache.linkis.datasourcemanager.common.DsmConfiguration;
+import org.apache.linkis.datasourcemanager.common.auth.AuthContext;
 import org.apache.linkis.datasourcemanager.common.domain.DataSourceParamKeyDefinition;
 import org.apache.linkis.datasourcemanager.common.util.CryptoUtils;
 import org.apache.linkis.datasourcemanager.core.restful.exception.BeanValidationExceptionMapper;
@@ -41,7 +41,7 @@ public class RestfulApiHelper {
      * @return
      */
     public static boolean isAdminUser(String userName){
-        List<String> userList = Arrays.asList(DsmConfiguration.DSM_ADMIN_USER_LIST.getValue().split(","));
+        List<String> userList = Arrays.asList(AuthContext.AUTH_ADMINISTRATOR.getValue().split(","));
         return userList.contains(userName);
     }
 
diff --git a/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/restful/exception/BeanValidationExceptionMapper.java b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/restful/exception/BeanValidationExceptionMapper.java
similarity index 100%
rename from linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/restful/exception/BeanValidationExceptionMapper.java
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/restful/exception/BeanValidationExceptionMapper.java
diff --git a/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/service/BmlAppService.java b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/service/BmlAppService.java
similarity index 100%
rename from linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/service/BmlAppService.java
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/service/BmlAppService.java
diff --git a/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/service/DataSourceInfoService.java b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/service/DataSourceInfoService.java
similarity index 88%
rename from linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/service/DataSourceInfoService.java
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/service/DataSourceInfoService.java
index 1836466..14c69c0 100644
--- a/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/service/DataSourceInfoService.java
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/service/DataSourceInfoService.java
@@ -52,6 +52,12 @@ public interface DataSourceInfoService {
     DataSource getDataSourceInfo(Long dataSourceId);
 
     /**
+     * Get data source for current version by data source name
+     * @param dataSourceName data source name
+     * @return data source entity
+     */
+    DataSource getDataSourceInfo(String dataSourceName);
+    /**
      * Get data source
      * @param dataSourceId id
      * @return data source entity
@@ -170,6 +176,13 @@ public interface DataSourceInfoService {
     DataSource getDataSourceInfoForConnect(Long dataSourceId);
 
     /**
+     * get datasource info for connect for published version by name, if there is a dependency environment,
+     * merge datasource parameter and environment parameter.
+     * @param dataSourceName
+     * @return
+     */
+    DataSource getDataSourceInfoForConnect(String dataSourceName);
+    /**
      * get datasource info for connect, if there is a dependency environment,
      * merge datasource parameter and environment parameter.
      *
@@ -179,5 +192,10 @@ public interface DataSourceInfoService {
      */
     DataSource getDataSourceInfoForConnect(Long dataSourceId, Long version);
 
-
+    /**
+     * Check if exist data source
+     * @param dataSourceName data source name
+     * @return boolean
+     */
+    boolean existDataSource(String dataSourceName);
 }
diff --git a/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/service/DataSourceOpService.java b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/service/DataSourceOpService.java
similarity index 100%
rename from linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/service/DataSourceOpService.java
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/service/DataSourceOpService.java
diff --git a/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/service/DataSourceRelateService.java b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/service/DataSourceRelateService.java
similarity index 100%
rename from linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/service/DataSourceRelateService.java
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/service/DataSourceRelateService.java
diff --git a/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/service/MetadataOperateService.java b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/service/MetadataOperateService.java
similarity index 87%
rename from linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/service/MetadataOperateService.java
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/service/MetadataOperateService.java
index d29842b..93bb73f 100644
--- a/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/service/MetadataOperateService.java
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/service/MetadataOperateService.java
@@ -30,9 +30,10 @@ public interface MetadataOperateService {
     /**
      * Build connection with  parameters in request
      * @param mdRemoteServiceName metadata remote service
+     * @param dataSourceType dataSource type
      * @param operator operate user
      * @param connectParams parameters
      * @throws ErrorException
      */
-    void doRemoteConnect(String mdRemoteServiceName, String operator, Map<String, Object> connectParams) throws WarnException;
+    void doRemoteConnect(String mdRemoteServiceName, String dataSourceType, String operator, Map<String, Object> connectParams) throws WarnException;
 }
diff --git a/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/service/impl/BmlAppServiceImpl.java b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/service/impl/BmlAppServiceImpl.java
similarity index 99%
rename from linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/service/impl/BmlAppServiceImpl.java
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/service/impl/BmlAppServiceImpl.java
index fc18028..0f2fd14 100644
--- a/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/service/impl/BmlAppServiceImpl.java
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/service/impl/BmlAppServiceImpl.java
@@ -35,6 +35,7 @@ import java.io.InputStream;
 
 /**
  * Wrap the communication between Bml service
+ * // TODO RPCException defined
  */
 @Service
 @RefreshScope
diff --git a/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/service/impl/DataSourceInfoServiceImpl.java b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/service/impl/DataSourceInfoServiceImpl.java
similarity index 85%
rename from linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/service/impl/DataSourceInfoServiceImpl.java
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/service/impl/DataSourceInfoServiceImpl.java
index d1e9b41..83b1551 100644
--- a/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/service/impl/DataSourceInfoServiceImpl.java
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/service/impl/DataSourceInfoServiceImpl.java
@@ -21,6 +21,7 @@ import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import org.apache.linkis.common.exception.ErrorException;
 import org.apache.linkis.datasourcemanager.common.domain.DatasourceVersion;
+import org.apache.linkis.datasourcemanager.common.exception.JsonErrorException;
 import org.apache.linkis.datasourcemanager.core.dao.*;
 import org.apache.linkis.datasourcemanager.core.formdata.FormStreamContent;
 import org.apache.linkis.datasourcemanager.common.util.json.Json;
@@ -39,10 +40,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
 import java.util.function.Consumer;
 import java.util.stream.Collectors;
 
@@ -92,15 +90,29 @@ public class DataSourceInfoServiceImpl implements DataSourceInfoService {
     @Override
     public DataSource getDataSourceInfo(Long dataSourceId) {
         DataSource dataSource = dataSourceDao.selectOneDetail(dataSourceId);
-        String  parameter = dataSourceVersionDao.selectOneVersion(dataSourceId, dataSource.getVersionId());
-        dataSource.setParameter(parameter);
+        if (Objects.nonNull(dataSource)){
+            String  parameter = dataSourceVersionDao.selectOneVersion(dataSourceId, dataSource.getVersionId());
+            dataSource.setParameter(parameter);
+        }
+        return dataSource;
+    }
+
+    @Override
+    public DataSource getDataSourceInfo(String dataSourceName) {
+        DataSource dataSource = dataSourceDao.selectOneDetailByName(dataSourceName);
+        if (Objects.nonNull(dataSource)){
+            String parameter = dataSourceVersionDao.selectOneVersion(dataSource.getId(), dataSource.getVersionId());
+            dataSource.setParameter(parameter);
+        }
         return dataSource;
     }
     @Override
     public DataSource getDataSourceInfo(Long dataSourceId, Long version) {
         DataSource dataSource = dataSourceDao.selectOneDetail(dataSourceId);
-        String parameter = dataSourceVersionDao.selectOneVersion(dataSourceId, version);
-        dataSource.setParameter(parameter);
+        if (Objects.nonNull(dataSource)) {
+            String parameter = dataSourceVersionDao.selectOneVersion(dataSourceId, version);
+            dataSource.setParameter(parameter);
+        }
         return dataSource;
     }
 
@@ -114,18 +126,40 @@ public class DataSourceInfoServiceImpl implements DataSourceInfoService {
     @Override
     public DataSource getDataSourceInfoForConnect(Long dataSourceId) {
         DataSource dataSource = dataSourceDao.selectOneDetail(dataSourceId);
-        String parameter = dataSourceVersionDao.selectOneVersion(dataSourceId, dataSource.getPublishedVersionId());
-        return mergeParams(dataSource, parameter);
+        if (Objects.nonNull(dataSource)) {
+            // TODO dataSource.getPublishedVersionId() NullPoint Exception
+            String parameter = dataSourceVersionDao.selectOneVersion(dataSourceId, dataSource.getPublishedVersionId());
+            return mergeParams(dataSource, parameter);
+        }
+        return null;
+    }
+
+    @Override
+    public DataSource getDataSourceInfoForConnect(String dataSourceName) {
+        DataSource dataSource = dataSourceDao.selectOneDetailByName(dataSourceName);
+        if (Objects.nonNull(dataSource)) {
+            String parameter = dataSourceVersionDao.selectOneVersion(dataSource.getId(), dataSource.getPublishedVersionId());
+            return mergeParams(dataSource, parameter);
+        }
+        return null;
     }
 
     private DataSource mergeParams(DataSource dataSource, String parameter) {
         dataSource.setParameter(parameter);
-        Map<String, String> connectParams = Objects.requireNonNull(Json.fromJson(parameter, Map.class));
-        if(connectParams.containsKey("envId")) {
-            Long envId = Long.valueOf(connectParams.get("envId"));
-            // remove envId for connect
-            dataSource.getConnectParams().remove("envId");
-            addEnvParamsToDataSource(envId, dataSource);
+        if (StringUtils.isNotBlank(parameter)) {
+            Map<String, String> connectParams = new HashMap<>();
+            try {
+                connectParams = Objects.requireNonNull(Json.fromJson(parameter, Map.class));
+            } catch (JsonErrorException e) {
+                LOG.warn("Unrecognized the parameter: " + parameter +" in data source, id: [" + dataSource.getId() + "]", e);
+                // TODO throws Exception defined Exception
+            }
+            if (connectParams.containsKey("envId")) {
+                Long envId = Long.valueOf(connectParams.get("envId"));
+                // remove envId for connect
+                dataSource.getConnectParams().remove("envId");
+                addEnvParamsToDataSource(envId, dataSource);
+            }
         }
         return dataSource;
     }
@@ -141,8 +175,20 @@ public class DataSourceInfoServiceImpl implements DataSourceInfoService {
     @Override
     public DataSource getDataSourceInfoForConnect(Long dataSourceId, Long version) {
         DataSource dataSource = dataSourceDao.selectOneDetail(dataSourceId);
-        String parameter = dataSourceVersionDao.selectOneVersion(dataSourceId, version);
-        return mergeParams(dataSource, parameter);
+        if (Objects.nonNull(dataSource)) {
+            String parameter = dataSourceVersionDao.selectOneVersion(dataSourceId, version);
+            return mergeParams(dataSource, parameter);
+        }
+        return null;
+    }
+
+    @Override
+    public boolean existDataSource(String dataSourceName) {
+        if (StringUtils.isNotBlank(dataSourceName)){
+            DataSource dataSource = dataSourceDao.selectOneByName(dataSourceName);
+            return Objects.nonNull(dataSource);
+        }
+        return false;
     }
 
     @Override
@@ -160,6 +206,7 @@ public class DataSourceInfoServiceImpl implements DataSourceInfoService {
             if (affect > 0) {
                 // delete parameter version
                 int versionNum = dataSourceVersionDao.removeFromDataSourceId(dataSourceId);
+                // TODO throws Exception
                 return dataSourceId;
             }
         }
@@ -218,6 +265,7 @@ public class DataSourceInfoServiceImpl implements DataSourceInfoService {
                 Map<String, Object> connectParams = dataSourceEnv.getConnectParams();
                 List<DataSourceParamKeyDefinition> keyDefinitions = dataSourceParamKeyDao
                         .listByDataSourceTypeAndScope(dataSourceEnv.getDataSourceTypeId(), DataSourceParamKeyDefinition.Scope.ENV);
+                // TODO throws ERROR Exception
                 keyDefinitions.forEach(keyDefinition -> {
                     if (keyDefinition.getValueType() == DataSourceParamKeyDefinition.ValueType.FILE
                             && connectParams.containsKey(keyDefinition.getKey())) {
@@ -227,6 +275,7 @@ public class DataSourceInfoServiceImpl implements DataSourceInfoService {
                                     .valueOf(connectParams.get(keyDefinition.getKey())));
                         } catch (Exception e) {
                             //Ignore remove error
+                            // TODO LOG and throws LinkisRuntimeException
                         }
                     }
                 });
@@ -322,6 +371,7 @@ public class DataSourceInfoServiceImpl implements DataSourceInfoService {
 
         // 1. set version + 1
         Long latestVersion = dataSourceVersionDao.getLatestVersion(datasourceId);
+        // TODO NullPoint latestVersion
         long newVersionId = latestVersion + 1;
         datasourceVersion.setVersionId(newVersionId);
 
@@ -446,6 +496,7 @@ public class DataSourceInfoServiceImpl implements DataSourceInfoService {
             if (e.getCause() instanceof ErrorException) {
                 throw (ErrorException) e.getCause();
             }
+            // TODO wrapped Exception
             throw e;
         }
     }
@@ -468,7 +519,8 @@ public class DataSourceInfoServiceImpl implements DataSourceInfoService {
                         : bmlAppService.clientUpdateResource(userName, resourceId, inputStream);
             } catch (Exception e) {
                 //Wrap with runtime exception
-                throw new RuntimeException(e);
+//                throw new RuntimeException(e);
+                // TODO defined Exception
             }
         }
         return null;
@@ -489,6 +541,7 @@ public class DataSourceInfoServiceImpl implements DataSourceInfoService {
                     bmlAppService.clientRemoveResource(userName, resourceId);
                 } catch (Exception ie) {
                     //ignore
+                    // TODO throws RPC Exception
                 }
             }
         }
diff --git a/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/service/impl/DataSourceRelateServiceImpl.java b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/service/impl/DataSourceRelateServiceImpl.java
similarity index 100%
rename from linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/service/impl/DataSourceRelateServiceImpl.java
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/service/impl/DataSourceRelateServiceImpl.java
diff --git a/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/service/impl/MetadataOperateServiceImpl.java b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/service/impl/MetadataOperateServiceImpl.java
similarity index 91%
rename from linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/service/impl/MetadataOperateServiceImpl.java
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/service/impl/MetadataOperateServiceImpl.java
index e2263b7..2077229 100644
--- a/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/service/impl/MetadataOperateServiceImpl.java
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/service/impl/MetadataOperateServiceImpl.java
@@ -45,7 +45,7 @@ public class MetadataOperateServiceImpl implements MetadataOperateService {
     @Autowired
     private BmlAppService bmlAppService;
     @Override
-    public void doRemoteConnect(String mdRemoteServiceName ,
+    public void doRemoteConnect(String mdRemoteServiceName , String dataSourceType,
                                 String operator, Map<String, Object> connectParams) throws WarnException {
         List<String> uploadedResources = new ArrayList<>();
         try{
@@ -66,6 +66,7 @@ public class MetadataOperateServiceImpl implements MetadataOperateService {
                             uploadedResources.add(resourceId);
                             entry.setValue(resourceId);
                         } catch (ErrorException e) {
+                            // TODO redefined a exception extends warnException
                             throw new WarnException(BML_SERVICE_ERROR.getValue(), "Fail to operate file in request[上传文件处理失败]");
                         }
                     }
@@ -76,7 +77,7 @@ public class MetadataOperateServiceImpl implements MetadataOperateService {
             //Get a sender
             Sender sender = Sender.getSender(mdRemoteServiceName);
             try {
-                Object object = sender.ask(new MetadataConnect(operator, connectParams, ""));
+                Object object = sender.ask(new MetadataConnect(dataSourceType, operator, connectParams, ""));
                 if (object instanceof MetadataResponse) {
                     MetadataResponse response = (MetadataResponse) object;
                     if (!response.status()) {
@@ -87,10 +88,10 @@ public class MetadataOperateServiceImpl implements MetadataOperateService {
                     throw new WarnException(REMOTE_METADATA_SERVICE_ERROR.getValue(),
                             "Remote Service Error[远端服务出错, 联系运维处理]");
                 }
-            }catch(Throwable t){
+            }catch(Exception t){
                 if(!(t instanceof WarnException)) {
                     throw new WarnException(REMOTE_METADATA_SERVICE_ERROR.getValue(),
-                            "Remote Service Error[远端服务出错, 联系运维处理]");
+                            "Remote Service Error[远端服务出错, 联系运维处理], message:[" + t.getMessage() + "]");
                 }
                 throw t;
             }
@@ -102,6 +103,7 @@ public class MetadataOperateServiceImpl implements MetadataOperateService {
                         bmlAppService.clientRemoveResource(operator, resourceId);
                     }catch(Exception e){
                         //ignore
+                        //TODO add strategy to fix the failure of deleting
                     }
                 });
             }
diff --git a/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/validate/DataSourceParameterValidator.java b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/validate/DataSourceParameterValidator.java
new file mode 100644
index 0000000..2f9704c
--- /dev/null
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/validate/DataSourceParameterValidator.java
@@ -0,0 +1,106 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+package org.apache.linkis.datasourcemanager.core.validate;
+
+import org.apache.linkis.datasourcemanager.common.domain.DataSourceParamKeyDefinition;
+import org.apache.linkis.datasourcemanager.core.validate.strategy.RegExpParameterValidateStrategy;
+import org.apache.linkis.datasourcemanager.core.validate.strategy.TypeParameterValidateStrategy;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+@Component
+public class DataSourceParameterValidator implements ParameterValidator {
+    @PostConstruct
+    public void initToRegister(){
+        registerStrategy(new TypeParameterValidateStrategy());
+        registerStrategy(new RegExpParameterValidateStrategy());
+    }
+    /**
+     * strategies list
+     */
+    private List<ParameterValidateStrategy> strategies = new ArrayList<>();
+
+    @Override
+    public void registerStrategy(ParameterValidateStrategy strategy) {
+        strategies.add(strategy);
+    }
+
+    @Override
+    public void validate(List<DataSourceParamKeyDefinition> paramKeyDefinitions,
+                         Map<String, Object> parameters) throws ParameterValidateException{
+        //Covert parameters map to <DataSourceParamKeyDefinition.getId(), Object>
+        Map<DataSourceParamKeyDefinition, Object> defToValue = paramKeyDefinitions.stream().filter(def ->
+                Objects.nonNull(parameters.get(def.getKey())))
+                .collect(Collectors.toMap(def -> def, def ->{
+                    Object keyValue = parameters.get(def.getKey());
+                    parameters.put(def.getKey(), keyValue);
+                    return keyValue;
+                }));
+        for(DataSourceParamKeyDefinition def : paramKeyDefinitions){
+            //Deal with cascade relation
+            boolean needValidate = false;
+            if(Objects.nonNull(def.getRefId())){
+                DataSourceParamKeyDefinition refDef = new DataSourceParamKeyDefinition();
+                refDef.setId(def.getRefId());
+                Object refValue = defToValue.get(refDef);
+                if(Objects.nonNull(refValue) && Objects.equals(refValue, def.getRefValue())){
+                    needValidate = true;
+                }
+            }else{
+                needValidate = true;
+            }
+            if (needValidate){
+                String keyName = def.getKey();
+                Object keyValue = parameters.get(def.getKey());
+                DataSourceParamKeyDefinition.ValueType valueType = def.getValueType();
+                if(null == keyValue ){
+                    String defaultValue = def.getDefaultValue();
+                    if(StringUtils.isNotBlank(defaultValue) &&
+                            valueType == DataSourceParamKeyDefinition.ValueType.SELECT){
+                        defaultValue = defaultValue.split(",")[0].trim();
+                    }
+                    keyValue = defaultValue;
+                }
+                if( null == keyValue || StringUtils.isBlank(String.valueOf(keyValue))){
+                    if(def.isRequire()) {
+                        throw new ParameterValidateException("Param Validate Failed[参数校验出错], [the value of key: '"
+                                + keyName + " cannot be blank']");
+                    }
+                    continue;
+                }
+                for(ParameterValidateStrategy validateStrategy : strategies){
+                    if(validateStrategy.accept(def.getValueType())) {
+                        validateStrategy.validate(def, keyValue);
+                    }
+                }
+            }
+        }
+    }
+
+    @Override
+    public List<ParameterValidateStrategy> getStrategies() {
+        return strategies;
+    }
+}
diff --git a/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/validate/ParameterValidateException.java b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/validate/ParameterValidateException.java
similarity index 100%
rename from linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/validate/ParameterValidateException.java
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/validate/ParameterValidateException.java
diff --git a/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/validate/ParameterValidateStrategy.java b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/validate/ParameterValidateStrategy.java
similarity index 95%
rename from linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/validate/ParameterValidateStrategy.java
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/validate/ParameterValidateStrategy.java
index cd33dcb..1f2cfb9 100644
--- a/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/validate/ParameterValidateStrategy.java
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/validate/ParameterValidateStrategy.java
@@ -37,5 +37,5 @@ public interface ParameterValidateStrategy {
      * @return new value
      */
     Object validate(DataSourceParamKeyDefinition keyDefinition,
-                  Object actualValue) throws ParameterValidateException;
+                    Object actualValue) throws ParameterValidateException;
 }
diff --git a/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/validate/ParameterValidator.java b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/validate/ParameterValidator.java
similarity index 100%
rename from linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/validate/ParameterValidator.java
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/validate/ParameterValidator.java
diff --git a/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/validate/strategy/RegExpParameterValidateStrategy.java b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/validate/strategy/RegExpParameterValidateStrategy.java
similarity index 91%
rename from linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/validate/strategy/RegExpParameterValidateStrategy.java
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/validate/strategy/RegExpParameterValidateStrategy.java
index 5e42ce5..8bae5ac 100644
--- a/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/validate/strategy/RegExpParameterValidateStrategy.java
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/validate/strategy/RegExpParameterValidateStrategy.java
@@ -33,7 +33,10 @@ public class RegExpParameterValidateStrategy implements ParameterValidateStrateg
 
     @Override
     public boolean accept(DataSourceParamKeyDefinition.ValueType valueType) {
-        return valueType == DataSourceParamKeyDefinition.ValueType.EMAIL || valueType == DataSourceParamKeyDefinition.ValueType.TEXT || valueType == DataSourceParamKeyDefinition.ValueType.LIST;
+        return valueType == DataSourceParamKeyDefinition.ValueType.EMAIL ||
+                valueType == DataSourceParamKeyDefinition.ValueType.TEXT ||
+                valueType == DataSourceParamKeyDefinition.ValueType.LIST ||
+                valueType == DataSourceParamKeyDefinition.ValueType.TEXTAREA;
     }
 
     @Override
diff --git a/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/validate/strategy/TypeParameterValidateStrategy.java b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/validate/strategy/TypeParameterValidateStrategy.java
similarity index 98%
rename from linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/validate/strategy/TypeParameterValidateStrategy.java
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/validate/strategy/TypeParameterValidateStrategy.java
index 27cda7e..704af74 100644
--- a/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/validate/strategy/TypeParameterValidateStrategy.java
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/validate/strategy/TypeParameterValidateStrategy.java
@@ -18,10 +18,10 @@
 package org.apache.linkis.datasourcemanager.core.validate.strategy;
 
 import org.apache.linkis.datasourcemanager.common.domain.DataSourceParamKeyDefinition;
+import org.apache.linkis.datasourcemanager.common.util.json.Json;
 import org.apache.linkis.datasourcemanager.core.formdata.FormStreamContent;
 import org.apache.linkis.datasourcemanager.core.validate.ParameterValidateException;
 import org.apache.linkis.datasourcemanager.core.validate.ParameterValidateStrategy;
-import org.apache.linkis.metadatamanager.common.Json;
 
 import java.util.List;
 import java.util.Map;
diff --git a/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/vo/DataSourceEnvVo.java b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/vo/DataSourceEnvVo.java
similarity index 100%
rename from linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/vo/DataSourceEnvVo.java
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/vo/DataSourceEnvVo.java
diff --git a/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/vo/DataSourceVo.java b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/vo/DataSourceVo.java
similarity index 91%
rename from linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/vo/DataSourceVo.java
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/vo/DataSourceVo.java
index 6f72681..c80b284 100644
--- a/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/vo/DataSourceVo.java
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/vo/DataSourceVo.java
@@ -34,6 +34,8 @@ public class DataSourceVo extends PageViewVo{
 
     private String createSystem;
 
+    private String permissionUser;
+
     public DataSourceVo(){
 
     }
@@ -79,4 +81,12 @@ public class DataSourceVo extends PageViewVo{
     public void setCreateIdentifyList(List<String> createIdentifyList) {
         this.createIdentifyList = createIdentifyList;
     }
+
+    public String getPermissionUser() {
+        return permissionUser;
+    }
+
+    public void setPermissionUser(String permissionUser) {
+        this.permissionUser = permissionUser;
+    }
 }
diff --git a/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/vo/PageViewVo.java b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/vo/PageViewVo.java
similarity index 100%
rename from linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/java/org/apache/linkis/datasourcemanager/core/vo/PageViewVo.java
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/java/org/apache/linkis/datasourcemanager/core/vo/PageViewVo.java
diff --git a/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/scala/org/apache/linkis/datasourcemanager/core/receivers/DsmReceiver.scala b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/scala/org/apache/linkis/datasourcemanager/core/receivers/DsmReceiver.scala
similarity index 78%
rename from linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/scala/org/apache/linkis/datasourcemanager/core/receivers/DsmReceiver.scala
rename to linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/scala/org/apache/linkis/datasourcemanager/core/receivers/DsmReceiver.scala
index 1fd4741..b64bc04 100644
--- a/linkis-public-enhancements/linkis-datasource/datasourcemanager/server/src/main/scala/org/apache/linkis/datasourcemanager/core/receivers/DsmReceiver.scala
+++ b/linkis-public-enhancements/linkis-datasource/linkis-datasource-manager/server/src/main/scala/org/apache/linkis/datasourcemanager/core/receivers/DsmReceiver.scala
@@ -42,19 +42,24 @@ class DsmReceiver extends Receiver with Logging{
   @Autowired
   private var dataSourceRelateService: DataSourceRelateService = _
 
-  override def receive(message: Any, sender: Sender): Unit = ???
+  override def receive(message: Any, sender: Sender): Unit = {}
 
   override def receiveAndReply(message: Any, sender: Sender): Any = message match {
-    case DsInfoQueryRequest(id, system) =>
-      if ( id.toLong > 0 &&  Some(system).isDefined ) {
+    case DsInfoQueryRequest(id, name, system) =>
+      if ((Option(id).isDefined || Option(name).isDefined) &&  Some(system).isDefined) {
         Utils.tryCatch {
-          val dataSource: DataSource = dataSourceInfoService.getDataSourceInfo(id.toLong)
-          if ( null != dataSource ) {
+          var dataSource: DataSource = null
+          if (Option(name).isDefined) {
+            dataSource = dataSourceInfoService.getDataSourceInfoForConnect(name)
+          } else if (id.toLong > 0) {
+            dataSource = dataSourceInfoService.getDataSourceInfoForConnect(id.toLong)
+          }
+          if (null != dataSource) {
             RestfulApiHelper.decryptPasswordKey(dataSourceRelateService.getKeyDefinitionsByType(dataSource.getDataSourceTypeId),
               dataSource.getConnectParams)
             DsInfoResponse(status = true, dataSource.getDataSourceType.getName,
               dataSource.getConnectParams, dataSource.getCreateUser)
-          }else DsInfoResponse(status = true, "", new util.HashMap[String, Object](), "")
+          } else DsInfoResponse(status = true, "", new util.HashMap[String, Object](), "")
         }{
           case e: Exception => logger.error(s"Fail to get data source information, id:$id system:$system", e)
             DsInfoResponse(status = false, "", new util.HashMap[String, Object](), "")
@@ -68,11 +73,16 @@ class DsmReceiver extends Receiver with Logging{
   }
 
   override def receiveAndReply(message: Any, duration: Duration, sender: Sender): Any = message match {
-    case DsInfoQueryRequest(id, system) =>
-      if ( id.toLong > 0 &&  Some(system).isDefined ) {
+    case DsInfoQueryRequest(id, name, system) =>
+      if ((Option(id).isDefined || Option(name).isDefined) &&  Some(system).isDefined) {
         Utils.tryCatch {
-          val dataSource: DataSource = dataSourceInfoService.getDataSourceInfo(id.toLong)
-          if ( null != dataSource ) {
+          var dataSource: DataSource = null
+          if (Option(name).isDefined) {
+            dataSource = dataSourceInfoService.getDataSourceInfoForConnect(name)
+          } else if (id.toLong > 0) {
+            dataSource = dataSourceInfoService.getDataSourceInfoForConnect(id.toLong)
+          }
+          if (null != dataSource) {
             RestfulApiHelper.decryptPasswordKey(dataSourceRelateService.getKeyDefinitionsByType(dataSource.getDataSourceTypeId),
               dataSource.getConnectParams)
             DsInfoResponse(status = true, dataSource.getDataSourceType.getName,
diff --git a/linkis-public-enhancements/linkis-datasource/metadatamanager/common/pom.xml b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/common/pom.xml
similarity index 89%
rename from linkis-public-enhancements/linkis-datasource/metadatamanager/common/pom.xml
rename to linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/common/pom.xml
index 6a07f00..ae4aac5 100644
--- a/linkis-public-enhancements/linkis-datasource/metadatamanager/common/pom.xml
+++ b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/common/pom.xml
@@ -25,7 +25,7 @@
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
-    <artifactId>linkis-metadatamanager-common</artifactId>
+    <artifactId>linkis-metadata-manager-common</artifactId>
 
     <properties>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -35,6 +35,7 @@
         <dependency>
             <groupId>org.apache.linkis</groupId>
             <artifactId>linkis-common</artifactId>
+            <scope>provided</scope>
             <version>${linkis.version}</version>
             <exclusions>
                 <exclusion>
@@ -48,6 +49,12 @@
             <groupId>org.apache.linkis</groupId>
             <artifactId>linkis-rpc</artifactId>
             <version>${linkis.version}</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.linkis</groupId>
+            <artifactId>linkis-datasource-manager-common</artifactId>
+            <version>${linkis.version}</version>
         </dependency>
     </dependencies>
 
diff --git a/linkis-public-enhancements/linkis-datasource/metadatamanager/common/src/main/java/org/apache/linkis/metadatamanager/common/MdmConfiguration.java b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/common/src/main/java/org/apache/linkis/metadatamanager/common/MdmConfiguration.java
similarity index 97%
rename from linkis-public-enhancements/linkis-datasource/metadatamanager/common/src/main/java/org/apache/linkis/metadatamanager/common/MdmConfiguration.java
rename to linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/common/src/main/java/org/apache/linkis/metadatamanager/common/MdmConfiguration.java
index 50f29be..da7c900 100644
--- a/linkis-public-enhancements/linkis-datasource/metadatamanager/common/src/main/java/org/apache/linkis/metadatamanager/common/MdmConfiguration.java
+++ b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/common/src/main/java/org/apache/linkis/metadatamanager/common/MdmConfiguration.java
@@ -25,5 +25,5 @@ public class MdmConfiguration {
             CommonVars.apply("wds.linkis.server.mdm.service.app.name", "linkis-ps-metadatamanager");
 
     public static CommonVars<String> DATA_SOURCE_SERVICE_APPLICATION =
-            CommonVars.apply("wds.linkis.server.dsm.app.name", "linkis-ps-datasourcemanager");
+            CommonVars.apply("wds.linkis.server.dsm.app.name", "linkis-ps-data-source-manager");
 }
diff --git a/linkis-public-enhancements/linkis-datasource/metadatamanager/common/src/main/java/org/apache/linkis/metadatamanager/common/cache/CacheConfiguration.java b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/common/src/main/java/org/apache/linkis/metadatamanager/common/cache/CacheConfiguration.java
similarity index 83%
rename from linkis-public-enhancements/linkis-datasource/metadatamanager/common/src/main/java/org/apache/linkis/metadatamanager/common/cache/CacheConfiguration.java
rename to linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/common/src/main/java/org/apache/linkis/metadatamanager/common/cache/CacheConfiguration.java
index 59ab207..3234f59 100644
--- a/linkis-public-enhancements/linkis-datasource/metadatamanager/common/src/main/java/org/apache/linkis/metadatamanager/common/cache/CacheConfiguration.java
+++ b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/common/src/main/java/org/apache/linkis/metadatamanager/common/cache/CacheConfiguration.java
@@ -22,8 +22,14 @@ import org.apache.linkis.common.conf.CommonVars;
 public class CacheConfiguration {
 
     public static CommonVars<Long> CACHE_MAX_SIZE =
-            CommonVars.apply("wds.linkis.server.mdm.service.cache.size", 1000L);
+            CommonVars.apply("wds.linkis.server.mdm.service.cache.max-size", 1000L);
 
     public static CommonVars<Long> CACHE_EXPIRE_TIME =
             CommonVars.apply("wds.linkis.server.mdm.service.cache.expire", 600L);
+
+    /**
+     * Make a pool for each cache element
+     */
+    public static final CommonVars<Integer> CACHE_IN_POOL_SIZE = CommonVars
+            .apply("wds.linkis.server.mdm.service.cache.in-pool.size", 5);
 }
diff --git a/linkis-public-enhancements/linkis-datasource/metadatamanager/common/src/main/java/org/apache/linkis/metadatamanager/common/cache/CacheManager.java b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/common/src/main/java/org/apache/linkis/metadatamanager/common/cache/CacheManager.java
similarity index 100%
rename from linkis-public-enhancements/linkis-datasource/metadatamanager/common/src/main/java/org/apache/linkis/metadatamanager/common/cache/CacheManager.java
rename to linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/common/src/main/java/org/apache/linkis/metadatamanager/common/cache/CacheManager.java
diff --git a/linkis-public-enhancements/linkis-datasource/metadatamanager/common/src/main/java/org/apache/linkis/metadatamanager/common/cache/ConnCacheManager.java b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/common/src/main/java/org/apache/linkis/metadatamanager/common/cache/ConnCacheManager.java
similarity index 68%
rename from linkis-public-enhancements/linkis-datasource/metadatamanager/common/src/main/java/org/apache/linkis/metadatamanager/common/cache/ConnCacheManager.java
rename to linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/common/src/main/java/org/apache/linkis/metadatamanager/common/cache/ConnCacheManager.java
index 7628588..023b1b3 100644
--- a/linkis-public-enhancements/linkis-datasource/metadatamanager/common/src/main/java/org/apache/linkis/metadatamanager/common/cache/ConnCacheManager.java
+++ b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/common/src/main/java/org/apache/linkis/metadatamanager/common/cache/ConnCacheManager.java
@@ -24,34 +24,40 @@ import java.util.concurrent.TimeUnit;
 
 public class ConnCacheManager implements CacheManager {
     private ConcurrentHashMap<String, Cache> cacheStore = new ConcurrentHashMap<>();
+    private static CacheManager manager;
     private ConnCacheManager(){
 
     }
 
     public static CacheManager custom(){
-        return new ConnCacheManager();
+        if (null == manager){
+            synchronized (ConnCacheManager.class){
+                if (null == manager){
+                    manager = new ConnCacheManager();
+                }
+            }
+        }
+        return manager;
     }
 
     @Override
+    @SuppressWarnings("unchecked")
     public <V> Cache<String, V> buildCache(String cacheId, RemovalListener<String, V> removalListener) {
-        Cache<String, V> vCache = CacheBuilder.newBuilder()
-                .maximumSize(CacheConfiguration.CACHE_MAX_SIZE.getValue())
-                .expireAfterWrite(CacheConfiguration.CACHE_EXPIRE_TIME.getValue(), TimeUnit.SECONDS)
-                .removalListener(removalListener)
-                .build();
-        cacheStore.putIfAbsent(cacheId, vCache);
-        return vCache;
+        return cacheStore.computeIfAbsent(cacheId, id -> CacheBuilder.newBuilder()
+            .maximumSize(CacheConfiguration.CACHE_MAX_SIZE.getValue())
+            .expireAfterWrite(CacheConfiguration.CACHE_EXPIRE_TIME.getValue(), TimeUnit.SECONDS)
+            .removalListener(removalListener)
+            .build());
     }
 
     @Override
+    @SuppressWarnings("unchecked")
     public <V> LoadingCache<String, V> buildCache(String cacheId, CacheLoader<String, V> loader,
                                                   RemovalListener<String, V> removalListener) {
-        LoadingCache<String, V> vCache = CacheBuilder.newBuilder()
+        return (LoadingCache<String, V>)cacheStore.computeIfAbsent(cacheId,  id -> CacheBuilder.newBuilder()
                 .maximumSize(CacheConfiguration.CACHE_MAX_SIZE.getValue())
                 .expireAfterWrite(CacheConfiguration.CACHE_EXPIRE_TIME.getValue(), TimeUnit.SECONDS)
                 .removalListener(removalListener)
-                .build(loader);
-        cacheStore.putIfAbsent(cacheId, vCache);
-        return vCache;
+                .build(loader));
     }
 }
diff --git a/linkis-public-enhancements/linkis-datasource/metadatamanager/common/src/main/java/org/apache/linkis/metadatamanager/common/domain/MetaColumnInfo.java b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/common/src/main/java/org/apache/linkis/metadatamanager/common/domain/MetaColumnInfo.java
similarity index 100%
rename from linkis-public-enhancements/linkis-datasource/metadatamanager/common/src/main/java/org/apache/linkis/metadatamanager/common/domain/MetaColumnInfo.java
rename to linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/common/src/main/java/org/apache/linkis/metadatamanager/common/domain/MetaColumnInfo.java
diff --git a/linkis-public-enhancements/linkis-datasource/metadatamanager/common/src/main/java/org/apache/linkis/metadatamanager/common/domain/MetaPartitionInfo.java b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/common/src/main/java/org/apache/linkis/metadatamanager/common/domain/MetaPartitionInfo.java
similarity index 100%
rename from linkis-public-enhancements/linkis-datasource/metadatamanager/common/src/main/java/org/apache/linkis/metadatamanager/common/domain/MetaPartitionInfo.java
rename to linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/common/src/main/java/org/apache/linkis/metadatamanager/common/domain/MetaPartitionInfo.java
diff --git a/linkis-public-enhancements/linkis-datasource/metadatamanager/common/src/main/java/org/apache/linkis/metadatamanager/common/exception/MetaRuntimeException.java b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/common/src/main/java/org/apache/linkis/metadatamanager/common/exception/MetaMethodInvokeException.java
similarity index 55%
copy from linkis-public-enhancements/linkis-datasource/metadatamanager/common/src/main/java/org/apache/linkis/metadatamanager/common/exception/MetaRuntimeException.java
copy to linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/common/src/main/java/org/apache/linkis/metadatamanager/common/exception/MetaMethodInvokeException.java
index c723455..a3c795a 100644
--- a/linkis-public-enhancements/linkis-datasource/metadatamanager/common/src/main/java/org/apache/linkis/metadatamanager/common/exception/MetaRuntimeException.java
+++ b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/common/src/main/java/org/apache/linkis/metadatamanager/common/exception/MetaMethodInvokeException.java
@@ -5,28 +5,44 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *   http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
- 
+
 package org.apache.linkis.metadatamanager.common.exception;
 
-import org.apache.linkis.common.exception.WarnException;
+import org.apache.linkis.common.exception.ErrorException;
 
-public class MetaRuntimeException extends WarnException {
-    private static final int ERROR_CODE = 99900;
-    public MetaRuntimeException(String desc) {
-        super(ERROR_CODE, desc);
+/**
+ * Exception in invoking metadata service
+ */
+public class MetaMethodInvokeException extends ErrorException {
+    public MetaMethodInvokeException(int errCode, String desc, Throwable t) {
+        super(errCode, desc);
+        super.initCause(t);
     }
 
-    public MetaRuntimeException(String desc, String ip, int port, String serviceKind) {
-        super(ERROR_CODE, desc, ip, port, serviceKind);
+    public MetaMethodInvokeException(String method, Object[] args, int errCode, String desc, Throwable t) {
+        this(errCode, desc, t);
+        this.method = method;
+        this.args = args;
     }
 
+    private String method;
+
+    private Object[] args;
+
+    public String getMethod() {
+        return method;
+    }
+
+    public Object[] getArgs() {
+        return args;
+    }
 }
diff --git a/linkis-public-enhancements/linkis-datasource/metadatamanager/common/src/main/java/org/apache/linkis/metadatamanager/common/exception/MetaRuntimeException.java b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/common/src/main/java/org/apache/linkis/metadatamanager/common/exception/MetaRuntimeException.java
similarity index 93%
rename from linkis-public-enhancements/linkis-datasource/metadatamanager/common/src/main/java/org/apache/linkis/metadatamanager/common/exception/MetaRuntimeException.java
rename to linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/common/src/main/java/org/apache/linkis/metadatamanager/common/exception/MetaRuntimeException.java
index c723455..9686462 100644
--- a/linkis-public-enhancements/linkis-datasource/metadatamanager/common/src/main/java/org/apache/linkis/metadatamanager/common/exception/MetaRuntimeException.java
+++ b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/common/src/main/java/org/apache/linkis/metadatamanager/common/exception/MetaRuntimeException.java
@@ -21,8 +21,9 @@ import org.apache.linkis.common.exception.WarnException;
 
 public class MetaRuntimeException extends WarnException {
     private static final int ERROR_CODE = 99900;
-    public MetaRuntimeException(String desc) {
+    public MetaRuntimeException(String desc, Throwable t) {
         super(ERROR_CODE, desc);
+        super.initCause(t);
     }
 
     public MetaRuntimeException(String desc, String ip, int port, String serviceKind) {
diff --git a/linkis-public-enhancements/linkis-datasource/metadatamanager/common/src/main/java/org/apache/linkis/metadatamanager/common/service/AbstractMetaService.java b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/common/src/main/java/org/apache/linkis/metadatamanager/common/service/AbstractMetaService.java
similarity index 71%
rename from linkis-public-enhancements/linkis-datasource/metadatamanager/common/src/main/java/org/apache/linkis/metadatamanager/common/service/AbstractMetaService.java
rename to linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/common/src/main/java/org/apache/linkis/metadatamanager/common/service/AbstractMetaService.java
index 8b0a03f..a48c464 100644
--- a/linkis-public-enhancements/linkis-datasource/metadatamanager/common/src/main/java/org/apache/linkis/metadatamanager/common/service/AbstractMetaService.java
+++ b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/common/src/main/java/org/apache/linkis/metadatamanager/common/service/AbstractMetaService.java
@@ -19,7 +19,8 @@ package org.apache.linkis.metadatamanager.common.service;
 
 import com.google.common.cache.Cache;
 import org.apache.linkis.common.exception.WarnException;
-import org.apache.linkis.metadatamanager.common.Json;
+import org.apache.linkis.datasourcemanager.common.util.json.Json;
+import org.apache.linkis.metadatamanager.common.cache.CacheConfiguration;
 import org.apache.linkis.metadatamanager.common.cache.CacheManager;
 import org.apache.linkis.metadatamanager.common.cache.ConnCacheManager;
 import org.apache.linkis.metadatamanager.common.domain.MetaColumnInfo;
@@ -36,13 +37,15 @@ import java.nio.charset.StandardCharsets;
 import java.security.MessageDigest;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutionException;
 import java.util.function.Function;
 
 public abstract class AbstractMetaService<C extends Closeable> implements MetadataService {
     private static final Logger LOG = LoggerFactory.getLogger(AbstractMetaService.class);
     private static final String CONN_CACHE_REQ = "_STORED";
 
-
     private CacheManager connCacheManager;
 
     /**
@@ -147,46 +150,85 @@ public abstract class AbstractMetaService<C extends Closeable> implements Metada
         throw new WarnException(-1, "This method is no supported");
     }
 
-    protected void close(C connection){
+    public void close(C connection){
         try {
             connection.close();
         } catch (IOException e) {
-            throw new MetaRuntimeException("Fail to close connection[关闭连接失败], [" + e.getMessage() + "]");
+            throw new MetaRuntimeException("Fail to close connection[关闭连接失败], [" + e.getMessage() + "]", e);
         }
     }
 
     protected <R>R getConnAndRun(String operator, Map<String, Object> params, Function<C, R> action) {
         String cacheKey = "";
+        MetadataConnection<C> connection = null;
         try{
             cacheKey = md5String(Json.toJson(params, null), "", 2);
-            MetadataConnection<C> connection;
             if(null != reqCache) {
-                connection = reqCache.get(cacheKey, () -> getConnection(operator, params));
+                ConnectionCache<C> connectionCache = getConnectionInCache(reqCache, cacheKey, () -> getConnection(operator, params));
+                connection = connectionCache.connection;
+                // Update the actually cache key
+                cacheKey = connectionCache.cacheKey;
             }else{
                 connection = getConnection(operator, params);
             }
             return run(connection, action);
         }catch(Exception e){
             LOG.error("Error to invoke meta service", e);
-            if(StringUtils.isNotBlank(cacheKey)){
+            if(StringUtils.isNotBlank(cacheKey) && Objects.nonNull(reqCache)){
                 reqCache.invalidate(cacheKey);
             }
-            throw new MetaRuntimeException(e.getMessage());
+            throw new MetaRuntimeException(e.getMessage(), e);
+        }finally{
+            if (Objects.nonNull(connection) && connection.isLock() &&
+                    connection.getLock().isHeldByCurrentThread()){
+                connection.getLock().unlock();
+            }
         }
     }
     private <R>R run(MetadataConnection<C> connection, Function<C, R> action){
         if(connection.isLock()){
-            connection.getLock().lock();
-            try{
+            if (!connection.getLock().isHeldByCurrentThread()){
+                connection.getLock().lock();
+                try{
+                    return action.apply(connection.getConnection());
+                }finally{
+                    connection.getLock().unlock();
+                }
+            } else {
                 return action.apply(connection.getConnection());
-            }finally{
-                connection.getLock().unlock();
             }
         }else{
             return action.apply(connection.getConnection());
         }
     }
 
+    /**
+     * Get connection cache element
+     * @param cache cache entity
+     * @param cacheKey  cache key
+     * @param callable callable function
+     * @return connection cache
+     * @throws ExecutionException exception in caching
+     */
+    private ConnectionCache<C> getConnectionInCache(Cache<String, MetadataConnection<C>> cache,
+                                                       String cacheKey, Callable<? extends MetadataConnection<C>> callable) throws ExecutionException {
+        int poolSize = CacheConfiguration.CACHE_IN_POOL_SIZE.getValue();
+        if (poolSize <= 0){
+            poolSize = 1;
+        }
+        MetadataConnection<C> connection = null;
+        String cacheKeyInPool = cacheKey + "_0";
+        for (int i = 0; i < poolSize; i ++) {
+            connection = cache.get(cacheKeyInPool, callable);
+            if (!connection.isLock() || connection.getLock().tryLock()){
+                break;
+            }
+            cacheKeyInPool = cacheKey + "_" + i;
+            LOG.info("The connection cache: [" + cacheKeyInPool + "] has been occupied, now to find the other in pool");
+        }
+        return new ConnectionCache<>(cacheKeyInPool, connection);
+    }
+
     private String md5String(String source, String salt, int iterator){
         StringBuilder token = new StringBuilder();
         try{
@@ -211,4 +253,24 @@ public abstract class AbstractMetaService<C extends Closeable> implements Metada
         }
         return token.toString();
     }
+
+    /**
+     * Cache element
+     */
+    private static class ConnectionCache<C>{
+
+        public ConnectionCache(String cacheKey, MetadataConnection<C> connection){
+            this.cacheKey = cacheKey;
+            this.connection = connection;
+        }
+        /**
+         * Connection
+         */
+        MetadataConnection<C> connection;
+
+        /**
+         * Actual cacheKey
+         */
+        String cacheKey;
+    }
 }
diff --git a/linkis-public-enhancements/linkis-datasource/metadatamanager/common/src/main/java/org/apache/linkis/metadatamanager/common/service/BaseMetadataService.java b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/common/src/main/java/org/apache/linkis/metadatamanager/common/service/BaseMetadataService.java
similarity index 100%
rename from linkis-public-enhancements/linkis-datasource/metadatamanager/common/src/main/java/org/apache/linkis/metadatamanager/common/service/BaseMetadataService.java
rename to linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/common/src/main/java/org/apache/linkis/metadatamanager/common/service/BaseMetadataService.java
diff --git a/linkis-public-enhancements/linkis-datasource/metadatamanager/common/src/main/java/org/apache/linkis/metadatamanager/common/service/MetadataConnection.java b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/common/src/main/java/org/apache/linkis/metadatamanager/common/service/MetadataConnection.java
similarity index 100%
rename from linkis-public-enhancements/linkis-datasource/metadatamanager/common/src/main/java/org/apache/linkis/metadatamanager/common/service/MetadataConnection.java
rename to linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/common/src/main/java/org/apache/linkis/metadatamanager/common/service/MetadataConnection.java
diff --git a/linkis-public-enhancements/linkis-datasource/metadatamanager/common/src/main/java/org/apache/linkis/metadatamanager/common/service/MetadataDbService.java b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/common/src/main/java/org/apache/linkis/metadatamanager/common/service/MetadataDbService.java
similarity index 100%
rename from linkis-public-enhancements/linkis-datasource/metadatamanager/common/src/main/java/org/apache/linkis/metadatamanager/common/service/MetadataDbService.java
rename to linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/common/src/main/java/org/apache/linkis/metadatamanager/common/service/MetadataDbService.java
diff --git a/linkis-public-enhancements/linkis-datasource/metadatamanager/common/src/main/java/org/apache/linkis/metadatamanager/common/service/MetadataService.java b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/common/src/main/java/org/apache/linkis/metadatamanager/common/service/MetadataService.java
similarity index 100%
rename from linkis-public-enhancements/linkis-datasource/metadatamanager/common/src/main/java/org/apache/linkis/metadatamanager/common/service/MetadataService.java
rename to linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/common/src/main/java/org/apache/linkis/metadatamanager/common/service/MetadataService.java
diff --git a/linkis-public-enhancements/linkis-datasource/metadatamanager/common/src/main/scala/org/apache/linkis/metadatamanager/common/protocol/MetadataOperateProtocol.scala b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/common/src/main/scala/org/apache/linkis/metadatamanager/common/protocol/MetadataOperateProtocol.scala
similarity index 94%
rename from linkis-public-enhancements/linkis-datasource/metadatamanager/common/src/main/scala/org/apache/linkis/metadatamanager/common/protocol/MetadataOperateProtocol.scala
rename to linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/common/src/main/scala/org/apache/linkis/metadatamanager/common/protocol/MetadataOperateProtocol.scala
index 6dd937c..67c688d 100644
--- a/linkis-public-enhancements/linkis-datasource/metadatamanager/common/src/main/scala/org/apache/linkis/metadatamanager/common/protocol/MetadataOperateProtocol.scala
+++ b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/common/src/main/scala/org/apache/linkis/metadatamanager/common/protocol/MetadataOperateProtocol.scala
@@ -24,8 +24,8 @@ trait MetadataOperateProtocol {
 }
 
 /**
- * Request to do connect
- * @param version
- * @param params
+   * Request to do connect
+   * @param version
+   * @param params
  */
 case class MetadataConnect(dataSourceType: String, operator: String, params: util.Map[String, Object], version: String) extends MetadataOperateProtocol
diff --git a/linkis-public-enhancements/linkis-datasource/metadatamanager/common/src/main/scala/org/apache/linkis/metadatamanager/common/protocol/MetadataProtocol.scala b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/common/src/main/scala/org/apache/linkis/metadatamanager/common/protocol/MetadataProtocol.scala
similarity index 100%
rename from linkis-public-enhancements/linkis-datasource/metadatamanager/common/src/main/scala/org/apache/linkis/metadatamanager/common/protocol/MetadataProtocol.scala
rename to linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/common/src/main/scala/org/apache/linkis/metadatamanager/common/protocol/MetadataProtocol.scala
diff --git a/linkis-public-enhancements/linkis-datasource/metadatamanager/common/src/main/scala/org/apache/linkis/metadatamanager/common/protocol/MetadataQueryProtocol.scala b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/common/src/main/scala/org/apache/linkis/metadatamanager/common/protocol/MetadataQueryProtocol.scala
similarity index 80%
rename from linkis-public-enhancements/linkis-datasource/metadatamanager/common/src/main/scala/org/apache/linkis/metadatamanager/common/protocol/MetadataQueryProtocol.scala
rename to linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/common/src/main/scala/org/apache/linkis/metadatamanager/common/protocol/MetadataQueryProtocol.scala
index f9a3d5a..9487e00 100644
--- a/linkis-public-enhancements/linkis-datasource/metadatamanager/common/src/main/scala/org/apache/linkis/metadatamanager/common/protocol/MetadataQueryProtocol.scala
+++ b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/common/src/main/scala/org/apache/linkis/metadatamanager/common/protocol/MetadataQueryProtocol.scala
@@ -24,38 +24,38 @@ trait MetadataQueryProtocol {
 }
 
 /**
- * Request to get database list
- * @param params
+   * Request to get database list
+   * @param params
  */
 case class MetaGetDatabases(params: util.Map[String, Object], operator: String) extends MetadataQueryProtocol
 
 /**
- * Request to get table list
- * @param params
+   * Request to get table list
+   * @param params
  */
 case class MetaGetTables(params: util.Map[String, Object], database: String, operator: String) extends MetadataQueryProtocol
 
 /**
- * Request to get table properties
- * @param params
- * @param database
- * @param table
+   * Request to get table properties
+   * @param params
+   * @param database
+   * @param table
  */
 case class MetaGetTableProps(params: util.Map[String, Object], database: String, table: String, operator: String) extends MetadataQueryProtocol
 
 /**
- * Request to get partition list
- * @param params
- * @param database
- * @param table
+   * Request to get partition list
+   * @param params
+   * @param database
+   * @param table
  */
 case class MetaGetPartitions(params: util.Map[String, Object], database: String, table: String, operator: String) extends MetadataQueryProtocol
 
 /**
- * Request to get column list
- * @param params
- * @param database
- * @param table
+   * Request to get column list
+   * @param params
+   * @param database
+   * @param table
  */
 case class MetaGetColumns(params: util.Map[String, Object], database: String, table: String, operator: String) extends MetadataQueryProtocol
 
diff --git a/linkis-public-enhancements/linkis-datasource/metadatamanager/server/pom.xml b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/server/pom.xml
similarity index 87%
rename from linkis-public-enhancements/linkis-datasource/metadatamanager/server/pom.xml
rename to linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/server/pom.xml
index 046ef64..80f1687 100644
--- a/linkis-public-enhancements/linkis-datasource/metadatamanager/server/pom.xml
+++ b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/server/pom.xml
@@ -24,34 +24,23 @@
         <version>1.0.3</version>
     </parent>
   <modelVersion>4.0.0</modelVersion>
-  <artifactId>linkis-metadatamanager-server</artifactId>
+  <artifactId>linkis-metadata-manager-server</artifactId>
 
   <properties>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
   </properties>
 
   <dependencies>
-    <dependency>
-      <groupId>org.apache.linkis</groupId>
-      <artifactId>linkis-module</artifactId>
-      <version>${linkis.version}</version>
-      <exclusions>
-        <exclusion>
-          <artifactId>asm</artifactId>
-          <groupId>org.ow2.asm</groupId>
-        </exclusion>
-      </exclusions>
-    </dependency>
     <!--Metadata common-->
     <dependency>
       <groupId>org.apache.linkis</groupId>
-      <artifactId>linkis-metadatamanager-common</artifactId>
+      <artifactId>linkis-metadata-manager-common</artifactId>
       <version>${linkis.version}</version>
     </dependency>
     <!-- data source manager common dependency-->
     <dependency>
       <groupId>org.apache.linkis</groupId>
-      <artifactId>linkis-datasourcemanager-common</artifactId>
+      <artifactId>linkis-datasource-manager-common</artifactId>
       <version>${linkis.version}</version>
       <exclusions>
         <exclusion>
@@ -65,6 +54,7 @@
       <groupId>org.apache.linkis</groupId>
       <artifactId>linkis-rpc</artifactId>
       <version>${linkis.version}</version>
+      <scope>provided</scope>
     </dependency>
   </dependencies>
 
diff --git a/linkis-public-enhancements/linkis-datasource/metadatamanager/service/hive/src/main/assembly/distribution.xml b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/server/src/main/assembly/distribution.xml
similarity index 50%
rename from linkis-public-enhancements/linkis-datasource/metadatamanager/service/hive/src/main/assembly/distribution.xml
rename to linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/server/src/main/assembly/distribution.xml
index 8afbe20..4d49a03 100644
--- a/linkis-public-enhancements/linkis-datasource/metadatamanager/service/hive/src/main/assembly/distribution.xml
+++ b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/server/src/main/assembly/distribution.xml
@@ -19,13 +19,13 @@
         xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/2.3"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/2.3 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
-    <id>linkis-mdm-service-hive</id>
+    <id>linkis-metadata-manager-server</id>
     <formats>
         <format>zip</format>
         <format>dir</format>
     </formats>
     <includeBaseDirectory>false</includeBaseDirectory>
-    <baseDirectory>linkis-mdm-service-hive</baseDirectory>
+    <baseDirectory>linkis-mdm-server</baseDirectory>
 
     <dependencySets>
         <dependencySet>
@@ -42,13 +42,59 @@
 
     <fileSets>
         <fileSet>
-            <directory>${basedir}/src/main/resources</directory>
+            <directory>${basedir}/../service/elasticsearch/target/out/lib</directory>
+            <fileMode>0755</fileMode>
+            <outputDirectory>lib/service/elasticsearch</outputDirectory>
             <includes>
-                <include>*</include>
+                <include>*.jar</include>
             </includes>
-            <fileMode>0777</fileMode>
-            <outputDirectory>conf</outputDirectory>
-            <lineEnding>unix</lineEnding>
+            <excludes>
+                <exclude>*-javadoc.jar</exclude>
+            </excludes>
+        </fileSet>
+        <fileSet>
+            <directory>${basedir}/../service/hive/target/out/lib</directory>
+            <fileMode>0755</fileMode>
+            <outputDirectory>lib/service/hive</outputDirectory>
+            <includes>
+                <include>*.jar</include>
+            </includes>
+            <excludes>
+                <exclude>*-javadoc.jar</exclude>
+            </excludes>
+        </fileSet>
+        <fileSet>
+            <directory>${basedir}/../service/kafka/target/out/lib</directory>
+            <fileMode>0755</fileMode>
+            <outputDirectory>lib/service/kafka</outputDirectory>
+            <includes>
+                <include>*.jar</include>
+            </includes>
+            <excludes>
+                <exclude>*-javadoc.jar</exclude>
+            </excludes>
+        </fileSet>
+        <fileSet>
+            <directory>${basedir}/../service/mysql/target/out/lib</directory>
+            <fileMode>0755</fileMode>
+            <outputDirectory>lib/service/mysql</outputDirectory>
+            <includes>
+                <include>*.jar</include>
+            </includes>
+            <excludes>
+                <exclude>*-javadoc.jar</exclude>
+            </excludes>
+        </fileSet>
+        <fileSet>
+            <directory>${basedir}/../service/tdsql/target/out/lib</directory>
+            <fileMode>0755</fileMode>
+            <outputDirectory>lib/service/tdsql</outputDirectory>
+            <includes>
+                <include>*.jar</include>
+            </includes>
+            <excludes>
+                <exclude>*-javadoc.jar</exclude>
+            </excludes>
         </fileSet>
     </fileSets>
 
diff --git a/linkis-public-enhancements/linkis-datasource/metadatamanager/server/src/main/java/org/apache/linkis/metadatamanager/server/LinkisMetadataManagerApplication.java b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/server/src/main/java/org/apache/linkis/metadatamanager/server/LinkisMetadataManagerApplication.java
similarity index 100%
rename from linkis-public-enhancements/linkis-datasource/metadatamanager/server/src/main/java/org/apache/linkis/metadatamanager/server/LinkisMetadataManagerApplication.java
rename to linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/server/src/main/java/org/apache/linkis/metadatamanager/server/LinkisMetadataManagerApplication.java
diff --git a/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/server/src/main/java/org/apache/linkis/metadatamanager/server/loader/MetaClassLoaderManager.java b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/server/src/main/java/org/apache/linkis/metadatamanager/server/loader/MetaClassLoaderManager.java
new file mode 100644
index 0000000..046c4a5
--- /dev/null
+++ b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/server/src/main/java/org/apache/linkis/metadatamanager/server/loader/MetaClassLoaderManager.java
@@ -0,0 +1,201 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.linkis.metadatamanager.server.loader;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.linkis.common.conf.CommonVars;
+import org.apache.linkis.common.exception.ErrorException;
+import org.apache.linkis.metadatamanager.common.exception.MetaRuntimeException;
+import org.apache.linkis.metadatamanager.common.service.AbstractMetaService;
+import org.apache.linkis.metadatamanager.common.service.MetadataService;
+import org.apache.linkis.metadatamanager.server.utils.MetadataUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.File;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.TimeUnit;
+import java.util.function.BiFunction;
+import java.util.stream.Collectors;
+
+/**
+ * Class Loader for metaClass
+ * // TODO used interface class
+ */
+public class MetaClassLoaderManager {
+
+    private final Map<String, ClassLoader> classLoaders = new ConcurrentHashMap<>();
+
+    private final Map<String, MetaServiceInstance> metaServiceInstances = new ConcurrentHashMap<>();
+
+    public static CommonVars<String> LIB_DIR = CommonVars.apply("wds.linkis.server.mdm.service.lib.dir", "/lib/linkis-pulicxxxx-/linkis-metdata-manager/service");
+
+    public static CommonVars<Integer> INSTANCE_EXPIRE_TIME = CommonVars.apply("wds.linkis.server.mdm.service.instance.expire-in-seconds", 60);
+
+    private static final String META_CLASS_NAME = "com.webank.wedatasphere.linkis.metadatamanager.service.%sMetaService";
+
+    private static final Logger LOG = LoggerFactory.getLogger(MetaClassLoaderManager.class);
+
+    public BiFunction<String, Object[], Object> getInvoker(String dsType) throws ErrorException {
+        boolean needToLoad = true;
+        MetaServiceInstance serviceInstance = metaServiceInstances.get(dsType);
+        if (Objects.nonNull(serviceInstance)){
+            Integer expireTimeInSec = INSTANCE_EXPIRE_TIME.getValue();
+            //Lazy load
+            needToLoad = Objects.nonNull(expireTimeInSec) && expireTimeInSec > 0 &&
+                    (serviceInstance.initTimeStamp +
+                            TimeUnit.MILLISECONDS.convert(expireTimeInSec,  TimeUnit.SECONDS)) < System.currentTimeMillis();
+        }
+        if(needToLoad) {
+            MetaServiceInstance finalServiceInstance1 = serviceInstance;
+            serviceInstance = metaServiceInstances.compute(dsType, (key, instance) -> {
+                if(null != instance && !Objects.equals(finalServiceInstance1, instance)){
+                    return instance;
+                }
+                LOG.info("Start to load/reload meta instance of data source type: [" + dsType + "]");
+                ClassLoader parentClassLoader = MetaClassLoaderManager.class.getClassLoader();
+                ClassLoader metaClassLoader = classLoaders.compute(dsType, (type, classLoader) -> {
+                    String lib = LIB_DIR.getValue();
+                    String stdLib = lib.endsWith("/") ? lib.replaceAll(".$", "") : lib;
+                    String componentLib = stdLib + "/" + dsType;
+                    try {
+                        return new URLClassLoader(getJarsUrlsOfPath(componentLib).toArray(new URL[0]), parentClassLoader);
+                    } catch (Exception e) {
+                        LOG.error("Cannot init the classloader of type: [" + dsType + "] in library path: [" + componentLib + "]", e);
+                        return null;
+                    }
+                });
+                if (Objects.isNull(metaClassLoader)) {
+                    throw new MetaRuntimeException("Error in creating classloader of type: [" + dsType + "]", null);
+                }
+                String expectClassName = null;
+                if (dsType.length() > 0) {
+                    String prefix = dsType.substring(0, 1).toUpperCase() + dsType.substring(1);
+                    expectClassName = String.format(META_CLASS_NAME, prefix);
+                }
+                Class<? extends MetadataService> metaServiceClass = searchForLoadMetaServiceClass(metaClassLoader, expectClassName, true);
+                if (Objects.isNull(metaServiceClass)) {
+                    throw new MetaRuntimeException("Fail to init and load meta service class for type: [" + dsType + "]", null);
+                }
+                MetadataService metadataService = MetadataUtils.loadMetaService(metaServiceClass, metaClassLoader);
+                if (metadataService instanceof AbstractMetaService){
+                    LOG.info("Invoke the init() method in meta service for type: [" + dsType +"]");
+                    ((AbstractMetaService<?>)metadataService).init();
+                }
+                return new MetaServiceInstance(metadataService, metaClassLoader);
+            });
+        }
+        Method[] childMethods = serviceInstance.methods;
+        MetaServiceInstance finalServiceInstance = serviceInstance;
+        return (String m, Object...args)-> {
+            ClassLoader currentClassLoader = Thread.currentThread().getContextClassLoader();
+            try {
+                Thread.currentThread().setContextClassLoader(finalServiceInstance.metaClassLoader);
+                Method method = Arrays.stream(childMethods)
+                        .filter(eachMethod -> eachMethod.getName().equals(m)).collect(Collectors.toList()).get(0);
+                return method.invoke(finalServiceInstance.serviceInstance, args);
+            } catch (Exception e) {
+                Throwable t = e;
+                // UnWrap the Invocation target exception
+                while (t instanceof InvocationTargetException){
+                    t = t.getCause();
+                }
+                String message = "Fail to invoke method: [" + m + "] in meta service instance: [" + finalServiceInstance.serviceInstance.toString() + "]";
+                LOG.warn(message, t);
+                throw new MetaRuntimeException(message, t);
+            }finally {
+                Thread.currentThread().setContextClassLoader(currentClassLoader);
+            }
+        };
+    }
+
+
+
+
+    private Class<? extends MetadataService> searchForLoadMetaServiceClass(ClassLoader classLoader,
+                                                                           String expectClassName, boolean initialize){
+        ClassLoader currentClassLoader = Thread.currentThread().getContextClassLoader();
+        Thread.currentThread().setContextClassLoader(classLoader);
+        try{
+            Class<? extends MetadataService> metaClass = null;
+            if(StringUtils.isNotBlank(expectClassName)){
+                metaClass = MetadataUtils.loadMetaServiceClass(classLoader, expectClassName,
+                        initialize, "Cannot find class in using expect class name: [" + expectClassName + "]");
+            }
+            if (Objects.isNull(metaClass)){
+                if (classLoader instanceof URLClassLoader){
+                    String[] metaServiceClassNames = MetadataUtils.searchMetaServiceClassInLoader((URLClassLoader)classLoader);
+                    if (metaServiceClassNames.length > 0){
+                        String metaServiceClassName = metaServiceClassNames[0];
+                        metaClass = MetadataUtils.loadMetaServiceClass(classLoader, metaServiceClassName,
+                                initialize, "Cannot load class in canonical name: [" + metaServiceClassName + "], please check the compiled jar/file");
+                    }
+                }
+            }
+            return metaClass;
+        } finally{
+            Thread.currentThread().setContextClassLoader(currentClassLoader);
+        }
+    }
+
+
+    private List<URL> getJarsUrlsOfPath(String path) throws MalformedURLException {
+        File file = new File(path);
+        List<URL> jars = new ArrayList<>();
+        if (file.listFiles() != null){
+            for(File f : Objects.requireNonNull(file.listFiles())){
+                if (!f.isDirectory() && f.getName().endsWith(".jar")){
+                    jars.add(f.toURI().toURL());
+                }else if(f.isDirectory()){
+                    jars.addAll(getJarsUrlsOfPath(f.getPath()));
+                }
+            }
+        }
+        return jars;
+    }
+
+    /**
+     * ServiceInstance Holder
+     */
+    public static class MetaServiceInstance{
+        private MetadataService serviceInstance;
+
+        private Method[] methods;
+
+        private ClassLoader metaClassLoader;
+
+        private long initTimeStamp = 0L;
+
+        public MetaServiceInstance(MetadataService serviceInstance, ClassLoader metaClassLoader){
+            this.serviceInstance = serviceInstance;
+            this.metaClassLoader = metaClassLoader;
+            this.methods = serviceInstance.getClass().getMethods();
+            this.initTimeStamp = System.currentTimeMillis();
+        }
+
+        public MetadataService getServiceInstance() {
+            return serviceInstance;
+        }
+    }
+}
diff --git a/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/server/src/main/java/org/apache/linkis/metadatamanager/server/restful/MetadataCoreRestful.java b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/server/src/main/java/org/apache/linkis/metadatamanager/server/restful/MetadataCoreRestful.java
new file mode 100644
index 0000000..35d51be
--- /dev/null
+++ b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/server/src/main/java/org/apache/linkis/metadatamanager/server/restful/MetadataCoreRestful.java
@@ -0,0 +1,159 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.linkis.metadatamanager.server.restful;
+
+import org.apache.linkis.common.exception.ErrorException;
+import org.apache.linkis.datasourcemanager.common.util.json.Json;
+import org.apache.linkis.metadatamanager.common.domain.MetaColumnInfo;
+import org.apache.linkis.metadatamanager.common.domain.MetaPartitionInfo;
+import org.apache.linkis.metadatamanager.common.exception.MetaMethodInvokeException;
+import org.apache.linkis.metadatamanager.server.service.MetadataAppService;
+import org.apache.linkis.server.Message;
+import org.apache.commons.lang.StringUtils;
+import org.apache.linkis.server.security.SecurityFilter;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+import java.util.Map;
+
+@RestController
+@RequestMapping(value = "/metadatamanager", produces = {"application/json"})
+public class MetadataCoreRestful {
+
+    private static final Logger LOG = LoggerFactory.getLogger(MetadataCoreRestful.class);
+
+    @Autowired
+    private MetadataAppService metadataAppService;
+
+    @RequestMapping(value = "/dbs/{data_source_id}", method = RequestMethod.GET)
+    public Message getDatabases(@PathVariable("data_source_id")String dataSourceId,
+                                 @RequestParam("system")String system,
+                                 HttpServletRequest request){
+        try{
+            if(StringUtils.isBlank(system)){
+                return Message.error("'system' is missing[缺少系统名]");
+            }
+            List<String> databases = metadataAppService.getDatabasesByDsId(dataSourceId, system,
+                    SecurityFilter.getLoginUsername(request));
+            return Message.ok().data("dbs", databases);
+        }catch(Exception e){
+            return errorToResponseMessage("Fail to get database list[获取库信息失败], id:[" + dataSourceId +"], system:[" + system + "]", e);
+        }
+    }
+
+    @RequestMapping( value = "/tables/{data_source_id}/db/{database}", method = RequestMethod.GET)
+    public Message getTables(@PathVariable("data_source_id")String dataSourceId,
+                              @PathVariable("database")String database,
+                              @RequestParam("system")String system,
+                              HttpServletRequest request){
+        try{
+            if(StringUtils.isBlank(system)){
+                return Message.error("'system' is missing[缺少系统名]");
+            }
+            List<String> tables = metadataAppService.getTablesByDsId(dataSourceId, database, system,
+                    SecurityFilter.getLoginUsername(request));
+            return Message.ok().data("tables", tables);
+        }catch(Exception e){
+            return errorToResponseMessage("Fail to get table list[获取表信息失败], id:[" + dataSourceId +"]" +
+                            ", system:[" + system + "], database:[" +database +"]", e);
+        }
+    }
+
+    @RequestMapping( value = "/props/{data_source_id}/db/{database}/table/{table}", method = RequestMethod.GET)
+    public Message getTableProps(@PathVariable("data_source_id")String dataSourceId,
+                                  @PathVariable("database")String database,
+                                  @PathVariable("table") String table,
+                                  @RequestParam("system")String system,
+                                   HttpServletRequest request){
+        try{
+            if(StringUtils.isBlank(system)){
+                return Message.error("'system' is missing[缺少系统名]");
+            }
+            Map<String, String> tableProps = metadataAppService.getTablePropsByDsId(dataSourceId, database, table, system,
+                    SecurityFilter.getLoginUsername(request));
+            return Message.ok().data("props", tableProps);
+        }catch(Exception e){
+            return errorToResponseMessage("Fail to get table properties[获取表参数信息失败], id:[" + dataSourceId +"]" +
+                            ", system:[" + system + "], database:[" +database +"], table:[" + table +"]", e);
+        }
+    }
+
+    @RequestMapping( value = "/partitions/{data_source_id}/db/{database}/table/{table}", method = RequestMethod.GET)
+    public Message getPartitions(@PathVariable("data_source_id")String dataSourceId,
+                                  @PathVariable("database")String database,
+                                  @PathVariable("table") String table,
+                                  @RequestParam("system")String system,
+                                   HttpServletRequest request){
+        try{
+            if(StringUtils.isBlank(system)){
+                return Message.error("'system' is missing[缺少系统名]");
+            }
+            MetaPartitionInfo partitionInfo = metadataAppService.getPartitionsByDsId(dataSourceId, database, table, system,
+                    SecurityFilter.getLoginUsername(request));
+            return Message.ok().data("props", partitionInfo);
+        }catch(Exception e){
+            return errorToResponseMessage("Fail to get partitions[获取表分区信息失败], id:[" + dataSourceId +"]" +
+                            ", system:[" + system + "], database:[" +database +"], table:[" + table +"]", e);
+        }
+    }
+
+    @RequestMapping( value = "/columns/{data_source_id}/db/{database}/table/{table}", method = RequestMethod.GET)
+    public Message getColumns(@PathVariable("data_source_id")String dataSourceId,
+                               @PathVariable("database")String database,
+                               @PathVariable("table") String table,
+                               @RequestParam("system")String system,
+                                HttpServletRequest request){
+        try{
+            if(StringUtils.isBlank(system)){
+                return Message.error("'system' is missing[缺少系统名]");
+            }
+            List<MetaColumnInfo> columns = metadataAppService.getColumns(dataSourceId, database, table, system,
+                    SecurityFilter.getLoginUsername(request));
+            return Message.ok().data("columns", columns);
+        }catch(Exception e){
+            return errorToResponseMessage("Fail to get column list[获取表字段信息失败], id:[" + dataSourceId +"]" +
+                            ", system:[" + system + "], database:[" +database +"], table:[" + table +"]", e);
+        }
+    }
+
+    private Message errorToResponseMessage(String uiMessage, Exception e){
+        if (e instanceof MetaMethodInvokeException){
+            MetaMethodInvokeException invokeException = (MetaMethodInvokeException)e;
+            if (LOG.isDebugEnabled()) {
+                String argumentJson = null;
+                try {
+                    argumentJson = Json.toJson(invokeException.getArgs(), null);
+                } catch (Exception je) {
+                    // Ignore
+                }
+                LOG.trace(uiMessage + " => Method: " + invokeException.getMethod() + ", Arguments:" + argumentJson, e);
+            }
+            uiMessage += " possible reason[可能原因]: (" + invokeException.getCause().getMessage() + ")";
+        }else {
+            if (e instanceof ErrorException){
+                uiMessage += " possible reason[可能原因]: (" + e.getMessage() + ")";
+            }
+           LOG.error(uiMessage, e);
+        }
+        return Message.error(uiMessage);
+    }
+}
diff --git a/linkis-public-enhancements/linkis-datasource/metadatamanager/server/src/main/java/org/apache/linkis/metadatamanager/server/service/MetadataAppService.java b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/server/src/main/java/org/apache/linkis/metadatamanager/server/service/MetadataAppService.java
similarity index 76%
rename from linkis-public-enhancements/linkis-datasource/metadatamanager/server/src/main/java/org/apache/linkis/metadatamanager/server/service/MetadataAppService.java
rename to linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/server/src/main/java/org/apache/linkis/metadatamanager/server/service/MetadataAppService.java
index df259bc..80d90b3 100644
--- a/linkis-public-enhancements/linkis-datasource/metadatamanager/server/src/main/java/org/apache/linkis/metadatamanager/server/service/MetadataAppService.java
+++ b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/server/src/main/java/org/apache/linkis/metadatamanager/server/service/MetadataAppService.java
@@ -27,11 +27,18 @@ import java.util.Map;
 public interface MetadataAppService {
 
     /**
+     * Get connection
+     * @param params connect params
+     * @return
+     */
+    void getConnection(String dataSourceType, String operator, Map<String, Object> params) throws Exception;
+
+    /**
      * @param dataSourceId data source id
      * @param system system
      * @return
      */
-    List<String> getDatabasesByDsId(String dataSourceId, String system) throws ErrorException;
+    List<String> getDatabasesByDsId(String dataSourceId, String system, String userName) throws ErrorException;
 
     /**
      * @param dataSourceId data source id
@@ -39,7 +46,7 @@ public interface MetadataAppService {
      * @param database database
      * @return
      */
-    List<String> getTablesByDsId(String dataSourceId, String database, String system) throws ErrorException;
+    List<String> getTablesByDsId(String dataSourceId, String database, String system, String userName) throws ErrorException;
 
     /**
      * @param dataSourceId data source id
@@ -48,7 +55,8 @@ public interface MetadataAppService {
      * @param system system
      * @return
      */
-    Map<String, String> getTablePropsByDsId(String dataSourceId, String database, String table, String system) throws ErrorException;
+    Map<String, String> getTablePropsByDsId(String dataSourceId, String database, String table,
+                                            String system, String userName) throws ErrorException;
     /**
      * @param dataSourceId data source i
      * @param database database
@@ -56,7 +64,8 @@ public interface MetadataAppService {
      * @param system system
      * @return
      */
-    MetaPartitionInfo getPartitionsByDsId(String dataSourceId, String database, String table, String system) throws ErrorException;
+    MetaPartitionInfo getPartitionsByDsId(String dataSourceId, String database, String table,
+                                          String system, String userName) throws ErrorException;
 
     /**
      * @param dataSourceId data source id
@@ -65,5 +74,6 @@ public interface MetadataAppService {
      * @param system system
      * @return
      */
-    List<MetaColumnInfo> getColumns(String dataSourceId, String database, String table, String system) throws ErrorException;
+    List<MetaColumnInfo> getColumns(String dataSourceId, String database, String table,
+                                    String system, String userName) throws ErrorException;
 }
diff --git a/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/server/src/main/java/org/apache/linkis/metadatamanager/server/service/impl/MetadataAppServiceImpl.java b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/server/src/main/java/org/apache/linkis/metadatamanager/server/service/impl/MetadataAppServiceImpl.java
new file mode 100644
index 0000000..e04cfa2
--- /dev/null
+++ b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/server/src/main/java/org/apache/linkis/metadatamanager/server/service/impl/MetadataAppServiceImpl.java
@@ -0,0 +1,189 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+package org.apache.linkis.metadatamanager.server.service.impl;
+
+import org.apache.linkis.common.exception.ErrorException;
+import org.apache.linkis.datasourcemanager.common.auth.AuthContext;
+import org.apache.linkis.datasourcemanager.common.protocol.DsInfoQueryRequest;
+import org.apache.linkis.datasourcemanager.common.protocol.DsInfoResponse;
+import org.apache.linkis.metadatamanager.common.MdmConfiguration;
+import org.apache.linkis.metadatamanager.common.domain.MetaColumnInfo;
+import org.apache.linkis.metadatamanager.common.domain.MetaPartitionInfo;
+import org.apache.linkis.metadatamanager.common.exception.MetaMethodInvokeException;
+import org.apache.linkis.metadatamanager.common.exception.MetaRuntimeException;
+import org.apache.linkis.metadatamanager.common.service.MetadataConnection;
+import org.apache.linkis.metadatamanager.server.loader.MetaClassLoaderManager;
+import org.apache.linkis.metadatamanager.server.service.MetadataAppService;
+import org.apache.linkis.rpc.Sender;
+import org.apache.commons.lang.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.PostConstruct;
+import java.io.Closeable;
+import java.io.IOException;
+import java.util.*;
+import java.util.function.BiFunction;
+
+@Service
+public class MetadataAppServiceImpl implements MetadataAppService {
+    private Sender dataSourceRpcSender;
+    private MetaClassLoaderManager metaClassLoaderManager;
+    private static final Logger LOG = LoggerFactory.getLogger(MetadataAppServiceImpl.class);
+    @PostConstruct
+    public void init(){
+        dataSourceRpcSender = Sender.getSender(MdmConfiguration.DATA_SOURCE_SERVICE_APPLICATION.getValue());
+        metaClassLoaderManager = new MetaClassLoaderManager();
+    }
+
+
+    @Override
+    public void getConnection(String dataSourceType, String operator, Map<String, Object> params) throws Exception {
+        MetadataConnection<Closeable> metadataConnection = invokeMetaMethod(dataSourceType, "getConnection", new Object[]{operator, params}, Map.class);
+        if (Objects.nonNull(metadataConnection)){
+            Closeable connection = metadataConnection.getConnection();
+            try {
+                connection.close();
+            }catch(IOException e){
+                LOG.warn("Fail to close connection[关闭连接失败], [" + e.getMessage() + "]", e);
+            }
+        }
+    }
+
+    @Override
+    public List<String> getDatabasesByDsId(String dataSourceId, String system, String userName) throws ErrorException {
+        DsInfoResponse dsInfoResponse = reqToGetDataSourceInfo(dataSourceId, system, userName);
+        if(StringUtils.isNotBlank(dsInfoResponse.dsType())){
+            return invokeMetaMethod(dsInfoResponse.dsType(), "getDatabases",   new Object[]{dsInfoResponse.creator(), dsInfoResponse.params()}, List.class);
+        }
+        return new ArrayList<>();
+    }
+
+    @Override
+    public List<String> getTablesByDsId(String dataSourceId, String database, String system,
+                                        String userName) throws ErrorException {
+        DsInfoResponse dsInfoResponse = reqToGetDataSourceInfo(dataSourceId, system, userName);
+        if(StringUtils.isNotBlank(dsInfoResponse.dsType())){
+            return invokeMetaMethod(dsInfoResponse.dsType(), "getTables", new Object[]{dsInfoResponse.creator(), dsInfoResponse.params(), database}, List.class);
+        }
+        return new ArrayList<>();
+    }
+
+    @Override
+    public Map<String, String> getTablePropsByDsId(String dataSourceId, String database, String table,
+                                                   String system, String userName) throws ErrorException {
+        DsInfoResponse dsInfoResponse = reqToGetDataSourceInfo(dataSourceId, system, userName);
+        if(StringUtils.isNotBlank(dsInfoResponse.dsType())){
+            return invokeMetaMethod(dsInfoResponse.dsType(), "getTableProps",  new Object[]{dsInfoResponse.creator(), dsInfoResponse.params(), database, table},
+                    Map.class);
+        }
+        return new HashMap<>();
+    }
+
+    @Override
+    public MetaPartitionInfo getPartitionsByDsId(String dataSourceId, String database, String table,
+                                                 String system, String userName) throws ErrorException {
+        DsInfoResponse dsInfoResponse = reqToGetDataSourceInfo(dataSourceId, system, userName);
+        if(StringUtils.isNotBlank(dsInfoResponse.dsType())){
+            return invokeMetaMethod(dsInfoResponse.dsType(), "getPartitions", new Object[]{dsInfoResponse.creator(), dsInfoResponse.params(), database, table},
+                    MetaPartitionInfo.class);
+        }
+        return new MetaPartitionInfo();
+    }
+
+    @Override
+    public List<MetaColumnInfo> getColumns(String dataSourceId, String database, String table,
+                                           String system, String userName) throws ErrorException {
+        DsInfoResponse dsInfoResponse = reqToGetDataSourceInfo(dataSourceId, system, userName);
+        if(StringUtils.isNotBlank(dsInfoResponse.dsType())){
+            return invokeMetaMethod(dsInfoResponse.dsType(), "getColumns", new Object[]{dsInfoResponse.creator(), dsInfoResponse.params(), database, table},
+                    List.class);
+        }
+        return new ArrayList<>();
+    }
+
+    /**
+     * Request to get data source information
+     * (type and connection parameters)
+     * @param dataSourceId data source id
+     * @param system system
+     * @return
+     * @throws ErrorException
+     */
+    public DsInfoResponse reqToGetDataSourceInfo(String dataSourceId, String system,
+                                                 String userName) throws ErrorException{
+        Object rpcResult = null;
+        try {
+            rpcResult = dataSourceRpcSender.ask(new DsInfoQueryRequest(dataSourceId, null, system));
+        }catch(Exception e){
+            throw new ErrorException(-1, "Remote Service Error[远端服务出错, 联系运维处理]");
+        }
+        if(rpcResult instanceof DsInfoResponse){
+            DsInfoResponse response = (DsInfoResponse)rpcResult;
+            if(!response.status()){
+                throw new ErrorException(-1, "Error in Data Source Manager Server[数据源服务出错]");
+            }
+            boolean hasPermission = (AuthContext.isAdministrator(userName) ||
+                    (StringUtils.isNotBlank(response.creator()) && userName.equals(response.creator())));
+            if(!hasPermission){
+                throw new ErrorException(-1, "Don't have query permission for data source [没有数据源的查询权限]");
+            } else if (response.params().isEmpty()){
+                throw new ErrorException(-1, "Have you published the data source? [数据源未发布或者参数为空]");
+            }
+            return response;
+        }else{
+            throw new ErrorException(-1, "Remote Service Error[远端服务出错, 联系运维处理]");
+        }
+    }
+
+    /**
+     * Invoke method in meta service
+     * @param method method name
+     * @param methodArgs arguments
+     */
+    @SuppressWarnings("unchecked")
+    private <T>T invokeMetaMethod(String dsType,
+                                  String method, Object[] methodArgs,
+                                  Class<?> returnType) throws MetaMethodInvokeException {
+        BiFunction<String, Object[], Object> invoker;
+        try {
+            invoker = metaClassLoaderManager.getInvoker(dsType);
+        }catch (Exception e){
+            // TODO ERROR CODE
+            throw new MetaMethodInvokeException(-1, "Load meta service for " + dsType +
+                    " fail 加载 [" + dsType + "] 元数据服务失败", e);
+        }
+        if (Objects.nonNull(invoker)){
+            try {
+                Object returnObj = invoker.apply(method, methodArgs);
+                if (Objects.nonNull(returnType)) {
+                    return (T) returnObj;
+                }
+            }catch (Exception e){
+                if (e instanceof MetaRuntimeException){
+                    throw new MetaMethodInvokeException(method, methodArgs, -1, e.getMessage(), e.getCause());
+                }
+                // TODO ERROR CODE
+                throw new MetaMethodInvokeException(method, methodArgs, -1,
+                        "Invoke method [" + method +"] fail, message:[" + e.getMessage() + "]", e);
+            }
+        }
+        return null;
+    }
+}
diff --git a/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/server/src/main/java/org/apache/linkis/metadatamanager/server/utils/MetadataUtils.java b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/server/src/main/java/org/apache/linkis/metadatamanager/server/utils/MetadataUtils.java
new file mode 100644
index 0000000..59821fd
--- /dev/null
+++ b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/server/src/main/java/org/apache/linkis/metadatamanager/server/utils/MetadataUtils.java
@@ -0,0 +1,157 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.linkis.metadatamanager.server.utils;
+
+import org.apache.linkis.metadatamanager.common.exception.MetaRuntimeException;
+import org.apache.linkis.metadatamanager.common.service.MetadataService;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.File;
+import java.io.IOException;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Modifier;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.util.*;
+import java.util.function.Function;
+import java.util.jar.JarEntry;
+import java.util.jar.JarFile;
+import java.util.stream.Collectors;
+
+/**
+ * Metadata Utils
+ */
+public class MetadataUtils {
+
+    private static final String JAR_SUF_NAME = ".jar";
+
+    private static final String CLASS_SUF_NAME = ".class";
+
+    private static final Logger LOG = LoggerFactory.getLogger(MetadataUtils.class);
+
+    public static MetadataService loadMetaService(Class<? extends MetadataService> metaServiceClass,
+                                                  ClassLoader metaServiceClassLoader){
+        ClassLoader storeClassLoader = Thread.currentThread().getContextClassLoader();
+        Thread.currentThread().setContextClassLoader(metaServiceClassLoader);
+        try{
+            final Constructor<?>[] constructors = metaServiceClass.getConstructors();
+            if (constructors.length <= 0){
+                throw new MetaRuntimeException("No public constructor in meta service class: [" + metaServiceClass.getName() + "]", null);
+            }
+            List<Constructor<?>> acceptConstructor = Arrays.stream(constructors)
+                    .filter( constructor -> constructor.getParameterCount() == 0).collect(Collectors.toList());
+            if (acceptConstructor.size() > 0){
+                //Choose the first one
+                Constructor<?> constructor = acceptConstructor.get(0);
+                try {
+                    return (MetadataService)constructor.newInstance();
+                } catch (Exception e) {
+                    throw new MetaRuntimeException("Unable to construct meta service class: [" + metaServiceClass.getName() + "]", e);
+                }
+            }else{
+                throw new MetaRuntimeException("Illegal arguments in constructor of meta service class: [" + metaServiceClass.getName() + "]", null);
+            }
+        }finally{
+            Thread.currentThread().setContextClassLoader(storeClassLoader);
+        }
+    }
+    /**
+     * Search meta service class from classloader
+     * @param serviceClassLoader service class loader
+     * @return collect
+     */
+    public static String[] searchMetaServiceClassInLoader(URLClassLoader serviceClassLoader){
+        URL[] urlsOfClassLoader = serviceClassLoader.getURLs();
+        List<String> classNameList = new ArrayList<>();
+        for( URL url : urlsOfClassLoader ){
+            String pathForUrl = url.getPath();
+             List<String> searchResult = searchMetaServiceClassFormURI(pathForUrl, className -> isSubMetaServiceClass(className, serviceClassLoader));
+             if (Objects.nonNull(searchResult)){
+                 classNameList.addAll(searchResult);
+             }
+        }
+        return classNameList.toArray(new String[]{});
+    }
+
+    public static Class<? extends MetadataService> loadMetaServiceClass(ClassLoader classLoader, String className,
+                                                                        boolean initialize, String notFoundMessage){
+        //Try to load use expectClassName
+        try {
+           return Class.forName(className, initialize, classLoader).asSubclass(MetadataService.class);
+        }catch(ClassNotFoundException ne){
+            LOG.warn(notFoundMessage, ne);
+        }
+        return null;
+    }
+
+    private static List<String> searchMetaServiceClassFormURI(String url, Function<String, Boolean> acceptedFunction){
+        List<String> classNameList = new ArrayList<>();
+        if(url.endsWith(CLASS_SUF_NAME)){
+            String className = url.substring(0, url.lastIndexOf(CLASS_SUF_NAME));
+            int splitIndex = className.lastIndexOf(IOUtils.DIR_SEPARATOR);
+            if(splitIndex >= 0){
+                className = className.substring(splitIndex);
+            }
+            if (acceptedFunction.apply(className)){
+                classNameList.add(className);
+            }
+        }else if(url.endsWith(JAR_SUF_NAME)){
+            try {
+                JarFile jarFile = new JarFile(new File(url));
+                Enumeration<JarEntry> en = jarFile.entries();
+                while(en.hasMoreElements()){
+                    String name = en.nextElement().getName();
+                    if(name.endsWith(CLASS_SUF_NAME)){
+                        String className = name.substring(0, name.lastIndexOf(CLASS_SUF_NAME));
+                        //If the splicer is different in WINDOWS system?
+                        className = className.replaceAll(String.valueOf(IOUtils.DIR_SEPARATOR_UNIX), ".");
+                        if(acceptedFunction.apply(className)){
+                           classNameList.add(className);
+                        }
+                    }
+                }
+            } catch (IOException e) {
+                //Trace
+                LOG.trace("Fail to parse jar file:[" + url + "] in service classpath", e);
+                return classNameList;
+            }
+        }
+        return classNameList;
+    }
+
+    private static boolean isSubMetaServiceClass(String className, ClassLoader serviceClassLoader){
+        if(StringUtils.isEmpty(className)){
+            return false;
+        }
+        Class<?> clazz;
+        try{
+            clazz = Class.forName(className, false, serviceClassLoader);
+            //Skip interface and abstract class
+            if (Modifier.isAbstract(clazz.getModifiers()) || Modifier.isInterface(clazz.getModifiers())) {
+                return false;
+            }
+        } catch (Throwable t){
+            LOG.trace("Class: {} can not be found", className, t);
+            return false;
+        }
+        return MetadataService.class.isAssignableFrom(clazz);
+    }
+}
diff --git a/linkis-public-enhancements/linkis-datasource/metadatamanager/service/elasticsearch/pom.xml b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/service/elasticsearch/pom.xml
similarity index 95%
rename from linkis-public-enhancements/linkis-datasource/metadatamanager/service/elasticsearch/pom.xml
rename to linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/service/elasticsearch/pom.xml
index fd5a022..da00b33 100644
--- a/linkis-public-enhancements/linkis-datasource/metadatamanager/service/elasticsearch/pom.xml
+++ b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/service/elasticsearch/pom.xml
@@ -25,7 +25,7 @@
     </parent>
   <modelVersion>4.0.0</modelVersion>
 
-  <artifactId>linkis-metadatamanager-service-es</artifactId>
+  <artifactId>linkis-metadata-manager-service-es</artifactId>
   <properties>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     <es.version>6.7.1</es.version>
@@ -34,8 +34,9 @@
   <dependencies>
     <dependency>
       <groupId>org.apache.linkis</groupId>
-      <artifactId>linkis-metadatamanager-common</artifactId>
+      <artifactId>linkis-metadata-manager-common</artifactId>
       <version>${linkis.version}</version>
+      <scope>provided</scope>
     </dependency>
     <dependency>
       <groupId>org.apache.linkis</groupId>
@@ -47,6 +48,7 @@
           <groupId>org.ow2.asm</groupId>
         </exclusion>
       </exclusions>
+      <scope>provided</scope>
     </dependency>
     <dependency>
       <groupId>org.elasticsearch.client</groupId>
diff --git a/linkis-public-enhancements/linkis-datasource/metadatamanager/service/elasticsearch/src/main/assembly/distribution.xml b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/service/elasticsearch/src/main/assembly/distribution.xml
similarity index 95%
rename from linkis-public-enhancements/linkis-datasource/metadatamanager/service/elasticsearch/src/main/assembly/distribution.xml
rename to linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/service/elasticsearch/src/main/assembly/distribution.xml
index f99342b..6cadbde 100644
--- a/linkis-public-enhancements/linkis-datasource/metadatamanager/service/elasticsearch/src/main/assembly/distribution.xml
+++ b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/service/elasticsearch/src/main/assembly/distribution.xml
@@ -19,13 +19,13 @@
         xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/2.3"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/2.3 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
-    <id>linkis-mdm-service-es</id>
+    <id>linkis-metadata-manager-service-es</id>
     <formats>
         <format>zip</format>
         <format>dir</format>
     </formats>
     <includeBaseDirectory>false</includeBaseDirectory>
-    <baseDirectory>linkis-mdm-service-es</baseDirectory>
+    <baseDirectory>linkis-metadata-manager-service-es</baseDirectory>
 
     <dependencySets>
         <dependencySet>
diff --git a/linkis-public-enhancements/linkis-datasource/metadatamanager/service/elasticsearch/src/main/java/org/apache/linkis/metadatamanager/service/ElasticConnection.java b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/service/elasticsearch/src/main/java/org/apache/linkis/metadatamanager/service/ElasticConnection.java
similarity index 96%
rename from linkis-public-enhancements/linkis-datasource/metadatamanager/service/elasticsearch/src/main/java/org/apache/linkis/metadatamanager/service/ElasticConnection.java
rename to linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/service/elasticsearch/src/main/java/org/apache/linkis/metadatamanager/service/ElasticConnection.java
index ca65d68..c02cd4c 100644
--- a/linkis-public-enhancements/linkis-datasource/metadatamanager/service/elasticsearch/src/main/java/org/apache/linkis/metadatamanager/service/ElasticConnection.java
+++ b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/service/elasticsearch/src/main/java/org/apache/linkis/metadatamanager/service/ElasticConnection.java
@@ -17,7 +17,7 @@
  
 package org.apache.linkis.metadatamanager.service;
 
-import org.apache.linkis.metadatamanager.common.Json;
+import org.apache.linkis.datasourcemanager.common.util.json.Json;
 import org.apache.commons.lang.StringUtils;
 import org.apache.http.HttpHost;
 import org.apache.http.auth.AuthScope;
@@ -73,7 +73,7 @@ public class ElasticConnection implements Closeable {
         ping();
     }
 
-    public List<String> getAllIndices() throws IOException {
+    public List<String> getAllIndices() throws Exception {
         List<String> indices = new ArrayList<>();
         Request request = new Request("GET", "_cat/indices");
         request.addParameter("format", "JSON");
@@ -88,7 +88,7 @@ public class ElasticConnection implements Closeable {
         return indices;
     }
 
-    public List<String> getTypes(String index) throws IOException{
+    public List<String> getTypes(String index) throws Exception{
         List<String> types = new ArrayList<>();
         Request request = new Request("GET", index +"/_mappings");
         Response response = restClient.performRequest(request);
@@ -105,7 +105,7 @@ public class ElasticConnection implements Closeable {
         return types;
     }
 
-    public Map<Object, Object> getProps(String index, String type) throws IOException{
+    public Map<Object, Object> getProps(String index, String type) throws Exception{
         Request request = new Request("GET", index + "/_mappings/" + type);
         Response response = restClient.performRequest(request);
         Map<String, Map<String, Object>> result =
diff --git a/linkis-public-enhancements/linkis-datasource/metadatamanager/service/elasticsearch/src/main/java/org/apache/linkis/metadatamanager/service/ElasticParamsMapper.java b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/service/elasticsearch/src/main/java/org/apache/linkis/metadatamanager/service/ElasticParamsMapper.java
similarity index 100%
rename from linkis-public-enhancements/linkis-datasource/metadatamanager/service/elasticsearch/src/main/java/org/apache/linkis/metadatamanager/service/ElasticParamsMapper.java
rename to linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/service/elasticsearch/src/main/java/org/apache/linkis/metadatamanager/service/ElasticParamsMapper.java
diff --git a/linkis-public-enhancements/linkis-datasource/metadatamanager/service/elasticsearch/src/main/java/org/apache/linkis/metadatamanager/service/ElasticMetaService.java b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/service/elasticsearch/src/main/java/org/apache/linkis/metadatamanager/service/EsMetaService.java
similarity index 96%
rename from linkis-public-enhancements/linkis-datasource/metadatamanager/service/elasticsearch/src/main/java/org/apache/linkis/metadatamanager/service/ElasticMetaService.java
rename to linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/service/elasticsearch/src/main/java/org/apache/linkis/metadatamanager/service/EsMetaService.java
index 92cbea2..80d8d3a 100644
--- a/linkis-public-enhancements/linkis-datasource/metadatamanager/service/elasticsearch/src/main/java/org/apache/linkis/metadatamanager/service/ElasticMetaService.java
+++ b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/service/elasticsearch/src/main/java/org/apache/linkis/metadatamanager/service/EsMetaService.java
@@ -17,7 +17,7 @@
  
 package org.apache.linkis.metadatamanager.service;
 
-import org.apache.linkis.metadatamanager.common.Json;
+import org.apache.linkis.datasourcemanager.common.util.json.Json;
 import org.apache.linkis.metadatamanager.common.domain.MetaColumnInfo;
 import org.apache.linkis.metadatamanager.common.service.AbstractMetaService;
 import org.apache.linkis.metadatamanager.common.service.MetadataConnection;
@@ -28,7 +28,7 @@ import java.util.Map;
 import java.util.stream.Collectors;
 
 @Component
-public class ElasticMetaService extends AbstractMetaService<ElasticConnection> {
+public class EsMetaService extends AbstractMetaService<ElasticConnection> {
     @Override
     public MetadataConnection<ElasticConnection> getConnection(String operator, Map<String, Object> params)
             throws Exception{
diff --git a/linkis-public-enhancements/linkis-datasource/metadatamanager/service/hive/pom.xml b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/service/hive/pom.xml
similarity index 59%
rename from linkis-public-enhancements/linkis-datasource/metadatamanager/service/hive/pom.xml
rename to linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/service/hive/pom.xml
index a6e93bc..83d9a42 100644
--- a/linkis-public-enhancements/linkis-datasource/metadatamanager/service/hive/pom.xml
+++ b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/service/hive/pom.xml
@@ -24,29 +24,40 @@
         <version>1.0.3</version>
     </parent>
   <modelVersion>4.0.0</modelVersion>
-  <artifactId>linkis-metadatamanager-service-hive</artifactId>
+  <artifactId>linkis-metadata-manager-service-hive</artifactId>
 
   <properties>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-    <hive.version>1.2.1</hive.version>
+    <hive.version>2.3.3</hive.version>
+<!--    <hive.version>1.2.1</hive.version>-->
     <hadoop.version>2.7.2</hadoop.version>
+    <datanucleus-api-jdo.version>4.2.4</datanucleus-api-jdo.version>
   </properties>
 
   <dependencies>
     <dependency>
       <groupId>org.apache.linkis</groupId>
-      <artifactId>linkis-metadatamanager-common</artifactId>
+      <artifactId>linkis-metadata-manager-common</artifactId>
       <version>${linkis.version}</version>
+      <scope>provided</scope>
     </dependency>
     <dependency>
       <groupId>org.apache.linkis</groupId>
       <artifactId>linkis-module</artifactId>
       <version>${linkis.version}</version>
+      <scope>provided</scope>
     </dependency>
     <!--Hive dependencies-->
     <dependency>
+      <groupId>org.datanucleus</groupId>
+      <artifactId>datanucleus-api-jdo</artifactId>
+      <version>${datanucleus-api-jdo.version}</version>
+    </dependency>
+    <dependency>
       <groupId>org.apache.hadoop</groupId>
       <artifactId>hadoop-client</artifactId>
+      <!-- use local version of hadoop -->
+      <scope>provided</scope>
       <version>${hadoop.version}</version>
       <exclusions>
         <exclusion>
@@ -64,6 +75,60 @@
       </exclusions>
     </dependency>
     <dependency>
+      <groupId>org.apache.hadoop</groupId>
+      <artifactId>hadoop-mapreduce-client-core</artifactId>
+      <version>${hadoop.version}</version>
+      <exclusions>
+        <exclusion>
+          <artifactId>hadoop-yarn-common</artifactId>
+          <groupId>org.apache.hadoop</groupId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.hive</groupId>
+      <artifactId>hive-common</artifactId>
+      <version>${hive.version}</version>
+      <exclusions>
+        <exclusion>
+          <groupId>org.apache.hadoop</groupId>
+          <artifactId>hadoop-yarn-server-resourcemanager</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>org.apache.curator</groupId>
+          <artifactId>curator-framework</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>org.apache.hadoop</groupId>
+          <artifactId>hadoop-yarn-server-applicationhistoryservice</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>org.apache.hive</groupId>
+          <artifactId>hive-shims</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>org.slf4j</groupId>
+          <artifactId>slf4j-log4j12</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>org.slf4j</groupId>
+          <artifactId>slf4j-api</artifactId>
+        </exclusion>
+        <exclusion>
+          <artifactId>jsr311-api</artifactId>
+          <groupId>javax.ws.rs</groupId>
+        </exclusion>
+        <exclusion>
+          <artifactId>hadoop-common</artifactId>
+          <groupId>org.apache.hadoop</groupId>
+        </exclusion>
+        <exclusion>
+          <artifactId>dropwizard-metrics-hadoop-metrics2-reporter</artifactId>
+          <groupId>com.github.joshelser</groupId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <dependency>
       <groupId>org.apache.hive</groupId>
       <artifactId>hive-exec</artifactId>
       <version>${hive.version}</version>
@@ -84,6 +149,30 @@
           <artifactId>commons-lang3</artifactId>
           <groupId>org.apache.commons</groupId>
         </exclusion>
+        <exclusion>
+          <artifactId>hadoop-yarn-api</artifactId>
+          <groupId>org.apache.hadoop</groupId>
+        </exclusion>
+        <exclusion>
+          <artifactId>hadoop-yarn-common</artifactId>
+          <groupId>org.apache.hadoop</groupId>
+        </exclusion>
+        <exclusion>
+          <artifactId>hadoop-yarn-server-applicationhistoryservice</artifactId>
+          <groupId>org.apache.hadoop</groupId>
+        </exclusion>
+        <exclusion>
+          <artifactId>hadoop-yarn-server-common</artifactId>
+          <groupId>org.apache.hadoop</groupId>
+        </exclusion>
+        <exclusion>
+          <artifactId>hadoop-yarn-server-resourcemanager</artifactId>
+          <groupId>org.apache.hadoop</groupId>
+        </exclusion>
+        <exclusion>
+          <artifactId>hadoop-yarn-server-web-proxy</artifactId>
+          <groupId>org.apache.hadoop</groupId>
+        </exclusion>
       </exclusions>
     </dependency>
     <!--bml client-->
@@ -91,6 +180,12 @@
       <groupId>org.apache.linkis</groupId>
       <artifactId>linkis-bml-client</artifactId>
       <version>${linkis.version}</version>
+      <exclusions>
+        <exclusion>
+          <artifactId>linkis-httpclient</artifactId>
+          <groupId>com.webank.wedatasphere.linkis</groupId>
+        </exclusion>
+      </exclusions>
     </dependency>
 
     <dependency>
@@ -136,7 +231,7 @@
         </executions>
         <configuration>
           <skipAssembly>false</skipAssembly>
-          <finalName>linkis-mdm-service-hive</finalName>
+          <finalName>out</finalName>
           <appendAssemblyId>false</appendAssemblyId>
           <attach>false</attach>
           <descriptors>
diff --git a/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/service/hive/src/main/assembly/distribution.xml b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/service/hive/src/main/assembly/distribution.xml
new file mode 100644
index 0000000..17d3efc
--- /dev/null
+++ b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/service/hive/src/main/assembly/distribution.xml
@@ -0,0 +1,238 @@
+  <!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~   http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+
+<assembly
+        xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/2.3"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/2.3 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
+    <id>linkis-metadata-manager-service-hive</id>
+    <formats>
+        <format>zip</format>
+        <format>dir</format>
+    </formats>
+    <includeBaseDirectory>false</includeBaseDirectory>
+    <baseDirectory>linkis-metadata-manager-service-hive</baseDirectory>
+
+    <dependencySets>
+        <dependencySet>
+            <!-- Enable access to all projects in the current multimodule build! <useAllReactorProjects>true</useAllReactorProjects> -->
+            <!-- Now, select which projects to include in this module-set. -->
+            <outputDirectory>lib</outputDirectory>
+            <useProjectArtifact>true</useProjectArtifact>
+            <useTransitiveDependencies>true</useTransitiveDependencies>
+            <unpack>false</unpack>
+            <useStrictFiltering>false</useStrictFiltering>
+            <useTransitiveFiltering>true</useTransitiveFiltering>
+            <excludes>
+                <exclude>antlr:antlr:jar</exclude>
+                <exclude>asm:asm:jar</exclude>
+                <exclude>cglib:cglib:jar</exclude>
+                <exclude>com.amazonaws:aws-java-sdk-autoscaling:jar</exclude>
+                <exclude>com.amazonaws:aws-java-sdk-core:jar</exclude>
+                <exclude>com.amazonaws:aws-java-sdk-ec2:jar</exclude>
+                <exclude>com.amazonaws:aws-java-sdk-route53:jar</exclude>
+                <exclude>com.amazonaws:aws-java-sdk-sts:jar</exclude>
+                <exclude>com.amazonaws:jmespath-java:jar</exclude>
+                <exclude>com.fasterxml.jackson.core:jackson-annotations:jar</exclude>
+                <exclude>com.fasterxml.jackson.core:jackson-core:jar</exclude>
+                <exclude>com.fasterxml.jackson.core:jackson-databind:jar</exclude>
+                <exclude>com.fasterxml.jackson.dataformat:jackson-dataformat-cbor:jar</exclude>
+                <exclude>com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar</exclude>
+                <exclude>com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar</exclude>
+                <exclude>com.fasterxml.jackson.jaxrs:jackson-jaxrs-base:jar</exclude>
+                <exclude>com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:jar</exclude>
+                <exclude>com.fasterxml.jackson.module:jackson-module-jaxb-annotations:jar</exclude>
+                <exclude>com.fasterxml.jackson.module:jackson-module-parameter-names:jar</exclude>
+                <exclude>com.fasterxml.jackson.module:jackson-module-paranamer:jar</exclude>
+                <exclude>com.fasterxml.jackson.module:jackson-module-scala_2.11:jar</exclude>
+                <exclude>com.github.andrewoma.dexx:dexx-collections:jar</exclude>
+                <exclude>com.github.vlsi.compactmap:compactmap:jar</exclude>
+                <exclude>com.google.code.findbugs:annotations:jar</exclude>
+                <exclude>com.google.code.gson:gson:jar</exclude>
+                <exclude>com.google.guava:guava:jar</exclude>
+                <exclude>com.google.protobuf:protobuf-java:jar</exclude>
+                <exclude>com.ning:async-http-client:jar</exclude>
+                <exclude>com.sun.jersey.contribs:jersey-apache-client4:jar</exclude>
+                <exclude>com.sun.jersey:jersey-client:jar</exclude>
+                <exclude>com.sun.jersey:jersey-core:jar</exclude>
+                <exclude>com.sun.jersey:jersey-json:jar</exclude>
+                <exclude>com.sun.jersey:jersey-server:jar</exclude>
+                <exclude>com.sun.jersey:jersey-servlet:jar</exclude>
+                <exclude>com.sun.xml.bind:jaxb-impl:jar</exclude>
+                <exclude>commons-beanutils:commons-beanutils:jar</exclude>
+                <exclude>commons-beanutils:commons-beanutils-core:jar</exclude>
+                <exclude>commons-cli:commons-cli:jar</exclude>
+                <exclude>commons-collections:commons-collections:jar</exclude>
+                <exclude>commons-configuration:commons-configuration:jar</exclude>
+                <exclude>commons-dbcp:commons-dbcp:jar</exclude>
+                <exclude>commons-digester:commons-digester:jar</exclude>
+                <exclude>commons-io:commons-io:jar</exclude>
+                <exclude>commons-logging:commons-logging:jar</exclude>
+                <exclude>commons-jxpath:commons-jxpath:jar</exclude>
+                <exclude>commons-lang:commons-lang:jar</exclude>
+                <exclude>commons-net:commons-net:jar</exclude>
+                <exclude>commons-pool:commons-pool:jar</exclude>
+                <exclude>io.micrometer:micrometer-core:jar</exclude>
+                <exclude>io.netty:netty-all:jar</exclude>
+                <exclude>io.netty:netty-buffer:jar</exclude>
+                <exclude>io.netty:netty-codec:jar</exclude>
+                <exclude>io.netty:netty-codec-http:jar</exclude>
+                <exclude>io.netty:netty-common:jar</exclude>
+                <exclude>io.netty:netty-handler:jar</exclude>
+                <exclude>io.netty:netty-transport:jar</exclude>
+                <exclude>io.netty:netty-transport-native-epoll:jar</exclude>
+                <exclude>io.reactivex:rxjava:jar</exclude>
+                <exclude>io.reactivex:rxnetty:jar</exclude>
+                <exclude>io.reactivex:rxnetty-contexts:jar</exclude>
+                <exclude>io.reactivex:rxnetty-servo:jar</exclude>
+                <exclude>javax.activation:activation:jar</exclude>
+                <exclude>javax.annotation:javax.annotation-api:jar</exclude>
+                <exclude>javax.inject:javax.inject:jar</exclude>
+                <exclude>javax.servlet:javax.servlet-api:jar</exclude>
+                <exclude>javax.servlet.jsp:jsp-api:jar</exclude>
+                <exclude>javax.validation:validation-api:jar</exclude>
+                <exclude>javax.websocket:javax.websocket-api:jar</exclude>
+                <exclude>javax.ws.rs:javax.ws.rs-api:jar</exclude>
+                <exclude>javax.xml.bind:jaxb-api:jar</exclude>
+                <exclude>javax.xml.stream:stax-api:jar</exclude>
+                <exclude>mysql:mysql-connector-java:jar</exclude>
+                <exclude>org.antlr:antlr-runtime:jar</exclude>
+                <exclude>org.antlr:stringtemplate:jar</exclude>
+                <exclude>org.apache.commons:commons-compress:jar</exclude>
+                <exclude>org.apache.commons:commons-math:jar</exclude>
+                <exclude>org.apache.commons:commons-math3:jar</exclude>
+                <exclude>org.apache.curator:curator-framework:jar</exclude>
+                <exclude>org.apache.curator:curator-recipes:jar</exclude>
+                <exclude>org.apache.directory.api:api-asn1-api:jar</exclude>
+                <exclude>org.apache.directory.api:api-util:jar</exclude>
+                <exclude>org.apache.directory.server:apacheds-i18n:jar</exclude>
+                <exclude>org.apache.directory.server:apacheds-kerberos-codec:jar</exclude>
+                <exclude>org.apache.hadoop:hadoop-annotations:jar</exclude>
+                <exclude>org.apache.hadoop:hadoop-auth:jar</exclude>
+                <exclude>org.apache.hadoop:hadoop-common:jar</exclude>
+                <exclude>org.apache.hadoop:hadoop-hdfs:jar</exclude>
+                <exclude>org.apache.htrace:htrace-core:jar</exclude>
+                <exclude>org.apache.logging.log4j:log4j-api:jar</exclude>
+                <exclude>org.apache.logging.log4j:log4j-core:jar</exclude>
+                <exclude>org.apache.logging.log4j:log4j-jul:jar</exclude>
+                <exclude>org.apache.logging.log4j:log4j-slf4j-impl:jar</exclude>
+                <exclude>log4j:log4j:jar</exclude>
+                <exclude>org.apache.zookeeper:zookeeper:jar</exclude>
+                <exclude>org.aspectj:aspectjweaver:jar</exclude>
+                <exclude>org.bouncycastle:bcpkix-jdk15on:jar</exclude>
+                <exclude>org.bouncycastle:bcprov-jdk15on:jar</exclude>
+                <exclude>org.codehaus.jackson:jackson-jaxrs:jar</exclude>
+                <exclude>org.codehaus.jackson:jackson-xc:jar</exclude>
+                <exclude>org.codehaus.jettison:jettison:jar</exclude>
+                <exclude>org.codehaus.woodstox:stax2-api:jar</exclude>
+                <exclude>org.codehaus.woodstox:woodstox-core-asl:jar</exclude>
+                <exclude>org.eclipse.jetty:jetty-annotations:jar</exclude>
+                <exclude>org.eclipse.jetty:jetty-client:jar</exclude>
+                <exclude>org.eclipse.jetty:jetty-continuation:jar</exclude>
+                <exclude>org.eclipse.jetty:jetty-http:jar</exclude>
+                <exclude>org.eclipse.jetty:jetty-io:jar</exclude>
+                <exclude>org.eclipse.jetty:jetty-jndi:jar</exclude>
+                <exclude>org.eclipse.jetty:jetty-plus:jar</exclude>
+                <exclude>org.eclipse.jetty:jetty-security:jar</exclude>
+                <exclude>org.eclipse.jetty:jetty-server:jar</exclude>
+                <exclude>org.eclipse.jetty:jetty-servlet:jar</exclude>
+                <exclude>org.eclipse.jetty:jetty-servlets:jar</exclude>
+                <exclude>org.eclipse.jetty:jetty-util:jar</exclude>
+                <exclude>org.eclipse.jetty:jetty-webapp:jar</exclude>
+                <exclude>org.eclipse.jetty:jetty-xml:jar</exclude>
+                <exclude>org.eclipse.jetty.websocket:javax-websocket-client-impl:jar</exclude>
+                <exclude>org.eclipse.jetty.websocket:javax-websocket-server-impl:jar</exclude>
+                <exclude>org.eclipse.jetty.websocket:websocket-api:jar</exclude>
+                <exclude>org.eclipse.jetty.websocket:websocket-client:jar</exclude>
+                <exclude>org.eclipse.jetty.websocket:websocket-common:jar</exclude>
+                <exclude>org.eclipse.jetty.websocket:websocket-server:jar</exclude>
+                <exclude>org.eclipse.jetty.websocket:websocket-servlet:jar</exclude>
+                <exclude>org.eclipse.jetty.orbit:javax.servlet:jar</exclude>
+                <exclude>org.eclipse.jetty.aggregate:jetty-all:jar</exclude>
+                <exclude>org.fusesource.leveldbjni:leveldbjni-all:jar</exclude>
+                <exclude>org.glassfish.hk2:class-model:jar</exclude>
+                <exclude>org.glassfish.hk2:config-types:jar</exclude>
+                <exclude>org.glassfish.hk2.external:aopalliance-repackaged:jar</exclude>
+                <exclude>org.glassfish.hk2.external:asm-all-repackaged:jar</exclude>
+                <exclude>org.glassfish.hk2.external:bean-validator:jar</exclude>
+                <exclude>org.glassfish.hk2.external:javax.inject:jar</exclude>
+                <exclude>org.glassfish.hk2:hk2:jar</exclude>
+                <exclude>org.glassfish.hk2:hk2-api:jar</exclude>
+                <exclude>org.glassfish.hk2:hk2-config:jar</exclude>
+                <exclude>org.glassfish.hk2:hk2-core:jar</exclude>
+                <exclude>org.glassfish.hk2:hk2-locator:jar</exclude>
+                <exclude>org.glassfish.hk2:hk2-runlevel:jar</exclude>
+                <exclude>org.glassfish.hk2:hk2-utils:jar</exclude>
+                <exclude>org.glassfish.hk2:osgi-resource-locator:jar</exclude>
+                <exclude>org.glassfish.hk2:spring-bridge:jar</exclude>
+                <exclude>org.glassfish.jersey.bundles:jaxrs-ri:jar</exclude>
+                <exclude>org.glassfish.jersey.bundles.repackaged:jersey-guava:jar</exclude>
+                <exclude>org.glassfish.jersey.containers:jersey-container-servlet:jar</exclude>
+                <exclude>org.glassfish.jersey.containers:jersey-container-servlet-core:jar</exclude>
+                <exclude>org.glassfish.jersey.core:jersey-client:jar</exclude>
+                <exclude>org.glassfish.jersey.core:jersey-common:jar</exclude>
+                <exclude>org.glassfish.jersey.core:jersey-server:jar</exclude>
+                <exclude>org.glassfish.jersey.ext:jersey-entity-filtering:jar</exclude>
+                <exclude>org.glassfish.jersey.ext:jersey-spring3:jar</exclude>
+                <exclude>org.glassfish.jersey.media:jersey-media-jaxb:jar</exclude>
+                <exclude>org.glassfish.jersey.media:jersey-media-json-jackson:jar</exclude>
+                <exclude>org.glassfish.jersey.media:jersey-media-multipart:jar</exclude>
+                <exclude>org.hdrhistogram:HdrHistogram:jar</exclude>
+                <exclude>org.javassist:javassist:jar</exclude>
+                <exclude>org.json4s:json4s-ast_2.11:jar</exclude>
+                <exclude>org.json4s:json4s-core_2.11:jar</exclude>
+                <exclude>org.json4s:json4s-jackson_2.11:jar</exclude>
+                <exclude>org.jsoup:jsoup:jar</exclude>
+                <exclude>org.jvnet.mimepull:mimepull:jar</exclude>
+                <exclude>org.jvnet:tiger-types:jar</exclude>
+                <exclude>org.latencyutils:LatencyUtils:jar</exclude>
+                <exclude>org.mortbay.jasper:apache-el:jar</exclude>
+                <exclude>org.mortbay.jetty:jetty-util:jar</exclude>
+                <exclude>org.mortbay.jetty:jetty:jar</exclude>
+                <exclude>tomcat:jasper-compiler:jar</exclude>
+                <exclude>tomcat:jasper-runtime:jar</exclude>
+                <exclude>org.ow2.asm:asm-analysis:jar</exclude>
+                <exclude>org.ow2.asm:asm-commons:jar</exclude>
+                <exclude>org.ow2.asm:asm-tree:jar</exclude>
+                <exclude>org.reflections:reflections:jar</exclude>
+                <exclude>org.slf4j:jul-to-slf4j:jar</exclude>
+                <exclude>org.slf4j:slf4j-api:jar</exclude>
+                <exclude>org.tukaani:xz:jar</exclude>
+                <exclude>org.yaml:snakeyaml:jar</exclude>
+                <exclude>software.amazon.ion:ion-java:jar</exclude>
+                <exclude>xerces:xercesImpl:jar</exclude>
+                <exclude>xmlenc:xmlenc:jar</exclude>
+                <exclude>xmlpull:xmlpull:jar</exclude>
+                <exclude>xpp3:xpp3_min:jar</exclude>
+            </excludes>
+        </dependencySet>
+    </dependencySets>
+
+    <fileSets>
+        <fileSet>
+            <directory>${basedir}/src/main/resources</directory>
+            <includes>
+                <include>*</include>
+            </includes>
+            <fileMode>0777</fileMode>
+            <outputDirectory>conf</outputDirectory>
+            <lineEnding>unix</lineEnding>
+        </fileSet>
+    </fileSets>
+
+</assembly>
+
diff --git a/linkis-public-enhancements/linkis-datasource/metadatamanager/service/hive/src/main/java/org/apache/linkis/metadatamanager/service/HiveConnection.java b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/service/hive/src/main/java/org/apache/linkis/metadatamanager/service/HiveConnection.java
similarity index 95%
rename from linkis-public-enhancements/linkis-datasource/metadatamanager/service/hive/src/main/java/org/apache/linkis/metadatamanager/service/HiveConnection.java
rename to linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/service/hive/src/main/java/org/apache/linkis/metadatamanager/service/HiveConnection.java
index 6ba9ced..89321a9 100644
--- a/linkis-public-enhancements/linkis-datasource/metadatamanager/service/hive/src/main/java/org/apache/linkis/metadatamanager/service/HiveConnection.java
+++ b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/service/hive/src/main/java/org/apache/linkis/metadatamanager/service/HiveConnection.java
@@ -29,6 +29,7 @@ import java.io.Closeable;
 import java.io.IOException;
 import java.net.URI;
 import java.security.PrivilegedExceptionAction;
+import java.util.Map;
 import java.util.concurrent.locks.ReentrantLock;
 
 import static org.apache.hadoop.fs.FileSystem.FS_DEFAULT_NAME_KEY;
@@ -54,7 +55,7 @@ public class HiveConnection implements Closeable {
         }
     }
 
-    public HiveConnection(String uris, String principle, String keytabFilePath) throws Exception {
+    public HiveConnection(String uris, String principle, String keytabFilePath, Map<String, String> hadoopConf) throws Exception {
         final HiveConf conf = new HiveConf();
         conf.setVar(HiveConf.ConfVars.METASTOREURIS, uris);
         conf.setVar(HiveConf.ConfVars.METASTORE_USE_THRIFT_SASL, "true");
@@ -62,15 +63,17 @@ public class HiveConnection implements Closeable {
         //Disable the cache in FileSystem
         conf.setBoolean(String.format("fs.%s.impl.disable.cache", URI.create(conf.get(FS_DEFAULT_NAME_KEY, "")).getScheme()), true);
         conf.set("hadoop.security.authentication", "kerberos");
+        hadoopConf.forEach(conf::set);
         principle = principle.substring(0, principle.indexOf("@"));
         UserGroupInformation ugi = UserGroupInformationWrapper.loginUserFromKeytab(conf,
                 principle, keytabFilePath);
         hiveClient = getHive(ugi, conf);
     }
 
-    public HiveConnection(String uris) throws Exception{
+    public HiveConnection(String uris, Map<String, String> hadoopConf) throws Exception{
         final HiveConf conf = new HiveConf();
         conf.setVar(HiveConf.ConfVars.METASTOREURIS, uris);
+        hadoopConf.forEach(conf::set);
         //Disable the cache in FileSystem
         conf.setBoolean(String.format("fs.%s.impl.disable.cache", URI.create(conf.get(FS_DEFAULT_NAME_KEY, "")).getScheme()), true);
         //TODO choose an authentication strategy for hive, and then use createProxyUser
diff --git a/linkis-public-enhancements/linkis-datasource/metadatamanager/service/hive/src/main/java/org/apache/linkis/metadatamanager/service/HiveMetaService.java b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/service/hive/src/main/java/org/apache/linkis/metadatamanager/service/HiveMetaService.java
similarity index 88%
rename from linkis-public-enhancements/linkis-datasource/metadatamanager/service/hive/src/main/java/org/apache/linkis/metadatamanager/service/HiveMetaService.java
rename to linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/service/hive/src/main/java/org/apache/linkis/metadatamanager/service/HiveMetaService.java
index 1d22f0d..197f3c4 100644
--- a/linkis-public-enhancements/linkis-datasource/metadatamanager/service/hive/src/main/java/org/apache/linkis/metadatamanager/service/HiveMetaService.java
+++ b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/service/hive/src/main/java/org/apache/linkis/metadatamanager/service/HiveMetaService.java
@@ -21,6 +21,7 @@ import org.apache.linkis.bml.client.BmlClient;
 import org.apache.linkis.bml.client.BmlClientFactory;
 import org.apache.linkis.bml.protocol.BmlDownloadResponse;
 import org.apache.linkis.common.conf.CommonVars;
+import org.apache.linkis.datasourcemanager.common.util.json.Json;
 import org.apache.linkis.metadatamanager.common.domain.MetaColumnInfo;
 import org.apache.linkis.metadatamanager.common.domain.MetaPartitionInfo;
 import org.apache.linkis.metadatamanager.common.exception.MetaRuntimeException;
@@ -69,14 +70,14 @@ public class HiveMetaService extends AbstractMetaService<HiveConnection> {
                 LOG.info("Start to download resource id:[" + keytabResourceId +"]");
                 String keytabFilePath = resource.getFile().getAbsolutePath() + "/" + UUID.randomUUID().toString().replace("-", "");
                 if(!downloadResource(keytabResourceId, operator, keytabFilePath)){
-                    throw new MetaRuntimeException("Fail to download resource i:[" + keytabResourceId +"]");
+                    throw new MetaRuntimeException("Fail to download resource i:[" + keytabResourceId +"]", null);
                 }
-                conn = new HiveConnection(uris, principle, keytabFilePath);
+                conn = new HiveConnection(uris, principle, keytabFilePath, getExtraHadoopConf(params));
             }else{
-                throw new MetaRuntimeException("Cannot find the keytab file in connect parameters");
+                throw new MetaRuntimeException("Cannot find the keytab file in connect parameters", null);
             }
         }else{
-            conn = new HiveConnection(uris);
+            conn = new HiveConnection(uris, getExtraHadoopConf(params));
         }
         return new MetadataConnection<>(conn, true);
     }
@@ -194,4 +195,23 @@ public class HiveMetaService extends AbstractMetaService<HiveConnection> {
             throw new RuntimeException("Fail to get Hive table properties(获取表参数信息失败)", e);
         }
     }
+
+    @SuppressWarnings("unchecked")
+    private Map<String, String> getExtraHadoopConf(Map<String, Object> connectParams){
+        Map<String, String> extraHadoopConf = new HashMap<>();
+        Object extraHadoopConfObj = connectParams.get(HiveParamsMapper.PARAM_HADOOP_CONF.getValue());
+        if (Objects.nonNull(extraHadoopConfObj)){
+            try {
+                if (!(extraHadoopConfObj instanceof Map)) {
+                    extraHadoopConf = Json.fromJson(String.valueOf(extraHadoopConfObj), Map.class, String.class, String.class);
+                }else{
+                    extraHadoopConf = (Map<String, String>)extraHadoopConfObj;
+                }
+            }catch(Exception e){
+                throw new MetaRuntimeException("Cannot parse the param:[" +HiveParamsMapper.PARAM_HADOOP_CONF.getValue() + "]", e);
+            }
+        }
+        return extraHadoopConf;
+    }
+
 }
diff --git a/linkis-public-enhancements/linkis-datasource/metadatamanager/service/hive/src/main/java/org/apache/linkis/metadatamanager/service/HiveParamsMapper.java b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/service/hive/src/main/java/org/apache/linkis/metadatamanager/service/HiveParamsMapper.java
similarity index 90%
rename from linkis-public-enhancements/linkis-datasource/metadatamanager/service/hive/src/main/java/org/apache/linkis/metadatamanager/service/HiveParamsMapper.java
rename to linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/service/hive/src/main/java/org/apache/linkis/metadatamanager/service/HiveParamsMapper.java
index 4a04fe2..c556dfb 100644
--- a/linkis-public-enhancements/linkis-datasource/metadatamanager/service/hive/src/main/java/org/apache/linkis/metadatamanager/service/HiveParamsMapper.java
+++ b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/service/hive/src/main/java/org/apache/linkis/metadatamanager/service/HiveParamsMapper.java
@@ -30,4 +30,6 @@ public class HiveParamsMapper {
     public static final CommonVars<String> PARAM_HIVE_KEYTAB =
             CommonVars.apply("wds.linkis.server.mdm.service.hive.keytab", "keytab");
 
+    public static final CommonVars<String> PARAM_HADOOP_CONF =
+            CommonVars.apply("wds.linkis.server.mdm.service.hadoop.conf", "hadoopConf");
 }
diff --git a/linkis-public-enhancements/linkis-datasource/metadatamanager/service/kafka/pom.xml b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/service/kafka/pom.xml
similarity index 93%
rename from linkis-public-enhancements/linkis-datasource/metadatamanager/service/kafka/pom.xml
rename to linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/service/kafka/pom.xml
index 63bcd8e..32fbcf5 100644
--- a/linkis-public-enhancements/linkis-datasource/metadatamanager/service/kafka/pom.xml
+++ b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/service/kafka/pom.xml
@@ -25,7 +25,7 @@
         <version>1.0.3</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
-    <artifactId>linkis-metadatamanager-service-kafka</artifactId>
+    <artifactId>linkis-metadata-manager-service-kafka</artifactId>
 
     <properties>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -34,19 +34,22 @@
     <dependencies>
         <dependency>
             <groupId>org.apache.linkis</groupId>
-            <artifactId>linkis-metadatamanager-common</artifactId>
+            <artifactId>linkis-metadata-manager-common</artifactId>
             <version>${linkis.version}</version>
+            <scope>provided</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.linkis</groupId>
             <artifactId>linkis-module</artifactId>
             <version>${linkis.version}</version>
+            <scope>provided</scope>
         </dependency>
         <!--bml client-->
         <dependency>
             <groupId>org.apache.linkis</groupId>
             <artifactId>linkis-bml-client</artifactId>
             <version>${linkis.version}</version>
+            <scope>provided</scope>
         </dependency>
 
         <dependency>
@@ -54,11 +57,6 @@
             <artifactId>kafka-clients</artifactId>
             <version>2.7.0</version>
         </dependency>
-        <dependency>
-            <groupId>org.apache.linkis</groupId>
-            <artifactId>linkis-module</artifactId>
-            <version>${linkis.version}</version>
-        </dependency>
     </dependencies>
 
     <build>
diff --git a/linkis-public-enhancements/linkis-datasource/metadatamanager/service/kafka/src/main/assembly/distribution.xml b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/service/kafka/src/main/assembly/distribution.xml
similarity index 94%
rename from linkis-public-enhancements/linkis-datasource/metadatamanager/service/kafka/src/main/assembly/distribution.xml
rename to linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/service/kafka/src/main/assembly/distribution.xml
index df243bf..80b6140 100644
--- a/linkis-public-enhancements/linkis-datasource/metadatamanager/service/kafka/src/main/assembly/distribution.xml
+++ b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/service/kafka/src/main/assembly/distribution.xml
@@ -19,13 +19,13 @@
         xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/2.3"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/2.3 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
-    <id>linkis-mdm-service-kafka</id>
+    <id>linkis-metadata-manager-service-kafka</id>
     <formats>
         <format>zip</format>
         <format>dir</format>
     </formats>
     <includeBaseDirectory>false</includeBaseDirectory>
-    <baseDirectory>linkis-mdm-service-kafka</baseDirectory>
+    <baseDirectory>linkis-metadata-manager-service-kafka</baseDirectory>
 
     <dependencySets>
         <dependencySet>
diff --git a/linkis-public-enhancements/linkis-datasource/metadatamanager/service/kafka/src/main/java/org/apache/linkis/metadatamanager/service/KafkaConnection.java b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/service/kafka/src/main/java/org/apache/linkis/metadatamanager/service/KafkaConnection.java
similarity index 100%
rename from linkis-public-enhancements/linkis-datasource/metadatamanager/service/kafka/src/main/java/org/apache/linkis/metadatamanager/service/KafkaConnection.java
rename to linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/service/kafka/src/main/java/org/apache/linkis/metadatamanager/service/KafkaConnection.java
diff --git a/linkis-public-enhancements/linkis-datasource/metadatamanager/service/kafka/src/main/java/org/apache/linkis/metadatamanager/service/KafkaMetaService.java b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/service/kafka/src/main/java/org/apache/linkis/metadatamanager/service/KafkaMetaService.java
similarity index 98%
rename from linkis-public-enhancements/linkis-datasource/metadatamanager/service/kafka/src/main/java/org/apache/linkis/metadatamanager/service/KafkaMetaService.java
rename to linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/service/kafka/src/main/java/org/apache/linkis/metadatamanager/service/KafkaMetaService.java
index cb753ed..4223953 100644
--- a/linkis-public-enhancements/linkis-datasource/metadatamanager/service/kafka/src/main/java/org/apache/linkis/metadatamanager/service/KafkaMetaService.java
+++ b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/service/kafka/src/main/java/org/apache/linkis/metadatamanager/service/KafkaMetaService.java
@@ -68,11 +68,11 @@ public class KafkaMetaService extends AbstractMetaService<KafkaConnection> {
                 LOG.info("Start to download resource id:[" + keytabResourceId +"]");
                 String keytabFilePath = resource.getFile().getAbsolutePath() + "/" + UUID.randomUUID().toString().replace("-", "");
                 if(!downloadResource(keytabResourceId, operator, keytabFilePath)){
-                    throw new MetaRuntimeException("Fail to download resource i:[" + keytabResourceId +"]");
+                    throw new MetaRuntimeException("Fail to download resource i:[" + keytabResourceId +"]", null);
                 }
                 conn = new KafkaConnection(brokers, principle, keytabFilePath);
             }else{
-                throw new MetaRuntimeException("Cannot find the keytab file in connect parameters");
+                throw new MetaRuntimeException("Cannot find the keytab file in connect parameters", null);
             }
         }else{
             conn = new KafkaConnection(brokers);
diff --git a/linkis-public-enhancements/linkis-datasource/metadatamanager/service/kafka/src/main/java/org/apache/linkis/metadatamanager/service/KafkaParamsMapper.java b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/service/kafka/src/main/java/org/apache/linkis/metadatamanager/service/KafkaParamsMapper.java
similarity index 100%
rename from linkis-public-enhancements/linkis-datasource/metadatamanager/service/kafka/src/main/java/org/apache/linkis/metadatamanager/service/KafkaParamsMapper.java
rename to linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/service/kafka/src/main/java/org/apache/linkis/metadatamanager/service/KafkaParamsMapper.java
diff --git a/linkis-public-enhancements/linkis-datasource/metadatamanager/service/mysql/pom.xml b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/service/mysql/pom.xml
similarity index 95%
rename from linkis-public-enhancements/linkis-datasource/metadatamanager/service/mysql/pom.xml
rename to linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/service/mysql/pom.xml
index 59515fb..93fe9a9 100644
--- a/linkis-public-enhancements/linkis-datasource/metadatamanager/service/mysql/pom.xml
+++ b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/service/mysql/pom.xml
@@ -25,7 +25,7 @@
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
-    <artifactId>linkis-metadatamanager-service-mysql</artifactId>
+    <artifactId>linkis-metadata-manager-service-mysql</artifactId>
 
     <properties>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -35,8 +35,9 @@
     <dependencies>
         <dependency>
             <groupId>org.apache.linkis</groupId>
-            <artifactId>linkis-metadatamanager-common</artifactId>
+            <artifactId>linkis-metadata-manager-common</artifactId>
             <version>${linkis.version}</version>
+            <scope>provided</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.linkis</groupId>
@@ -52,6 +53,7 @@
                     <artifactId>mysql-connector-java</artifactId>
                 </exclusion>
             </exclusions>
+            <scope>provided</scope>
         </dependency>
         <dependency>
             <groupId>mysql</groupId>
diff --git a/linkis-public-enhancements/linkis-datasource/metadatamanager/server/src/main/assembly/distribution.xml b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/service/mysql/src/main/assembly/distribution.xml
similarity index 94%
rename from linkis-public-enhancements/linkis-datasource/metadatamanager/server/src/main/assembly/distribution.xml
rename to linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/service/mysql/src/main/assembly/distribution.xml
index b28b3ea..8d48794 100644
--- a/linkis-public-enhancements/linkis-datasource/metadatamanager/server/src/main/assembly/distribution.xml
+++ b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/service/mysql/src/main/assembly/distribution.xml
@@ -19,13 +19,13 @@
         xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/2.3"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/2.3 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
-    <id>linkis-mdm-server</id>
+    <id>linkis-metadata-manager-service-mysql</id>
     <formats>
         <format>zip</format>
         <format>dir</format>
     </formats>
     <includeBaseDirectory>false</includeBaseDirectory>
-    <baseDirectory>linkis-mdm-server</baseDirectory>
+    <baseDirectory>linkis-metadata-manager-service-mysql</baseDirectory>
 
     <dependencySets>
         <dependencySet>
diff --git a/linkis-public-enhancements/linkis-datasource/metadatamanager/service/mysql/src/main/java/org/apache/linkis/metadatamanager/service/SqlMetaService.java b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/service/mysql/src/main/java/org/apache/linkis/metadatamanager/service/MysqlMetaService.java
similarity index 96%
rename from linkis-public-enhancements/linkis-datasource/metadatamanager/service/mysql/src/main/java/org/apache/linkis/metadatamanager/service/SqlMetaService.java
rename to linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/service/mysql/src/main/java/org/apache/linkis/metadatamanager/service/MysqlMetaService.java
index 3b1ba0a..8f7a5cc 100644
--- a/linkis-public-enhancements/linkis-datasource/metadatamanager/service/mysql/src/main/java/org/apache/linkis/metadatamanager/service/SqlMetaService.java
+++ b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/service/mysql/src/main/java/org/apache/linkis/metadatamanager/service/MysqlMetaService.java
@@ -17,7 +17,7 @@
  
 package org.apache.linkis.metadatamanager.service;
 
-import org.apache.linkis.metadatamanager.common.Json;
+import org.apache.linkis.datasourcemanager.common.util.json.Json;
 import org.apache.linkis.metadatamanager.common.domain.MetaColumnInfo;
 import org.apache.linkis.metadatamanager.common.service.AbstractMetaService;
 import org.apache.linkis.metadatamanager.common.service.MetadataConnection;
@@ -29,7 +29,7 @@ import java.util.List;
 import java.util.Map;
 
 @Component
-public class SqlMetaService extends AbstractMetaService<SqlConnection> {
+public class MysqlMetaService extends AbstractMetaService<SqlConnection> {
     @Override
     public MetadataConnection<SqlConnection> getConnection(String operator, Map<String, Object> params) throws Exception {
         String host = String.valueOf(params.getOrDefault(SqlParamsMapper.PARAM_SQL_HOST.getValue(), ""));
diff --git a/linkis-public-enhancements/linkis-datasource/metadatamanager/service/mysql/src/main/java/org/apache/linkis/metadatamanager/service/SqlConnection.java b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/service/mysql/src/main/java/org/apache/linkis/metadatamanager/service/SqlConnection.java
similarity index 94%
rename from linkis-public-enhancements/linkis-datasource/metadatamanager/service/mysql/src/main/java/org/apache/linkis/metadatamanager/service/SqlConnection.java
rename to linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/service/mysql/src/main/java/org/apache/linkis/metadatamanager/service/SqlConnection.java
index 21a5d84..80de35c 100644
--- a/linkis-public-enhancements/linkis-datasource/metadatamanager/service/mysql/src/main/java/org/apache/linkis/metadatamanager/service/SqlConnection.java
+++ b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/service/mysql/src/main/java/org/apache/linkis/metadatamanager/service/SqlConnection.java
@@ -40,6 +40,12 @@ public class SqlConnection implements Closeable {
     private static final CommonVars<String> SQL_CONNECT_URL =
             CommonVars.apply("wds.linkis.server.mdm.service.sql.url", "jdbc:mysql://%s:%s/%s");
 
+    private static final CommonVars<Integer> SQL_CONNECT_TIMEOUT =
+            CommonVars.apply("wds.linkis.server.mdm.service.sql.connect.timeout", 3000);
+
+    private static final CommonVars<Integer> SQL_SOCKET_TIMEOUT =
+            CommonVars.apply("wds.linkis.server.mdm.service.sql.socket.timeout", 6000);
+
     private Connection conn;
 
     private ConnectMessage connectMessage;
@@ -205,6 +211,8 @@ public class SqlConnection implements Closeable {
             this.username = username;
             this.password = password;
             this.extraParams = extraParams;
+            this.extraParams.put("connectTimeout", SQL_CONNECT_TIMEOUT.getValue());
+            this.extraParams.put("socketTimeout", SQL_SOCKET_TIMEOUT.getValue());
         }
     }
 }
diff --git a/linkis-public-enhancements/linkis-datasource/metadatamanager/service/mysql/src/main/java/org/apache/linkis/metadatamanager/service/SqlParamsMapper.java b/linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/service/mysql/src/main/java/org/apache/linkis/metadatamanager/service/SqlParamsMapper.java
similarity index 100%
rename from linkis-public-enhancements/linkis-datasource/metadatamanager/service/mysql/src/main/java/org/apache/linkis/metadatamanager/service/SqlParamsMapper.java
rename to linkis-public-enhancements/linkis-datasource/linkis-metadata-manager/service/mysql/src/main/java/org/apache/linkis/metadatamanager/service/SqlParamsMapper.java
diff --git a/linkis-public-enhancements/linkis-datasource/metadatamanager/common/src/main/java/org/apache/linkis/metadatamanager/common/Json.java b/linkis-public-enhancements/linkis-datasource/metadatamanager/common/src/main/java/org/apache/linkis/metadatamanager/common/Json.java
deleted file mode 100644
index 3840444..0000000
--- a/linkis-public-enhancements/linkis-datasource/metadatamanager/common/src/main/java/org/apache/linkis/metadatamanager/common/Json.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- 
-package org.apache.linkis.metadatamanager.common;
-
-import com.fasterxml.jackson.core.JsonGenerator;
-import com.fasterxml.jackson.core.JsonParser;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.*;
-import org.apache.commons.lang.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.BufferedReader;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.util.ArrayList;
-
-/**
- * Json utils
- */
-public class Json {
-    private static final String PREFIX = "[";
-    private static final String SUFFIX = "]";
-    private static final Logger logger = LoggerFactory.getLogger(Json.class);
-
-    private static ObjectMapper mapper;
-
-    static{
-        mapper = new ObjectMapper();
-        mapper.configure(JsonParser.Feature.ALLOW_COMMENTS, true);
-        mapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
-        mapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);
-        mapper.configure(DeserializationFeature.READ_ENUMS_USING_TO_STRING, true);
-        mapper.configure(SerializationFeature.WRITE_ENUMS_USING_TO_STRING, true);
-        mapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_CONTROL_CHARS, true);
-        //empty beans allowed
-        mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
-        //ignore unknown properties
-        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-        //cancel to scape non ascii
-        mapper.configure(JsonGenerator.Feature.ESCAPE_NON_ASCII, false);
-    }
-    private Json(){}
-
-    @SuppressWarnings("unchecked")
-    public static <T> T fromJson(String json, Class<?> clazz, Class<?>... parameters){
-        if(StringUtils.isNotBlank(json)){
-            try{
-                if(parameters.length > 0){
-                    return (T)mapper.readValue(json, mapper.getTypeFactory().constructParametricType(clazz, parameters));
-                }
-                if(json.startsWith(PREFIX)
-                    && json.endsWith(SUFFIX)){
-                    JavaType javaType = mapper.getTypeFactory()
-                            .constructParametricType(ArrayList.class, clazz);
-                    return mapper.readValue(json, javaType);
-                }
-                return (T)mapper.readValue(json, clazz);
-            } catch (Exception e) {
-                logger.info(e.getLocalizedMessage());
-                throw new RuntimeException(e);
-            }
-        }
-        return null;
-    }
-
-    public static <T> T fromJson(InputStream stream, Class<?> clazz, Class<?>... parameters){
-        StringBuilder builder = new StringBuilder();
-        String jsonStr = null;
-        try{
-            BufferedReader reader = new BufferedReader(new InputStreamReader(stream, "UTF-8"));
-            while((jsonStr = reader.readLine()) != null){
-                builder.append(jsonStr);
-            }
-            reader.close();
-        }catch(Exception e){
-            logger.info(e.getLocalizedMessage());
-            throw new RuntimeException(e);
-        }
-        return fromJson(builder.toString(), clazz, parameters);
-    }
-
-    public static String toJson(Object obj, Class<?> model){
-        ObjectWriter writer = mapper.writer();
-        if(null != obj){
-            try{
-                if(null != model){
-                    writer = writer.withView(model);
-                }
-                return writer.writeValueAsString(obj);
-            } catch (JsonProcessingException e) {
-                logger.info(e.getLocalizedMessage());
-                throw new RuntimeException(e);
-            }
-        }
-        return null;
-    }
-
-}
diff --git a/linkis-public-enhancements/linkis-datasource/metadatamanager/server/src/main/java/org/apache/linkis/metadatamanager/server/loader/MetaClassLoaderManager.java b/linkis-public-enhancements/linkis-datasource/metadatamanager/server/src/main/java/org/apache/linkis/metadatamanager/server/loader/MetaClassLoaderManager.java
deleted file mode 100644
index b9ac443..0000000
--- a/linkis-public-enhancements/linkis-datasource/metadatamanager/server/src/main/java/org/apache/linkis/metadatamanager/server/loader/MetaClassLoaderManager.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.linkis.metadatamanager.server.loader;
-
-import org.apache.linkis.common.conf.CommonVars;
-import org.apache.linkis.common.exception.ErrorException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.File;
-import java.lang.reflect.Method;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.function.BiFunction;
-import java.util.stream.Collectors;
-
-public class MetaClassLoaderManager {
-    private final Map<String, ClassLoader> classLoaders = new ConcurrentHashMap<>();
-    private final Map<String, Class<?>> clazzes = new ConcurrentHashMap<>();
-    private final Map<String, Object> instances = new ConcurrentHashMap<>();
-    public static CommonVars<String> LIB_DIR = CommonVars.apply("wds.linkis.server.mdm.service.lib.dir", "/tmp/mdm/lib");
-    private static final Logger LOGGER = LoggerFactory.getLogger(MetaClassLoaderManager.class);
-
-    public BiFunction<String, Object[], Object> getInvoker(String dsType) throws ErrorException {
-        ClassLoader extClassLoader = MetaClassLoaderManager.class.getClassLoader().getParent();
-        classLoaders.computeIfAbsent(dsType,(x)->{
-            String lib = LIB_DIR.getValue();
-            String stdLib = lib.endsWith("/") ? lib.replaceAll(".$", "") : lib;
-            String componentLib = stdLib + "/" + dsType;
-
-            try {
-                return new URLClassLoader(getJarsUrlsOfPath(componentLib).toArray(new URL[0]), extClassLoader);
-            } catch (Exception e) {
-                e.printStackTrace();
-                return null;
-            }
-        });
-        if(classLoaders.get(dsType) == null){
-            throw new ErrorException(-1, "Error in creating classloader");
-        }
-        ClassLoader childClassLoader = classLoaders.get(dsType);
-        String prefix = dsType.substring(0, 1).toUpperCase() + dsType.substring(1);
-        String className = "org.apache.linkis.metadatamanager.service." + prefix + "MetaService";
-        Thread.currentThread().setContextClassLoader(childClassLoader);
-
-        clazzes.computeIfAbsent(dsType, (x)->{
-            try {
-                ClassLoader classLoader = classLoaders.get(dsType);
-                return classLoader.loadClass(className);
-            } catch (Exception e) {
-                e.printStackTrace();
-                return null;
-            }
-        });
-
-        if(clazzes.get(dsType) == null){
-            throw new ErrorException(-1, "Error in loading class " + className);
-        }
-
-        instances.computeIfAbsent(dsType, (x)->{
-            try {
-                return clazzes.get(dsType).newInstance();
-            } catch (Exception e) {
-                e.printStackTrace();
-                return null;
-            }
-        });
-        if(instances.get(dsType) == null){
-            throw new ErrorException(-1, "Error in instantiate org.apache.linkis.metadatamanager.service.MetaService");
-        }
-
-
-        Method[] childMethods = clazzes.get(dsType).getMethods();
-        return (String m, Object...args)-> {
-            ClassLoader currentClassLoader = Thread.currentThread().getContextClassLoader();
-            try {
-                Method method = Arrays.stream(childMethods)
-                        .filter(eachMethod -> eachMethod.getName().equals(m)).collect(Collectors.toList()).get(0);
-                return method.invoke(instances.get(dsType), args);
-            } catch (Exception e) {
-                e.printStackTrace();
-                return null;
-            }finally {
-                Thread.currentThread().setContextClassLoader(currentClassLoader);
-            }
-        };
-    }
-
-
-    public List<URL> getJarsUrlsOfPath(String path) throws MalformedURLException {
-        File file = new File(path);
-        List<URL> jars = new ArrayList<>();
-        if (file.listFiles() != null){
-            for(File f : file.listFiles()){
-                if (!f.isDirectory() && f.getName().endsWith(".jar")){
-                    jars.add(f.toURI().toURL());
-                }
-            }
-        }
-        return jars;
-    }
-}
diff --git a/linkis-public-enhancements/linkis-datasource/metadatamanager/server/src/main/java/org/apache/linkis/metadatamanager/server/restful/MetadataCoreRestful.java b/linkis-public-enhancements/linkis-datasource/metadatamanager/server/src/main/java/org/apache/linkis/metadatamanager/server/restful/MetadataCoreRestful.java
deleted file mode 100644
index ddbb12c..0000000
--- a/linkis-public-enhancements/linkis-datasource/metadatamanager/server/src/main/java/org/apache/linkis/metadatamanager/server/restful/MetadataCoreRestful.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- 
-package org.apache.linkis.metadatamanager.server.restful;
-
-import org.apache.linkis.metadatamanager.common.domain.MetaColumnInfo;
-import org.apache.linkis.metadatamanager.common.domain.MetaPartitionInfo;
-import org.apache.linkis.metadatamanager.server.service.MetadataAppService;
-import org.apache.linkis.server.Message;
-import org.apache.commons.lang.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import javax.ws.rs.*;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-import java.util.List;
-import java.util.Map;
-
-@Path("/metadata")
-@Consumes(MediaType.APPLICATION_JSON)
-@Produces(MediaType.APPLICATION_JSON)
-@Component
-public class MetadataCoreRestful {
-
-    @Autowired
-    private MetadataAppService metadataAppService;
-
-    @GET
-    @Path("/dbs/{data_source_id}")
-    public Response getDatabases(@PathParam("data_source_id")String dataSourceId,
-                                 @QueryParam("system")String system){
-        try{
-            if(StringUtils.isBlank(system)){
-                return Message.messageToResponse(Message.error("'system' is missing[缺少系统名]"));
-            }
-            List<String> databases = metadataAppService.getDatabasesByDsId(dataSourceId, system);
-            return Message.messageToResponse(Message.ok().data("dbs", databases));
-        }catch(Exception e){
-            return Message.messageToResponse(
-                    Message.error("Fail to get database list[获取库信息失败], id:[" + dataSourceId +"], system:[" + system + "]", e));
-        }
-    }
-
-    @GET
-    @Path("/tables/{data_source_id}/db/{database}")
-    public Response getTables(@PathParam("data_source_id")String dataSourceId,
-                              @PathParam("database")String database,
-                              @QueryParam("system")String system){
-        try{
-            if(StringUtils.isBlank(system)){
-                return Message.messageToResponse(Message.error("'system' is missing[缺少系统名]"));
-            }
-            List<String> tables = metadataAppService.getTablesByDsId(dataSourceId, database, system);
-            return Message.messageToResponse(Message.ok().data("tables", tables));
-        }catch(Exception e){
-            return Message.messageToResponse(
-                    Message.error("Fail to get table list[获取表信息失败], id:[" + dataSourceId +"]" +
-                            ", system:[" + system + "], database:[" +database +"]", e));
-        }
-    }
-
-    @GET
-    @Path("/props/{data_source_id}/db/{database}/table/{table}")
-    public Response getTableProps(@PathParam("data_source_id")String dataSourceId,
-                                  @PathParam("database")String database,
-                                  @PathParam("table") String table,
-                                  @QueryParam("system")String system){
-        try{
-            if(StringUtils.isBlank(system)){
-                return Message.messageToResponse(Message.error("'system' is missing[缺少系统名]"));
-            }
-            Map<String, String> tableProps = metadataAppService.getTablePropsByDsId(dataSourceId, database, table, system);
-            return Message.messageToResponse(Message.ok().data("props", tableProps));
-        }catch(Exception e){
-            return Message.messageToResponse(
-                    Message.error("Fail to get table properties[获取表参数信息失败], id:[" + dataSourceId +"]" +
-                            ", system:[" + system + "], database:[" +database +"], table:[" + table +"]", e));
-        }
-    }
-
-    @GET
-    @Path("/partitions/{data_source_id}/db/{database}/table/{table}")
-    public Response getPartitions(@PathParam("data_source_id")String dataSourceId,
-                                  @PathParam("database")String database,
-                                  @PathParam("table") String table,
-                                  @QueryParam("system")String system){
-        try{
-            if(StringUtils.isBlank(system)){
-                return Message.messageToResponse(Message.error("'system' is missing[缺少系统名]"));
-            }
-            MetaPartitionInfo partitionInfo = metadataAppService.getPartitionsByDsId(dataSourceId, database, table, system);
-            return Message.messageToResponse(Message.ok().data("props", partitionInfo));
-        }catch(Exception e){
-            return Message.messageToResponse(
-                    Message.error("Fail to get partitions[获取表分区信息失败], id:[" + dataSourceId +"]" +
-                            ", system:[" + system + "], database:[" +database +"], table:[" + table +"]"));
-        }
-    }
-
-    @GET
-    @Path("/columns/{data_source_id}/db/{database}/table/{table}")
-    public Response getColumns(@PathParam("data_source_id")String dataSourceId,
-                               @PathParam("database")String database,
-                               @PathParam("table") String table,
-                               @QueryParam("system")String system){
-        try{
-            if(StringUtils.isBlank(system)){
-                return Message.messageToResponse(Message.error("'system' is missing[缺少系统名]"));
-            }
-            List<MetaColumnInfo> columns = metadataAppService.getColumns(dataSourceId, database, table, system);
-            return Message.messageToResponse(Message.ok().data("columns", columns));
-        }catch(Exception e){
-            return Message.messageToResponse(
-                    Message.error("Fail to get column list[获取表字段信息失败], id:[" + dataSourceId +"]" +
-                            ", system:[" + system + "], database:[" +database +"], table:[" + table +"]", e));
-        }
-    }
-
-}
diff --git a/linkis-public-enhancements/linkis-datasource/metadatamanager/server/src/main/java/org/apache/linkis/metadatamanager/server/service/impl/MetadataAppServiceImpl.java b/linkis-public-enhancements/linkis-datasource/metadatamanager/server/src/main/java/org/apache/linkis/metadatamanager/server/service/impl/MetadataAppServiceImpl.java
deleted file mode 100644
index e906c54..0000000
--- a/linkis-public-enhancements/linkis-datasource/metadatamanager/server/src/main/java/org/apache/linkis/metadatamanager/server/service/impl/MetadataAppServiceImpl.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- 
-package org.apache.linkis.metadatamanager.server.service.impl;
-
-import org.apache.linkis.common.exception.ErrorException;
-import org.apache.linkis.datasourcemanager.common.util.json.Json;
-import org.apache.linkis.datasourcemanager.common.protocol.DsInfoQueryRequest;
-import org.apache.linkis.datasourcemanager.common.protocol.DsInfoResponse;
-import org.apache.linkis.metadatamanager.common.MdmConfiguration;
-import org.apache.linkis.metadatamanager.common.domain.MetaColumnInfo;
-import org.apache.linkis.metadatamanager.common.domain.MetaPartitionInfo;
-import org.apache.linkis.metadatamanager.server.service.MetadataAppService;
-import org.apache.linkis.metadatamanager.common.protocol.*;
-import org.apache.linkis.rpc.Sender;
-import org.apache.commons.lang.StringUtils;
-import org.springframework.stereotype.Service;
-
-import javax.annotation.PostConstruct;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.function.BiFunction;
-
-@Service
-public class MetadataAppServiceImpl implements MetadataAppService {
-    private Sender dataSourceRpcSender;
-    private MetaClassLoaderManager metaClassLoaderManager;
-
-    @PostConstruct
-    public void init(){
-        dataSourceRpcSender = Sender.getSender(MdmConfiguration.DATA_SOURCE_SERVICE_APPLICATION.getValue());
-        metaClassLoaderManager = new MetaClassLoaderManager();
-    }
-
-
-    @Override
-    public void getConnection(String dataSourceType, String operator, Map<String, Object> params) throws Exception {
-        BiFunction<String, Object[], Object> invoker = metaClassLoaderManager.getInvoker(dataSourceType);
-        invoker.apply("getConnection", new Object[]{operator, params});
-    }
-
-    @Override
-    public List<String> getDatabasesByDsId(String dataSourceId, String system) throws ErrorException {
-        DsInfoResponse dsInfoResponse = reqToGetDataSourceInfo(dataSourceId, system);
-        if(StringUtils.isNotBlank(dsInfoResponse.dsType())){
-            BiFunction<String, Object[], Object> invoker = metaClassLoaderManager.getInvoker(dsInfoResponse.dsType());
-            return (List<String>)invoker.apply("getDatabases", new Object[]{dsInfoResponse.creator(), dsInfoResponse.params()});
-        }
-        return new ArrayList<>();
-    }
-
-    @Override
-    public List<String> getTablesByDsId(String dataSourceId, String database, String system) throws ErrorException {
-        DsInfoResponse dsInfoResponse = reqToGetDataSourceInfo(dataSourceId, system);
-        if(StringUtils.isNotBlank(dsInfoResponse.dsType())){
-            BiFunction<String, Object[], Object> invoker = metaClassLoaderManager.getInvoker(dsInfoResponse.dsType());
-            return (List<String>)invoker.apply("getTables", new Object[]{dsInfoResponse.creator(), dsInfoResponse.params(), database});
-        }
-        return new ArrayList<>();
-    }
-
-    @Override
-    public Map<String, String> getTablePropsByDsId(String dataSourceId, String database, String table, String system) throws ErrorException {
-        DsInfoResponse dsInfoResponse = reqToGetDataSourceInfo(dataSourceId, system);
-        if(StringUtils.isNotBlank(dsInfoResponse.dsType())){
-            BiFunction<String, Object[], Object> invoker = metaClassLoaderManager.getInvoker(dsInfoResponse.dsType());
-            return (Map<String, String>)invoker.apply("getTableProps", new Object[]{dsInfoResponse.creator(), dsInfoResponse.params(), database, table});
-        }
-        return new HashMap<>();
-    }
-
-    @Override
-    public MetaPartitionInfo getPartitionsByDsId(String dataSourceId, String database, String table, String system) throws ErrorException {
-        DsInfoResponse dsInfoResponse = reqToGetDataSourceInfo(dataSourceId, system);
-        if(StringUtils.isNotBlank(dsInfoResponse.dsType())){
-            BiFunction<String, Object[], Object> invoker = metaClassLoaderManager.getInvoker(dsInfoResponse.dsType());
-            Object partitions = invoker.apply("getPartitions", new Object[]{dsInfoResponse.creator(), dsInfoResponse.params(), database, table});
-            try {
-                String partitionsJson = BDPJettyServerHelper.jacksonJson().writeValueAsString(partitions);
-                return BDPJettyServerHelper.jacksonJson().readValue(partitionsJson,MetaPartitionInfo.class);
-            }catch (Exception e){
-                throw new ErrorException(-1, "Partitions Error msg:"+e.getMessage());
-            }
-        }
-        return new MetaPartitionInfo();
-    }
-
-    @Override
-    public List<MetaColumnInfo> getColumns(String dataSourceId, String database, String table, String system) throws ErrorException {
-        DsInfoResponse dsInfoResponse = reqToGetDataSourceInfo(dataSourceId, system);
-        if(StringUtils.isNotBlank(dsInfoResponse.dsType())){
-            BiFunction<String, Object[], Object> invoker = metaClassLoaderManager.getInvoker(dsInfoResponse.dsType());
-            return (List<MetaColumnInfo>)invoker.apply("getColumns", new Object[]{dsInfoResponse.creator(), dsInfoResponse.params(), database, table});
-        }
-        return new ArrayList<>();
-    }
-
-    /**
-     * Request to get data source information
-     * (type and connection parameters)
-     * @param dataSourceId data source id
-     * @param system system
-     * @return
-     * @throws ErrorException
-     */
-    public DsInfoResponse reqToGetDataSourceInfo(String dataSourceId, String system) throws ErrorException{
-        Object rpcResult = null;
-        try {
-            rpcResult = dataSourceRpcSender.ask(new DsInfoQueryRequest(dataSourceId, system));
-        }catch(Exception e){
-            throw new ErrorException(-1, "Remote Service Error[远端服务出错, 联系运维处理]");
-        }
-        if(rpcResult instanceof DsInfoResponse){
-            DsInfoResponse response = (DsInfoResponse)rpcResult;
-            if(!response.status()){
-                throw new ErrorException(-1, "Error in Data Source Manager Server[数据源服务出错]");
-            }
-            return response;
-        }else{
-            throw new ErrorException(-1, "Remote Service Error[远端服务出错, 联系运维处理]");
-        }
-    }
-
-}
diff --git a/linkis-public-enhancements/linkis-datasource/metadatamanager/service/mysql/src/main/assembly/distribution.xml b/linkis-public-enhancements/linkis-datasource/metadatamanager/service/mysql/src/main/assembly/distribution.xml
deleted file mode 100644
index ccdc3c0..0000000
--- a/linkis-public-enhancements/linkis-datasource/metadatamanager/service/mysql/src/main/assembly/distribution.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-  <!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one or more
-  ~ contributor license agreements.  See the NOTICE file distributed with
-  ~ this work for additional information regarding copyright ownership.
-  ~ The ASF licenses this file to You under the Apache License, Version 2.0
-  ~ (the "License"); you may not use this file except in compliance with
-  ~ the License.  You may obtain a copy of the License at
-  ~
-  ~   http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
-  -->
-
-<assembly
-        xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/2.3"
-        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-        xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/2.3 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
-    <id>linkis-mdm-service-mysql</id>
-    <formats>
-        <format>zip</format>
-        <format>dir</format>
-    </formats>
-    <includeBaseDirectory>false</includeBaseDirectory>
-    <baseDirectory>linkis-mdm-service-mysql</baseDirectory>
-
-    <dependencySets>
-        <dependencySet>
-            <!-- Enable access to all projects in the current multimodule build! <useAllReactorProjects>true</useAllReactorProjects> -->
-            <!-- Now, select which projects to include in this module-set. -->
-            <outputDirectory>lib</outputDirectory>
-            <useProjectArtifact>true</useProjectArtifact>
-            <useTransitiveDependencies>true</useTransitiveDependencies>
-            <unpack>false</unpack>
-            <useStrictFiltering>true</useStrictFiltering>
-            <useTransitiveFiltering>true</useTransitiveFiltering>
-        </dependencySet>
-    </dependencySets>
-
-    <fileSets>
-        <fileSet>
-            <directory>${basedir}/src/main/resources</directory>
-            <includes>
-                <include>*</include>
-            </includes>
-            <fileMode>0777</fileMode>
-            <outputDirectory>conf</outputDirectory>
-            <lineEnding>unix</lineEnding>
-        </fileSet>
-    </fileSets>
-
-</assembly>
-
diff --git a/linkis-public-enhancements/linkis-datasource/pom.xml b/linkis-public-enhancements/linkis-datasource/pom.xml
new file mode 100644
index 0000000..2eec0a4
--- /dev/null
+++ b/linkis-public-enhancements/linkis-datasource/pom.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~   http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>linkis</artifactId>
+        <groupId>org.apache.linkis</groupId>
+        <version>1.0.3</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>linkis-datasource</artifactId>
+    <packaging>pom</packaging>
+    <modules>
+        <module>linkis-datasource-manager/common</module>
+        <module>linkis-metadata-manager/common</module>
+        <module>linkis-datasource-manager/server</module>
+        <module>linkis-metadata-manager/service/elasticsearch</module>
+        <module>linkis-metadata-manager/service/hive</module>
+        <module>linkis-metadata-manager/service/kafka</module>
+        <module>linkis-metadata-manager/service/mysql</module>
+        <module>linkis-metadata-manager/server</module>
+        <module>linkis-datasource-client</module>
+    </modules>
+</project>
\ No newline at end of file
diff --git a/linkis-public-enhancements/pom.xml b/linkis-public-enhancements/pom.xml
index ecf10c0..6de5d0d 100644
--- a/linkis-public-enhancements/pom.xml
+++ b/linkis-public-enhancements/pom.xml
@@ -33,16 +33,8 @@
     <modules>
         <module>linkis-bml</module>
         <module>linkis-context-service</module>
+        <module>linkis-datasource</module>
         <module>linkis-datasource/linkis-metadata</module>
-        <module>linkis-datasource/datasourcemanager/common</module>
-        <module>linkis-datasource/datasource-client</module>
-        <module>linkis-datasource/datasourcemanager/server</module>
-        <module>linkis-datasource/metadatamanager/common</module>
-        <module>linkis-datasource/metadatamanager/server</module>
-        <module>linkis-datasource/metadatamanager/service/elasticsearch</module>
-        <module>linkis-datasource/metadatamanager/service/mysql</module>
-        <module>linkis-datasource/metadatamanager/service/hive</module>
-        <module>linkis-datasource/metadatamanager/service/kafka</module>
         <module>linkis-publicservice</module>
     </modules>
 

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@linkis.apache.org
For additional commands, e-mail: commits-help@linkis.apache.org