Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adding Oracle & DAMENG Support #12120

Open
jackbluce opened this issue May 19, 2024 · 2 comments
Open

Adding Oracle & DAMENG Support #12120

jackbluce opened this issue May 19, 2024 · 2 comments
Labels
status/duplicate This issue or pull request already exists

Comments

@jackbluce
Copy link

Issue Description

Type: feature request

Describe what happened (or what feature you want)

Nacos works on Oracle & DAMENG databases.

Describe what you expected to happen

Using Oracle & DAMENG database as using MySQL.

How to reproduce it (as minimally and precisely as possible)

  1. maven

Tell us your environment

Windows 10, JDK8

Anything else we need to know?

No.

HERE IS MY CODES BELOW:

2.2.1.1(May 17, 2024)

  • Adding Oracle & DAMENG Support
    • Files:
      • pom.xml
      <!-- line 141~142 -->
      <oracle.jdbc.version>11.2.0.3</oracle.jdbc.version>
      <dm.jdbc.version>8.1.2.192</dm.jdbc.version>
      <!-- line 856~868 -->
      <dependency>
          <groupId>com.oracle</groupId>
          <artifactId>ojdbc6</artifactId>
          <version>${oracle.jdbc.version}</version>
      </dependency>
      <!-- Install DAMENG JDBC Driver to local maven repository:
      	mvn install:install-file -Dfile=DmJdbcDriver18.jar -DgroupId=com.dameng -DartifactId=DmJdbcDriver18 -Dversion=8.1.2.192 -Dpackaging=jar
      -->
      <dependency>
          <groupId>com.dameng</groupId>
          <artifactId>DmJdbcDriver18</artifactId>
          <version>${dm.jdbc.version}</version>
      </dependency>
      • .flattened-pom.xml
      <!-- line 121~122 -->
      <oracle.jdbc.version>11.2.0.3</oracle.jdbc.version>
      <dm.jdbc.version>8.1.2.192</dm.jdbc.version>
      <!-- line 331~340 -->
      <dependency>
          <groupId>com.oracle</groupId>
          <artifactId>ojdbc6</artifactId>
          <version>11.2.0.3</version>
      </dependency>
      <dependency>
          <groupId>com.dameng</groupId>
          <artifactId>DmJdbcDriver18</artifactId>
          <version>8.1.2.192</version>
      </dependency>
      • config/pom.xml
      <!-- line 63~70 -->
      <dependency>
          <groupId>com.oracle</groupId>
          <artifactId>ojdbc6</artifactId>
      </dependency>
      <dependency>
          <groupId>com.dameng</groupId>
          <artifactId>DmJdbcDriver18</artifactId>
      </dependency>
      • config/.flattened-pom.xml
      <!-- line 74~83 -->
      <dependency>
      	<groupId>com.oracle</groupId>
      	<artifactId>ojdbc6</artifactId>
      	<version>11.2.0.3</version>
      </dependency>
      <dependency>
      	<groupId>com.dameng</groupId>
      	<artifactId>DmJdbcDriver18</artifactId>
      	<version>8.1.2.192</version>
      </dependency>
      • naming/pom.xml
      <!-- line 103~110 -->
      <dependency>
          <groupId>com.oracle</groupId>
          <artifactId>ojdbc6</artifactId>
      </dependency>
      <dependency>
           <groupId>com.dameng</groupId>
           <artifactId>DmJdbcDriver18</artifactId>
      </dependency>
      • naming/.flattened-pom.xml
      <!-- line 110~119 -->
      <dependency>
      	    <groupId>com.oracle</groupId>
      	    <artifactId>ojdbc6</artifactId>
      	    <version>11.2.0.3</version>
      </dependency>
      <dependency>
      	    <groupId>com.dameng</groupId>
      	    <artifactId>DmJdbcDriver18</artifactId>
      	    <version>8.1.2.192</version>
      </dependency>
      • config/src/main/java/com/alibaba/nacos/config/server/constant/PropertiesConstant.java
      // Adding database definition of Oracle and DAMENG.
      public static final String ORACLE = "oracle";
      
      public static final String DAMENG = "dameng";
      • core/src/main/java/com/alibaba/nacos/core/listener/StartingApplicationListener.java
      // Adding database definition of Oracle and DAMENG.
      private static final String ORACLE_DATABASE = "oracle";
      
      private static final String DAMENG_DATABASE = "dameng";
      • plugin/datasource/src/main/java/com/alibaba/nacos/plugin/datasource/constants/DataSourceConstant.java
      // Adding database definition of Oracle and DAMENG.
      public static final String ORACLE = "oracle";
      
      public static final String DAMENG = "dameng";
      • config/src/main/java/com/alibaba/nacos/config/server/service/repository/extrnal/ExternalConfigInfoPersistServiceImpl.java
      // line 177, changing the catching exception type:
      // DAMENG throws DataIntegrityViolationException, which is the super class of DuplicateKeyException.
      @Override
      public void insertOrUpdate(String srcIp, String srcUser, ConfigInfo configInfo, Timestamp time,
              Map<String, Object> configAdvanceInfo, boolean notify) {
          try {
              addConfigInfo(srcIp, srcUser, configInfo, time, configAdvanceInfo, notify);
          } catch (DataIntegrityViolationException/* | DuplicateKeyException*/ ive) { // Unique constraint conflict, DAMENG throws DataIntegrityViolationException,
                                                                                      // which is the super class of DuplicateKeyException.
              updateConfigInfo(configInfo, srcIp, srcUser, time, configAdvanceInfo, notify);
          }
      }
      • plugin/datasource/src/main/resources/META-INF/services/com.alibaba.nacos.plugin.datasource.mapper.Mapper
      # Adding the implementations of Mapper of Oracle and DAMENG.
      com.alibaba.nacos.plugin.datasource.impl.oracle.ConfigInfoAggrMapperByOracle
      com.alibaba.nacos.plugin.datasource.impl.oracle.ConfigInfoBetaMapperByOracle
      com.alibaba.nacos.plugin.datasource.impl.oracle.ConfigInfoMapperByOracle
      com.alibaba.nacos.plugin.datasource.impl.oracle.ConfigInfoTagMapperByOracle
      com.alibaba.nacos.plugin.datasource.impl.oracle.ConfigTagsRelationMapperByOracle
      com.alibaba.nacos.plugin.datasource.impl.oracle.HistoryConfigInfoMapperByOracle
      com.alibaba.nacos.plugin.datasource.impl.oracle.TenantInfoMapperByOracle
      com.alibaba.nacos.plugin.datasource.impl.oracle.TenantCapacityMapperByOracle
      com.alibaba.nacos.plugin.datasource.impl.oracle.GroupCapacityMapperByOracle
      
      com.alibaba.nacos.plugin.datasource.impl.dameng.ConfigInfoAggrMapperByDAMENG
      com.alibaba.nacos.plugin.datasource.impl.dameng.ConfigInfoBetaMapperByDAMENG
      com.alibaba.nacos.plugin.datasource.impl.dameng.ConfigInfoMapperByDAMENG
      com.alibaba.nacos.plugin.datasource.impl.dameng.ConfigInfoTagMapperByDAMENG
      com.alibaba.nacos.plugin.datasource.impl.dameng.ConfigTagsRelationMapperByDAMENG
      com.alibaba.nacos.plugin.datasource.impl.dameng.HistoryConfigInfoMapperByDAMENG
      com.alibaba.nacos.plugin.datasource.impl.dameng.TenantInfoMapperByDAMENG
      com.alibaba.nacos.plugin.datasource.impl.dameng.TenantCapacityMapperByDAMENG
      com.alibaba.nacos.plugin.datasource.impl.dameng.GroupCapacityMapperByDAMENG
    • Packages:
      • plugin/datasource/src/main/java/com/alibaba/nacos/plugin/datasource/impl/oracle/**
      • plugin/datasource/src/main/java/com/alibaba/nacos/plugin/datasource/impl/dameng/**

CODES

datasource-plugin-oracle-dameng.tar.gz

@KomachiSion
Copy link
Collaborator

@KomachiSion KomachiSion added the status/duplicate This issue or pull request already exists label May 24, 2024
@KomachiSion
Copy link
Collaborator

Nacos plugin repo has support oracle and dameng, can you try these plugins?

If these plugins can't work, then submit issue with your new research result for these plugins.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
status/duplicate This issue or pull request already exists
Projects
None yet
Development

No branches or pull requests

2 participants