From d49f617c91cb0179b9c64f5c10ce6b0e820d79c6 Mon Sep 17 00:00:00 2001 From: taojinlong Date: Mon, 30 May 2022 21:23:03 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=87=AA=E5=AE=9A=E4=B9=89=E9=A9=B1?= =?UTF-8?q?=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../provider/datasource/JdbcProvider.java | 13 +++++++- .../service/datasource/DriverService.java | 30 +++++++++++++------ .../resources/i18n/messages_en_US.properties | 3 +- .../resources/i18n/messages_zh_CN.properties | 1 + .../resources/i18n/messages_zh_TW.properties | 3 +- 5 files changed, 38 insertions(+), 12 deletions(-) diff --git a/backend/src/main/java/io/dataease/provider/datasource/JdbcProvider.java b/backend/src/main/java/io/dataease/provider/datasource/JdbcProvider.java index 93bc11b59d..851bdfc197 100644 --- a/backend/src/main/java/io/dataease/provider/datasource/JdbcProvider.java +++ b/backend/src/main/java/io/dataease/provider/datasource/JdbcProvider.java @@ -79,7 +79,18 @@ public class JdbcProvider extends DefaultJdbcProvider { List list = new LinkedList<>(); try (Connection connection = getConnectionFromPool(datasourceRequest)) { if (datasourceRequest.getDatasource().getType().equalsIgnoreCase("oracle")) { - Method setRemarksReporting = extendedJdbcClassLoader.loadClass("oracle.jdbc.driver.OracleConnection").getMethod("setRemarksReporting", boolean.class); + ExtendedJdbcClassLoader classLoader; + String driverClass; + OracleConfiguration oracleConfiguration = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), OracleConfiguration.class); + if (isDefaultClassLoader(oracleConfiguration.getCustomDriver())) { + classLoader = extendedJdbcClassLoader; + driverClass = oracleConfiguration.getDriver(); + } else { + DeDriver deDriver = deDriverMapper.selectByPrimaryKey(oracleConfiguration.getCustomDriver()); + classLoader = getCustomJdbcClassLoader(deDriver); + driverClass = deDriver.getDriverClass(); + } + Method setRemarksReporting = classLoader.loadClass(driverClass).getMethod("setRemarksReporting", boolean.class); setRemarksReporting.invoke(((DruidPooledConnection) connection).getConnection(), true); } DatabaseMetaData databaseMetaData = connection.getMetaData(); diff --git a/backend/src/main/java/io/dataease/service/datasource/DriverService.java b/backend/src/main/java/io/dataease/service/datasource/DriverService.java index 663d49c997..df44a4fef3 100644 --- a/backend/src/main/java/io/dataease/service/datasource/DriverService.java +++ b/backend/src/main/java/io/dataease/service/datasource/DriverService.java @@ -1,5 +1,6 @@ package io.dataease.service.datasource; +import cn.hutool.core.collection.CollectionUtil; import com.google.gson.Gson; import io.dataease.commons.constants.SysLogConstants; import io.dataease.commons.utils.BeanUtils; @@ -8,14 +9,13 @@ import io.dataease.commons.utils.DeLogUtils; import io.dataease.dto.DriverDTO; import io.dataease.dto.SysLogDTO; import io.dataease.i18n.Translator; -import io.dataease.plugins.common.base.domain.Datasource; -import io.dataease.plugins.common.base.domain.DeDriver; -import io.dataease.plugins.common.base.domain.DeDriverDetails; -import io.dataease.plugins.common.base.domain.DeDriverDetailsExample; +import io.dataease.plugins.common.base.domain.*; import io.dataease.plugins.common.base.mapper.DeDriverDetailsMapper; import io.dataease.plugins.common.base.mapper.DeDriverMapper; import io.dataease.plugins.datasource.entity.JdbcConfiguration; +import io.dataease.plugins.datasource.provider.DefaultJdbcProvider; import io.dataease.plugins.datasource.provider.ExtendedJdbcClassLoader; +import io.dataease.provider.ProviderFactory; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -27,10 +27,7 @@ import java.io.FileOutputStream; import java.io.IOException; import java.lang.reflect.Modifier; import java.net.URL; -import java.util.ArrayList; -import java.util.Enumeration; -import java.util.List; -import java.util.UUID; +import java.util.*; import java.util.jar.JarEntry; import java.util.jar.JarFile; @@ -78,6 +75,15 @@ public class DriverService { } public DeDriver save(DeDriver deDriver) { + if(StringUtils.isEmpty(deDriver.getName()) || StringUtils.isEmpty(deDriver.getType())){ + throw new RuntimeException("Name or Type cannot be empty."); + } + DeDriverExample example = new DeDriverExample(); + example.createCriteria().andNameEqualTo(deDriver.getName()); + if(CollectionUtil.isNotEmpty(deDriverMapper.selectByExample(example))){ + throw new RuntimeException(Translator.get("I18N_DRIVER_REPEAT_NAME")); + } + deDriver.setCreateTime(System.currentTimeMillis()); deDriver.setId(UUID.randomUUID().toString()); deDriverMapper.insert(deDriver); @@ -96,12 +102,15 @@ public class DriverService { return deDriverDetailsMapper.selectByExampleWithBLOBs(example); } - public void deleteDriverFile(String driverFileId) { + public void deleteDriverFile(String driverFileId) throws Exception{ DeDriverDetails deDriverDetails = deDriverDetailsMapper.selectByPrimaryKey(driverFileId); + DeDriver deDriver = deDriverMapper.selectByPrimaryKey(deDriverDetails.getDeDriverId()); DeFileUtils.deleteFile(DRIVER_PATH + deDriverDetails.getDeDriverId() + "/" + deDriverDetails.getFileName()); SysLogDTO sysLogDTO = DeLogUtils.buildLog(SysLogConstants.OPERATE_TYPE.DELETE, SysLogConstants.SOURCE_TYPE.DRIVER_FILE, deDriverDetails.getId(), deDriverDetails.getDeDriverId(), null, null); DeLogUtils.save(sysLogDTO); deDriverDetailsMapper.deleteByPrimaryKey(driverFileId); + DefaultJdbcProvider defaultJdbcProvider = (DefaultJdbcProvider)ProviderFactory.getProvider(deDriver.getType()); + defaultJdbcProvider.reloadCustomJdbcClassLoader(deDriver); } public DeDriverDetails saveJar(MultipartFile file, String driverId) throws Exception { @@ -129,6 +138,9 @@ public class DriverService { deDriverDetailsMapper.insert(deDriverDetails); SysLogDTO sysLogDTO = DeLogUtils.buildLog(SysLogConstants.OPERATE_TYPE.UPLOADFILE, SysLogConstants.SOURCE_TYPE.DRIVER_FILE, deDriverDetails.getId(), driverId, null, null); DeLogUtils.save(sysLogDTO); + DeDriver deDriver = deDriverMapper.selectByPrimaryKey(driverId); + DefaultJdbcProvider defaultJdbcProvider = (DefaultJdbcProvider)ProviderFactory.getProvider(deDriver.getType()); + defaultJdbcProvider.reloadCustomJdbcClassLoader(deDriver); return deDriverDetails; } diff --git a/backend/src/main/resources/i18n/messages_en_US.properties b/backend/src/main/resources/i18n/messages_en_US.properties index 91c15e3406..7c5fa0cfc6 100644 --- a/backend/src/main/resources/i18n/messages_en_US.properties +++ b/backend/src/main/resources/i18n/messages_en_US.properties @@ -154,4 +154,5 @@ SOURCE_TYPE_DRIVER=DRIVER SOURCE_TYPE_DRIVER_FILE=DRIVER FILE SOURCE_TYPE_MENU=MENU -I18N_DRIVER_NOT_DELETE=Drivers in use cannot be deleted \ No newline at end of file +I18N_DRIVER_NOT_DELETE=Drivers in use cannot be deleted +I18N_DRIVER_REPEAT_NAME=Driver name cannot be same. \ No newline at end of file diff --git a/backend/src/main/resources/i18n/messages_zh_CN.properties b/backend/src/main/resources/i18n/messages_zh_CN.properties index b0f7600640..ab615dae2a 100644 --- a/backend/src/main/resources/i18n/messages_zh_CN.properties +++ b/backend/src/main/resources/i18n/messages_zh_CN.properties @@ -158,3 +158,4 @@ I18N_USER=操作人 I18N_TIME=操作时间 I18N_DRIVER_NOT_DELETE=使用中的驱动不允许删除 +I18N_DRIVER_REPEAT_NAME=名称重复 diff --git a/backend/src/main/resources/i18n/messages_zh_TW.properties b/backend/src/main/resources/i18n/messages_zh_TW.properties index f69b3e047b..33343c94ec 100644 --- a/backend/src/main/resources/i18n/messages_zh_TW.properties +++ b/backend/src/main/resources/i18n/messages_zh_TW.properties @@ -153,4 +153,5 @@ SOURCE_TYPE_DRIVER=驅動 SOURCE_TYPE_DRIVER_FILE=驅動文件 SOURCE_TYPE_MENU=菜單 -I18N_DRIVER_NOT_DELETE=使用中的驅動不允許删除 \ No newline at end of file +I18N_DRIVER_NOT_DELETE=使用中的驅動不允許删除 +I18N_DRIVER_REPEAT_NAME=名稱重複 \ No newline at end of file