From 69d238e6138b873057356993e757aa495fe9518e Mon Sep 17 00:00:00 2001 From: AirTrioa <44222967+AirTrioa@users.noreply.github.com> Date: Wed, 5 Feb 2020 20:30:03 +0800 Subject: [PATCH] [BUG]Fix the bug of port identification failure when connecting Oracle with Sid mode (JDBC: Oracle: thin: @ < host >: < port > / < Sid >) (#4320) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [BUG]Fix the bug of port identification failure when connecting Oracle with Sid mode (JDBC: Oracle: thin: @ < host >: < port > / < Sid >) Co-authored-by: 吴晟 Wu Sheng --- .../connectionurl/parser/OracleURLParser.java | 18 +++++++++++++++++- .../connectionurl/parser/URLParserTest.java | 8 ++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/apache/skywalking/apm/plugin/jdbc/connectionurl/parser/OracleURLParser.java b/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/apache/skywalking/apm/plugin/jdbc/connectionurl/parser/OracleURLParser.java index 595ec4e48..44775e11b 100644 --- a/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/apache/skywalking/apm/plugin/jdbc/connectionurl/parser/OracleURLParser.java +++ b/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/apache/skywalking/apm/plugin/jdbc/connectionurl/parser/OracleURLParser.java @@ -136,6 +136,22 @@ public class OracleURLParser extends AbstractURLParser { private String[] splitDatabaseAddress(String address) { String[] hostSegment = address.split(":"); - return hostSegment; + if (hostSegment.length == 1 && super.fetchDatabaseNameFromURL().contains("/")) { + String[] portAndDatabaseName = super.fetchDatabaseNameFromURL().split("/"); + return new String[]{hostSegment[0], portAndDatabaseName[0]}; + } else { + return hostSegment; + } + } + + @Override + protected String fetchDatabaseNameFromURL() { + String databaseName = super.fetchDatabaseNameFromURL(); + if (databaseName.contains("/")) { + String[] portAndDatabaseName = databaseName.split("/"); + return portAndDatabaseName[1]; + } else { + return databaseName; + } } } diff --git a/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/test/java/org/apache/skywalking/apm/plugin/jdbc/connectionurl/parser/URLParserTest.java b/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/test/java/org/apache/skywalking/apm/plugin/jdbc/connectionurl/parser/URLParserTest.java index 3eec7b031..bcf8b995d 100644 --- a/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/test/java/org/apache/skywalking/apm/plugin/jdbc/connectionurl/parser/URLParserTest.java +++ b/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/test/java/org/apache/skywalking/apm/plugin/jdbc/connectionurl/parser/URLParserTest.java @@ -82,6 +82,14 @@ public class URLParserTest { assertThat(connectionInfo.getDatabasePeer(), is("localhost:1522")); } + @Test + public void testParseOracleSID() { + ConnectionInfo connectionInfo = new URLParser().parser("jdbc:oracle:thin:@localhost:1522/orcl"); + assertThat(connectionInfo.getDBType(), is("Oracle")); + assertThat(connectionInfo.getDatabaseName(), is("orcl")); + assertThat(connectionInfo.getDatabasePeer(), is("localhost:1522")); + } + @Test public void testParseOracleServiceName() { ConnectionInfo connectionInfo = new URLParser().parser("jdbc:oracle:thin:@//localhost:1521/orcl");