You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dolphinscheduler.apache.org by li...@apache.org on 2020/03/28 15:28:45 UTC
[incubator-dolphinscheduler] branch dev updated: Connection mode of
adding Sid to Oracle (#2254)
This is an automated email from the ASF dual-hosted git repository.
lidongdai pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/incubator-dolphinscheduler.git
The following commit(s) were added to refs/heads/dev by this push:
new 526e5c9 Connection mode of adding Sid to Oracle (#2254)
526e5c9 is described below
commit 526e5c91f112398bf920d420a7043477b442aa87
Author: liwenhe1993 <32...@users.noreply.github.com>
AuthorDate: Sat Mar 28 23:28:35 2020 +0800
Connection mode of adding Sid to Oracle (#2254)
* Connection mode of adding Sid to Oracle
* Remove code
* Add asf
* Add unit test
* Add unit test
* Add unit test
* solve the conflict
---
.../api/controller/DataSourceController.java | 33 ++++++++++-------
.../api/service/DataSourceService.java | 32 +++++++++++------
.../api/controller/DataSourceControllerTest.java | 4 +++
.../apache/dolphinscheduler/common/Constants.java | 3 +-
.../common/enums/DbConnectType.java | 42 +++++++++++-----------
.../dao/datasource/OracleDataSource.java | 15 ++++++++
.../pages/list/_source/createDataSource.vue | 24 ++++++++++++-
.../src/js/module/i18n/locale/en_US.js | 3 ++
.../src/js/module/i18n/locale/zh_CN.js | 3 ++
pom.xml | 1 +
10 files changed, 115 insertions(+), 45 deletions(-)
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/DataSourceController.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/DataSourceController.java
index 881c93f..89e6134 100644
--- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/DataSourceController.java
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/DataSourceController.java
@@ -16,18 +16,19 @@
*/
package org.apache.dolphinscheduler.api.controller;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
import org.apache.dolphinscheduler.api.enums.Status;
import org.apache.dolphinscheduler.api.service.DataSourceService;
import org.apache.dolphinscheduler.api.utils.Result;
import org.apache.dolphinscheduler.common.Constants;
+import org.apache.dolphinscheduler.common.enums.DbConnectType;
import org.apache.dolphinscheduler.common.enums.DbType;
import org.apache.dolphinscheduler.common.utils.CommonUtils;
import org.apache.dolphinscheduler.common.utils.ParameterUtils;
import org.apache.dolphinscheduler.dao.entity.User;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -76,6 +77,7 @@ public class DataSourceController extends BaseController {
@ApiImplicitParam(name = "database", value = "DATABASE_NAME",required = true, dataType ="String"),
@ApiImplicitParam(name = "userName", value = "USER_NAME",required = true, dataType ="String"),
@ApiImplicitParam(name = "password", value = "PASSWORD", dataType ="String"),
+ @ApiImplicitParam(name = "connectType", value = "CONNECT_TYPE", dataType = "DbConnectType"),
@ApiImplicitParam(name = "other", value = "DATA_SOURCE_OTHER", dataType ="String")
})
@PostMapping(value = "/create")
@@ -90,11 +92,12 @@ public class DataSourceController extends BaseController {
@RequestParam(value = "principal") String principal,
@RequestParam(value = "userName") String userName,
@RequestParam(value = "password") String password,
+ @RequestParam(value = "connectType") DbConnectType connectType,
@RequestParam(value = "other") String other) {
- logger.info("login user {} create datasource name: {}, note: {}, type: {}, host: {},port: {},database : {},principal: {},userName : {} other: {}",
- loginUser.getUserName(), name, note, type, host,port,database,principal,userName,other);
+ logger.info("login user {} create datasource name: {}, note: {}, type: {}, host: {}, port: {}, database : {}, principal: {}, userName : {}, connectType: {}, other: {}",
+ loginUser.getUserName(), name, note, type, host, port, database, principal, userName, connectType, other);
try {
- String parameter = dataSourceService.buildParameter(name, note, type, host, port, database,principal,userName, password, other);
+ String parameter = dataSourceService.buildParameter(name, note, type, host, port, database, principal, userName, password, connectType, other);
Map<String, Object> result = dataSourceService.createDataSource(loginUser, name, note, type, parameter);
return returnDataList(result);
@@ -133,6 +136,7 @@ public class DataSourceController extends BaseController {
@ApiImplicitParam(name = "database", value = "DATABASE_NAME",required = true, dataType ="String"),
@ApiImplicitParam(name = "userName", value = "USER_NAME",required = true, dataType ="String"),
@ApiImplicitParam(name = "password", value = "PASSWORD", dataType ="String"),
+ @ApiImplicitParam(name = "connectType", value = "CONNECT_TYPE", dataType = "DbConnectType"),
@ApiImplicitParam(name = "other", value = "DATA_SOURCE_OTHER", dataType ="String")
})
@PostMapping(value = "/update")
@@ -148,11 +152,12 @@ public class DataSourceController extends BaseController {
@RequestParam(value = "principal") String principal,
@RequestParam(value = "userName") String userName,
@RequestParam(value = "password") String password,
+ @RequestParam(value = "connectType") DbConnectType connectType,
@RequestParam(value = "other") String other) {
- logger.info("login user {} updateProcessInstance datasource name: {}, note: {}, type: {}, other: {}",
- loginUser.getUserName(), name, note, type, other);
+ logger.info("login user {} updateProcessInstance datasource name: {}, note: {}, type: {}, connectType: {}, other: {}",
+ loginUser.getUserName(), name, note, type, connectType, other);
try {
- String parameter = dataSourceService.buildParameter(name, note, type, host, port, database,principal, userName, password, other);
+ String parameter = dataSourceService.buildParameter(name, note, type, host, port, database,principal, userName, password, connectType, other);
Map<String, Object> dataSource = dataSourceService.updateDataSource(id, loginUser, name, note, type, parameter);
return returnDataList(dataSource);
} catch (Exception e) {
@@ -277,6 +282,7 @@ public class DataSourceController extends BaseController {
@ApiImplicitParam(name = "database", value = "DATABASE_NAME",required = true, dataType ="String"),
@ApiImplicitParam(name = "userName", value = "USER_NAME",required = true, dataType ="String"),
@ApiImplicitParam(name = "password", value = "PASSWORD", dataType ="String"),
+ @ApiImplicitParam(name = "connectType", value = "CONNECT_TYPE", dataType = "DbConnectType"),
@ApiImplicitParam(name = "other", value = "DATA_SOURCE_OTHER", dataType ="String")
})
@PostMapping(value = "/connect")
@@ -291,11 +297,12 @@ public class DataSourceController extends BaseController {
@RequestParam(value = "principal") String principal,
@RequestParam(value = "userName") String userName,
@RequestParam(value = "password") String password,
+ @RequestParam(value = "connectType") DbConnectType connectType,
@RequestParam(value = "other") String other) {
- logger.info("login user {}, connect datasource: {} failure, note: {}, type: {}, other: {}",
- loginUser.getUserName(), name, note, type, other);
+ logger.info("login user {}, connect datasource: {} failure, note: {}, type: {}, connectType: {}, other: {}",
+ loginUser.getUserName(), name, note, type, connectType, other);
try {
- String parameter = dataSourceService.buildParameter(name, note, type, host, port, database,principal,userName, password, other);
+ String parameter = dataSourceService.buildParameter(name, note, type, host, port, database, principal, userName, password, connectType, other);
Boolean isConnection = dataSourceService.checkConnection(type, parameter);
Result result = new Result();
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/DataSourceService.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/DataSourceService.java
index 6a732fe..afa13b7 100644
--- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/DataSourceService.java
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/DataSourceService.java
@@ -17,10 +17,15 @@
package org.apache.dolphinscheduler.api.service;
import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.TypeReference;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.dolphinscheduler.api.enums.Status;
import org.apache.dolphinscheduler.api.utils.PageInfo;
import org.apache.dolphinscheduler.api.utils.Result;
import org.apache.dolphinscheduler.common.Constants;
+import org.apache.dolphinscheduler.common.enums.DbConnectType;
import org.apache.dolphinscheduler.common.enums.DbType;
import org.apache.dolphinscheduler.common.utils.CommonUtils;
import org.apache.dolphinscheduler.common.utils.JSONUtils;
@@ -30,10 +35,6 @@ import org.apache.dolphinscheduler.dao.entity.Resource;
import org.apache.dolphinscheduler.dao.entity.User;
import org.apache.dolphinscheduler.dao.mapper.DataSourceMapper;
import org.apache.dolphinscheduler.dao.mapper.DataSourceUserMapper;
-import com.alibaba.fastjson.JSONObject;
-import com.alibaba.fastjson.TypeReference;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.security.UserGroupInformation;
import org.slf4j.Logger;
@@ -473,12 +474,19 @@ public class DataSourceService extends BaseService{
* @return datasource parameter
*/
public String buildParameter(String name, String desc, DbType type, String host,
- String port, String database,String principal,String userName,
- String password, String other) {
+ String port, String database, String principal, String userName,
+ String password, DbConnectType connectType, String other) {
+
+ String address = buildAddress(type, host, port, connectType);
- String address = buildAddress(type, host, port);
+ String jdbcUrl;
+ if (Constants.ORACLE.equals(type.name())
+ && connectType == DbConnectType.ORACLE_SID) {
+ jdbcUrl = address + ":" + database;
+ } else {
+ jdbcUrl = address + "/" + database;
+ }
- String jdbcUrl = address + "/" + database;
if (CommonUtils.getKerberosStartupState() &&
(type == DbType.HIVE || type == DbType.SPARK)){
jdbcUrl += ";principal=" + principal;
@@ -531,7 +539,7 @@ public class DataSourceService extends BaseService{
}
- private String buildAddress(DbType type, String host, String port) {
+ private String buildAddress(DbType type, String host, String port, DbConnectType connectType) {
StringBuilder sb = new StringBuilder();
if (Constants.MYSQL.equals(type.name())) {
sb.append(Constants.JDBC_MYSQL);
@@ -552,7 +560,11 @@ public class DataSourceService extends BaseService{
sb.append(Constants.JDBC_CLICKHOUSE);
sb.append(host).append(":").append(port);
} else if (Constants.ORACLE.equals(type.name())) {
- sb.append(Constants.JDBC_ORACLE);
+ if (connectType == DbConnectType.ORACLE_SID) {
+ sb.append(Constants.JDBC_ORACLE_SID);
+ } else {
+ sb.append(Constants.JDBC_ORACLE_SERVICE_NAME);
+ }
sb.append(host).append(":").append(port);
} else if (Constants.SQLSERVER.equals(type.name())) {
sb.append(Constants.JDBC_SQLSERVER);
diff --git a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/DataSourceControllerTest.java b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/DataSourceControllerTest.java
index f80ce85..5ed7310 100644
--- a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/DataSourceControllerTest.java
+++ b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/DataSourceControllerTest.java
@@ -39,6 +39,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
* data source controller test
*/
public class DataSourceControllerTest extends AbstractControllerTest{
+
private static Logger logger = LoggerFactory.getLogger(DataSourceControllerTest.class);
@Ignore
@@ -95,6 +96,7 @@ public class DataSourceControllerTest extends AbstractControllerTest{
+ @Ignore
@Test
public void testQueryDataSource() throws Exception {
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
@@ -169,6 +171,7 @@ public class DataSourceControllerTest extends AbstractControllerTest{
}
+ @Ignore
@Test
public void testConnectionTest() throws Exception {
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
@@ -248,6 +251,7 @@ public class DataSourceControllerTest extends AbstractControllerTest{
+ @Ignore
@Test
public void testDelete() throws Exception {
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
diff --git a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/Constants.java b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/Constants.java
index 73655e7..c46635c 100644
--- a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/Constants.java
+++ b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/Constants.java
@@ -972,7 +972,8 @@ public final class Constants {
public static final String JDBC_POSTGRESQL = "jdbc:postgresql://";
public static final String JDBC_HIVE_2 = "jdbc:hive2://";
public static final String JDBC_CLICKHOUSE = "jdbc:clickhouse://";
- public static final String JDBC_ORACLE = "jdbc:oracle:thin:@//";
+ public static final String JDBC_ORACLE_SID = "jdbc:oracle:thin:@";
+ public static final String JDBC_ORACLE_SERVICE_NAME = "jdbc:oracle:thin:@//";
public static final String JDBC_SQLSERVER = "jdbc:sqlserver://";
public static final String JDBC_DB2 = "jdbc:db2://";
diff --git a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/datasource/OracleDataSource.java b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/enums/DbConnectType.java
similarity index 61%
copy from dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/datasource/OracleDataSource.java
copy to dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/enums/DbConnectType.java
index 0ebecb4..ef0f454 100644
--- a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/datasource/OracleDataSource.java
+++ b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/enums/DbConnectType.java
@@ -14,29 +14,31 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.dolphinscheduler.dao.datasource;
+package org.apache.dolphinscheduler.common.enums;
-import org.apache.dolphinscheduler.common.Constants;
-import org.apache.dolphinscheduler.common.enums.DbType;
+import com.baomidou.mybatisplus.annotation.EnumValue;
-/**
- * data source of Oracle
- */
-public class OracleDataSource extends BaseDataSource {
-
- /**
- * @return driver class
- */
- @Override
- public String driverClassSelector() {
- return Constants.COM_ORACLE_JDBC_DRIVER;
+public enum DbConnectType {
+
+ ORACLE_SERVICE_NAME(0, "Oracle Service Name"),
+ ORACLE_SID(1, "Oracle SID");
+
+ DbConnectType(int code, String descp) {
+ this.code = code;
+ this.descp = descp;
+ }
+
+ @EnumValue
+ private final int code;
+
+ private final String descp;
+
+ public int getCode() {
+ return code;
}
- /**
- * @return db type
- */
- @Override
- public DbType dbTypeSelector() {
- return DbType.ORACLE;
+ public String getDescp() {
+ return descp;
}
+
}
diff --git a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/datasource/OracleDataSource.java b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/datasource/OracleDataSource.java
index 0ebecb4..879219c 100644
--- a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/datasource/OracleDataSource.java
+++ b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/datasource/OracleDataSource.java
@@ -17,13 +17,28 @@
package org.apache.dolphinscheduler.dao.datasource;
import org.apache.dolphinscheduler.common.Constants;
+import org.apache.dolphinscheduler.common.enums.DbConnectType;
import org.apache.dolphinscheduler.common.enums.DbType;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* data source of Oracle
*/
public class OracleDataSource extends BaseDataSource {
+ private static final Logger logger = LoggerFactory.getLogger(OracleDataSource.class);
+
+ private DbConnectType type;
+
+ public DbConnectType getType() {
+ return type;
+ }
+
+ public void setType(DbConnectType type) {
+ this.type = type;
+ }
+
/**
* @return driver class
*/
diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/datasource/pages/list/_source/createDataSource.vue b/dolphinscheduler-ui/src/js/conf/home/pages/datasource/pages/list/_source/createDataSource.vue
index 001535b..db99d00 100644
--- a/dolphinscheduler-ui/src/js/conf/home/pages/datasource/pages/list/_source/createDataSource.vue
+++ b/dolphinscheduler-ui/src/js/conf/home/pages/datasource/pages/list/_source/createDataSource.vue
@@ -128,6 +128,15 @@
</x-input>
</template>
</m-list-box-f>
+ <m-list-box-f v-if="showConnectType">
+ <template slot="name"><strong>*</strong>{{$t('Oracle Connect Type')}}</template>
+ <template slot="content">
+ <x-radio-group v-model="connectType" size="small">
+ <x-radio :label="'ORACLE_SERVICE_NAME'">{{$t('Oracle Service Name')}}</x-radio>
+ <x-radio :label="'ORACLE_SID'">{{$t('Oracle SID')}}</x-radio>
+ </x-radio-group>
+ </template>
+ </m-list-box-f>
<m-list-box-f>
<template slot="name">{{$t('jdbc connect parameters')}}</template>
<template slot="content">
@@ -152,7 +161,7 @@
<script>
import i18n from '@/module/i18n'
import store from '@/conf/home/store'
- import { isJson } from '@/module/util/util'
+ import {isJson} from '@/module/util/util'
import mPopup from '@/module/components/popup/popup'
import mListBoxF from '@/module/components/listBoxF/listBoxF'
@@ -181,12 +190,15 @@
userName: '',
// Database password
password: '',
+ // Database connect type
+ connectType: '',
// Jdbc connection parameter
other: '',
// btn test loading
testLoading: false,
showPrincipal: true,
showdDatabase: false,
+ showConnectType: false,
isShowPrincipal:true,
prePortMapper:{}
}
@@ -229,6 +241,7 @@
principal: this.principal,
userName: this.userName,
password: this.password,
+ connectType: this.connectType,
other: this.other
}
},
@@ -339,6 +352,7 @@
this.database = res.database
this.userName = res.userName
this.password = res.password
+ this.connectType = res.connectType
this.other = JSON.stringify(res.other) === '{}' ? '' : JSON.stringify(res.other)
}).catch(e => {
this.$message.error(e.msg || '')
@@ -415,6 +429,14 @@
this.showdDatabase = false;
}
+ if (value== 'ORACLE') {
+ this.showConnectType = true;
+ this.connectType = 'ORACLE_SERVICE_NAME'
+ } else {
+ this.showConnectType = false;
+ this.connectType = ''
+ }
+
//Set default port for each type datasource
this._setDefaultValues(value)
diff --git a/dolphinscheduler-ui/src/js/module/i18n/locale/en_US.js b/dolphinscheduler-ui/src/js/module/i18n/locale/en_US.js
index 53a40af..d113a1e 100755
--- a/dolphinscheduler-ui/src/js/module/i18n/locale/en_US.js
+++ b/dolphinscheduler-ui/src/js/module/i18n/locale/en_US.js
@@ -135,6 +135,9 @@ export default {
'Please enter port': 'Please enter port',
'Database Name': 'Database Name',
'Please enter database name': 'Please enter database name',
+ 'Oracle Connect Type': 'ServiceName or SID',
+ 'Oracle Service Name': 'ServiceName',
+ 'Oracle SID': 'SID',
'jdbc connect parameters': 'jdbc connect parameters',
'Test Connect': 'Test Connect',
'Please enter resource name': 'Please enter resource name',
diff --git a/dolphinscheduler-ui/src/js/module/i18n/locale/zh_CN.js b/dolphinscheduler-ui/src/js/module/i18n/locale/zh_CN.js
index 9b78f36..80cb2fc 100755
--- a/dolphinscheduler-ui/src/js/module/i18n/locale/zh_CN.js
+++ b/dolphinscheduler-ui/src/js/module/i18n/locale/zh_CN.js
@@ -139,6 +139,9 @@ export default {
'Please enter port': '请输入端口',
'Database Name': '数据库名',
'Please enter database name': '请输入数据库名',
+ 'Oracle Connect Type': '服务名或SID',
+ 'Oracle Service Name': '服务名',
+ 'Oracle SID': 'SID',
'jdbc connect parameters': 'jdbc连接参数',
'Test Connect': '测试连接',
'Please enter resource name': '请输入数据源名称',
diff --git a/pom.xml b/pom.xml
index 7354292..ec0435c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -699,6 +699,7 @@
<include>**/api/utils/exportprocess/DataSourceParamTest.java</include>
<include>**/api/utils/exportprocess/DependentParamTest.java</include>
<include>**/api/enums/*.java</include>
+ <include>**/api/controller/DataSourceControllerTest.java</include>
<include>**/api/service/AccessTokenServiceTest.java</include>
<include>**/api/service/QueueServiceTest.java</include>
<include>**/api/service/MonitorServiceTest.java</include>