You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@skywalking.apache.org by GitBox <gi...@apache.org> on 2018/03/22 09:55:37 UTC

[GitHub] wu-sheng closed pull request #770: Decouple JDBCURL parser logic from URLParser question

wu-sheng closed pull request #770: Decouple JDBCURL parser logic from URLParser question
URL: https://github.com/apache/incubator-skywalking/pull/770
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/apache/skywalking/apm/plugin/jdbc/connectionurl/parser/H2URLParser.java b/apm-sniffer/apm-sdk-plugin/h2-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/h2/parser/H2URLParser.java
similarity index 93%
rename from apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/apache/skywalking/apm/plugin/jdbc/connectionurl/parser/H2URLParser.java
rename to apm-sniffer/apm-sdk-plugin/h2-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/h2/parser/H2URLParser.java
index 08c4b636d..ad1fd687e 100644
--- a/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/apache/skywalking/apm/plugin/jdbc/connectionurl/parser/H2URLParser.java
+++ b/apm-sniffer/apm-sdk-plugin/h2-1.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/h2/parser/H2URLParser.java
@@ -17,9 +17,11 @@
  */
 
 
-package org.apache.skywalking.apm.plugin.jdbc.connectionurl.parser;
+package org.apache.skywalking.apm.plugin.jdbc.h2.parser;
 
 import org.apache.skywalking.apm.network.trace.component.ComponentsDefine;
+import org.apache.skywalking.apm.plugin.jdbc.connectionurl.parser.AbstractURLParser;
+import org.apache.skywalking.apm.plugin.jdbc.connectionurl.parser.URLLocation;
 import org.apache.skywalking.apm.plugin.jdbc.trace.ConnectionInfo;
 
 /**
@@ -55,6 +57,10 @@ public H2URLParser(String url) {
         super(url);
     }
 
+    public H2URLParser() {
+        this("");
+    }
+
     @Override
     protected URLLocation fetchDatabaseHostsIndexRange() {
         int hostLabelStartIndex = url.indexOf("//");
@@ -92,6 +98,10 @@ public ConnectionInfo parse() {
         }
     }
 
+    @Override public String getJDBCURLPrefix() {
+        return "jdbc:h2";
+    }
+
     /**
      * Fetch range index that the database name from connection url if H2 database running with file mode.
      *
diff --git a/apm-sniffer/apm-sdk-plugin/h2-1.x-plugin/src/main/resources/META-INF/services/org.apache.skywalking.apm.plugin.jdbc.connectionurl.parser.ConnectionURLParser b/apm-sniffer/apm-sdk-plugin/h2-1.x-plugin/src/main/resources/META-INF/services/org.apache.skywalking.apm.plugin.jdbc.connectionurl.parser.ConnectionURLParser
new file mode 100644
index 000000000..89c0b82f4
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/h2-1.x-plugin/src/main/resources/META-INF/services/org.apache.skywalking.apm.plugin.jdbc.connectionurl.parser.ConnectionURLParser
@@ -0,0 +1 @@
+org.apache.skywalking.apm.plugin.jdbc.h2.parser.H2URLParser
\ No newline at end of file
diff --git a/apm-sniffer/apm-sdk-plugin/h2-1.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/h2/URLParserTest.java b/apm-sniffer/apm-sdk-plugin/h2-1.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/h2/URLParserTest.java
new file mode 100644
index 000000000..42f602825
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/h2-1.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/h2/URLParserTest.java
@@ -0,0 +1,61 @@
+/*
+ * 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.skywalking.apm.plugin.jdbc.h2;
+
+import org.apache.skywalking.apm.plugin.jdbc.connectionurl.parser.URLParser;
+import org.junit.Test;
+import org.apache.skywalking.apm.plugin.jdbc.trace.ConnectionInfo;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+public class URLParserTest {
+    @Test
+    public void testParseH2JDBCURLWithEmbedded() {
+        ConnectionInfo connectionInfo = new URLParser().parser("jdbc:h2:file:/data/sample");
+        assertThat(connectionInfo.getDBType(), is("H2"));
+        assertThat(connectionInfo.getDatabaseName(), is("/data/sample"));
+        assertThat(connectionInfo.getDatabasePeer(), is("localhost:-1"));
+    }
+
+    @Test
+    public void testParseH2JDBCURLWithEmbeddedRunningInWindows() {
+        ConnectionInfo connectionInfo = new URLParser().parser("jdbc:h2:file:C:/data/sample");
+        assertThat(connectionInfo.getDBType(), is("H2"));
+        assertThat(connectionInfo.getDatabaseName(), is("C:/data/sample"));
+        assertThat(connectionInfo.getDatabasePeer(), is("localhost:-1"));
+    }
+
+    @Test
+    public void testParseH2JDBCURLWithMemoryMode() {
+        ConnectionInfo connectionInfo = new URLParser().parser("jdbc:h2:mem:test_mem");
+        assertThat(connectionInfo.getDBType(), is("H2"));
+        assertThat(connectionInfo.getDatabaseName(), is("test_mem"));
+        assertThat(connectionInfo.getDatabasePeer(), is("localhost:-1"));
+    }
+
+    @Test
+    public void testParseH2JDBCURL() {
+        ConnectionInfo connectionInfo = new URLParser().parser("jdbc:h2:tcp://localhost:8084/~/sample");
+        assertThat(connectionInfo.getDBType(), is("H2"));
+        assertThat(connectionInfo.getDatabaseName(), is("sample"));
+        assertThat(connectionInfo.getDatabasePeer(), is("localhost:8084"));
+    }
+}
\ No newline at end of file
diff --git a/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/apache/skywalking/apm/plugin/jdbc/connectionurl/parser/ConnectionURLParser.java b/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/apache/skywalking/apm/plugin/jdbc/connectionurl/parser/ConnectionURLParser.java
index 1cae213d2..e4a59c0c4 100644
--- a/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/apache/skywalking/apm/plugin/jdbc/connectionurl/parser/ConnectionURLParser.java
+++ b/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/apache/skywalking/apm/plugin/jdbc/connectionurl/parser/ConnectionURLParser.java
@@ -28,4 +28,11 @@
      * @return connection info.
      */
     ConnectionInfo parse();
+
+    /**
+     * return the parser corresponding JDBC prefix
+     *
+     * @return JDBC prefix String
+     */
+    String getJDBCURLPrefix();
 }
diff --git a/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/apache/skywalking/apm/plugin/jdbc/connectionurl/parser/URLParser.java b/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/apache/skywalking/apm/plugin/jdbc/connectionurl/parser/URLParser.java
index 7cfe12c44..2986253ab 100644
--- a/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/apache/skywalking/apm/plugin/jdbc/connectionurl/parser/URLParser.java
+++ b/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/apache/skywalking/apm/plugin/jdbc/connectionurl/parser/URLParser.java
@@ -16,9 +16,13 @@
  *
  */
 
-
 package org.apache.skywalking.apm.plugin.jdbc.connectionurl.parser;
 
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.sql.Connection;
+import java.util.Iterator;
+import java.util.ServiceLoader;
 import org.apache.skywalking.apm.plugin.jdbc.trace.ConnectionInfo;
 
 /**
@@ -29,22 +33,36 @@
  */
 public class URLParser {
 
-    private static final String MYSQL_JDBC_URL_PREFIX = "jdbc:mysql";
-    private static final String ORACLE_JDBC_URL_PREFIX = "jdbc:oracle";
-    private static final String H2_JDBC_URL_PREFIX = "jdbc:h2";
-    private static final String POSTGRESQL_JDBC_URL_PREFIX = "jdbc:postgresql";
+    private static ServiceLoader<ConnectionURLParser> JDBCPARSERS
+        = ServiceLoader.load(ConnectionURLParser.class, URLParser.class
+        .getClassLoader());
+
+    public static ConnectionInfo parser(String url, Connection conn) {
+        ConnectionInfo rc = parser(url);
+        return rc;
+    }
 
     public static ConnectionInfo parser(String url) {
-        ConnectionURLParser parser = null;
-        if (url.startsWith(MYSQL_JDBC_URL_PREFIX)) {
-            parser = new MysqlURLParser(url);
-        } else if (url.startsWith(ORACLE_JDBC_URL_PREFIX)) {
-            parser = new OracleURLParser(url);
-        } else if (url.startsWith(H2_JDBC_URL_PREFIX)) {
-            parser = new H2URLParser(url);
-        } else if (url.startsWith(POSTGRESQL_JDBC_URL_PREFIX)) {
-            parser = new PostgreSQLURLParser(url);
+        Iterator<ConnectionURLParser> it = JDBCPARSERS.iterator();
+        while (it.hasNext()) {
+            ConnectionURLParser parser = (ConnectionURLParser)it.next();
+            if (url.startsWith(parser.getJDBCURLPrefix())) {
+                try {
+                    Constructor<? extends ConnectionURLParser> rc = parser.getClass().getConstructor(String.class);
+                    parser = rc.newInstance(url);
+                    return parser.parse();
+                } catch (NoSuchMethodException e) {
+                    e.printStackTrace();
+                } catch (IllegalAccessException e) {
+                    e.printStackTrace();
+                } catch (InstantiationException e) {
+                    e.printStackTrace();
+                } catch (InvocationTargetException e) {
+                    e.printStackTrace();
+                }
+            }
         }
-        return parser.parse();
+        // required special handling,
+        throw new RuntimeException("no parser associate with " + url);
     }
 }
diff --git a/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/apache/skywalking/apm/plugin/jdbc/trace/ConnectionInfo.java b/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/apache/skywalking/apm/plugin/jdbc/trace/ConnectionInfo.java
index a925197a3..43524ec87 100644
--- a/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/apache/skywalking/apm/plugin/jdbc/trace/ConnectionInfo.java
+++ b/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/apache/skywalking/apm/plugin/jdbc/trace/ConnectionInfo.java
@@ -16,14 +16,13 @@
  *
  */
 
-
 package org.apache.skywalking.apm.plugin.jdbc.trace;
 
-import org.apache.skywalking.apm.network.trace.component.OfficialComponent;
+import org.apache.skywalking.apm.network.trace.component.Component;
 
 /**
  * {@link ConnectionInfo} stored the jdbc connection info, the connection info contains db type, host, port, database
- * name. The {@link #hosts} be null if {@link #host} is not null.
+ * name.
  *
  * @author zhangxin
  */
@@ -42,16 +41,16 @@
     /**
      * Component
      */
-    private final OfficialComponent component;
+    private final Component component;
 
-    public ConnectionInfo(OfficialComponent component, String dbType, String host, int port, String databaseName) {
+    public ConnectionInfo(Component component, String dbType, String host, int port, String databaseName) {
         this.dbType = dbType;
         this.databasePeer = host + ":" + port;
         this.databaseName = databaseName;
         this.component = component;
     }
 
-    public ConnectionInfo(OfficialComponent component, String dbType, String hosts, String databaseName) {
+    public ConnectionInfo(Component component, String dbType, String hosts, String databaseName) {
         this.dbType = dbType;
         this.databasePeer = hosts;
         this.databaseName = databaseName;
@@ -70,7 +69,7 @@ public String getDatabasePeer() {
         return databasePeer;
     }
 
-    public OfficialComponent getComponent() {
+    public Component getComponent() {
         return component;
     }
 
diff --git a/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/apache/skywalking/apm/plugin/jdbc/connectionurl/parser/MysqlURLParser.java b/apm-sniffer/apm-sdk-plugin/mysql-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mysql/parser/MysqlURLParser.java
similarity index 90%
rename from apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/apache/skywalking/apm/plugin/jdbc/connectionurl/parser/MysqlURLParser.java
rename to apm-sniffer/apm-sdk-plugin/mysql-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mysql/parser/MysqlURLParser.java
index c45750fd7..2cfeb78b8 100644
--- a/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/apache/skywalking/apm/plugin/jdbc/connectionurl/parser/MysqlURLParser.java
+++ b/apm-sniffer/apm-sdk-plugin/mysql-5.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/mysql/parser/MysqlURLParser.java
@@ -16,10 +16,11 @@
  *
  */
 
-
-package org.apache.skywalking.apm.plugin.jdbc.connectionurl.parser;
+package org.apache.skywalking.apm.plugin.jdbc.mysql.parser;
 
 import org.apache.skywalking.apm.network.trace.component.ComponentsDefine;
+import org.apache.skywalking.apm.plugin.jdbc.connectionurl.parser.AbstractURLParser;
+import org.apache.skywalking.apm.plugin.jdbc.connectionurl.parser.URLLocation;
 import org.apache.skywalking.apm.plugin.jdbc.trace.ConnectionInfo;
 
 /**
@@ -37,6 +38,10 @@
     private static final int DEFAULT_PORT = 3306;
     private static final String DB_TYPE = "Mysql";
 
+    public MysqlURLParser() {
+        this("");
+    }
+
     public MysqlURLParser(String url) {
         super(url);
     }
@@ -83,4 +88,8 @@ public ConnectionInfo parse() {
         }
     }
 
+    @Override public String getJDBCURLPrefix() {
+        return "jdbc:mysql";
+    }
+
 }
diff --git a/apm-sniffer/apm-sdk-plugin/mysql-5.x-plugin/src/main/resources/META-INF/services/org.apache.skywalking.apm.plugin.jdbc.connectionurl.parser.ConnectionURLParser b/apm-sniffer/apm-sdk-plugin/mysql-5.x-plugin/src/main/resources/META-INF/services/org.apache.skywalking.apm.plugin.jdbc.connectionurl.parser.ConnectionURLParser
new file mode 100644
index 000000000..9ce4f9f40
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/mysql-5.x-plugin/src/main/resources/META-INF/services/org.apache.skywalking.apm.plugin.jdbc.connectionurl.parser.ConnectionURLParser
@@ -0,0 +1 @@
+org.apache.skywalking.apm.plugin.jdbc.mysql.parser.MysqlURLParser
\ No newline at end of file
diff --git a/apm-sniffer/apm-sdk-plugin/mysql-5.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mysql/URLParserTest.java b/apm-sniffer/apm-sdk-plugin/mysql-5.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mysql/URLParserTest.java
new file mode 100644
index 000000000..585ac1419
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/mysql-5.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/mysql/URLParserTest.java
@@ -0,0 +1,61 @@
+/*
+ * 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.skywalking.apm.plugin.jdbc.mysql;
+
+import org.apache.skywalking.apm.plugin.jdbc.connectionurl.parser.URLParser;
+import org.apache.skywalking.apm.plugin.jdbc.trace.ConnectionInfo;
+import org.junit.Test;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+public class URLParserTest {
+    @Test
+    public void testParseMysqlJDBCURLWithHost() {
+        ConnectionInfo connectionInfo = new URLParser().parser("jdbc:mysql//primaryhost/test");
+        assertThat(connectionInfo.getDBType(), is("Mysql"));
+        assertThat(connectionInfo.getDatabaseName(), is("test"));
+        assertThat(connectionInfo.getDatabasePeer(), is("primaryhost:3306"));
+    }
+
+    @Test
+    public void testParseMysqlJDBCURLWithHostAndPort() {
+        ConnectionInfo connectionInfo = new URLParser().parser("jdbc:mysql//primaryhost:3307/test?profileSQL=true");
+        assertThat(connectionInfo.getDBType(), is("Mysql"));
+        assertThat(connectionInfo.getDatabaseName(), is("test"));
+        assertThat(connectionInfo.getDatabasePeer(), is("primaryhost:3307"));
+    }
+
+    @Test
+    public void testParseMysqlJDBCURLWithMultiHost() {
+        ConnectionInfo connectionInfo = new URLParser().parser("jdbc:mysql//primaryhost:3307,secondaryhost1,secondaryhost2/test?profileSQL=true");
+        assertThat(connectionInfo.getDBType(), is("Mysql"));
+        assertThat(connectionInfo.getDatabaseName(), is("test"));
+        assertThat(connectionInfo.getDatabasePeer(), is("primaryhost:3307,secondaryhost1:3306,secondaryhost2:3306,"));
+    }
+
+    @Test
+    public void testParseMysqlJDBCURLWithConnectorJs() {
+        ConnectionInfo connectionInfo = new URLParser().parser("jdbc:mysql:replication://master,slave1,slave2,slave3/test");
+        assertThat(connectionInfo.getDBType(), is("Mysql"));
+        assertThat(connectionInfo.getDatabaseName(), is("test"));
+        assertThat(connectionInfo.getDatabasePeer(), is("master:3306,slave1:3306,slave2:3306,slave3:3306,"));
+    }
+
+}
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/oracle-10.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/oracle/parser/OracleURLParser.java
similarity index 94%
rename from apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/apache/skywalking/apm/plugin/jdbc/connectionurl/parser/OracleURLParser.java
rename to apm-sniffer/apm-sdk-plugin/oracle-10.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/oracle/parser/OracleURLParser.java
index 2f5b24a32..9621f5bf2 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/oracle-10.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/oracle/parser/OracleURLParser.java
@@ -16,12 +16,13 @@
  *
  */
 
-
-package org.apache.skywalking.apm.plugin.jdbc.connectionurl.parser;
+package org.apache.skywalking.apm.plugin.jdbc.oracle.parser;
 
 import java.util.ArrayList;
 import java.util.List;
 import org.apache.skywalking.apm.network.trace.component.ComponentsDefine;
+import org.apache.skywalking.apm.plugin.jdbc.connectionurl.parser.AbstractURLParser;
+import org.apache.skywalking.apm.plugin.jdbc.connectionurl.parser.URLLocation;
 import org.apache.skywalking.apm.plugin.jdbc.trace.ConnectionInfo;
 import org.apache.skywalking.apm.util.StringUtil;
 
@@ -93,6 +94,10 @@ public ConnectionInfo parse() {
         }
     }
 
+    @Override public String getJDBCURLPrefix() {
+        return "jdbc:oracle";
+    }
+
     private ConnectionInfo commonsURLParse() {
         String host = fetchDatabaseHostsFromURL();
         String[] hostSegment = splitDatabaseAddress(host);
diff --git a/apm-sniffer/apm-sdk-plugin/oracle-10.x-plugin/src/main/resources/META-INF/services/org.apache.skywalking.apm.plugin.jdbc.connectionurl.parser.ConnectionURLParser b/apm-sniffer/apm-sdk-plugin/oracle-10.x-plugin/src/main/resources/META-INF/services/org.apache.skywalking.apm.plugin.jdbc.connectionurl.parser.ConnectionURLParser
new file mode 100644
index 000000000..ea300c2af
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/oracle-10.x-plugin/src/main/resources/META-INF/services/org.apache.skywalking.apm.plugin.jdbc.connectionurl.parser.ConnectionURLParser
@@ -0,0 +1 @@
+org.apache.skywalking.apm.plugin.jdbc.oracle.parser.OracleURLParser
\ No newline at end of file
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/oracle-10.x-plugin/src/test/java/apm-sniffer/apm-sdk-plugin/oracle-10.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/oracle/URLParserTest.java
similarity index 53%
rename from apm-sniffer/apm-sdk-plugin/jdbc-commons/src/test/java/org/apache/skywalking/apm/plugin/jdbc/connectionurl/parser/URLParserTest.java
rename to apm-sniffer/apm-sdk-plugin/oracle-10.x-plugin/src/test/java/apm-sniffer/apm-sdk-plugin/oracle-10.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/oracle/URLParserTest.java
index 77af8f559..296deb1bd 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/oracle-10.x-plugin/src/test/java/apm-sniffer/apm-sdk-plugin/oracle-10.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jdbc/oracle/URLParserTest.java
@@ -26,38 +26,6 @@
 import static org.hamcrest.MatcherAssert.assertThat;
 
 public class URLParserTest {
-    @Test
-    public void testParseMysqlJDBCURLWithHost() {
-        ConnectionInfo connectionInfo = new URLParser().parser("jdbc:mysql//primaryhost/test");
-        assertThat(connectionInfo.getDBType(), is("Mysql"));
-        assertThat(connectionInfo.getDatabaseName(), is("test"));
-        assertThat(connectionInfo.getDatabasePeer(), is("primaryhost:3306"));
-    }
-
-    @Test
-    public void testParseMysqlJDBCURLWithHostAndPort() {
-        ConnectionInfo connectionInfo = new URLParser().parser("jdbc:mysql//primaryhost:3307/test?profileSQL=true");
-        assertThat(connectionInfo.getDBType(), is("Mysql"));
-        assertThat(connectionInfo.getDatabaseName(), is("test"));
-        assertThat(connectionInfo.getDatabasePeer(), is("primaryhost:3307"));
-    }
-
-    @Test
-    public void testParseMysqlJDBCURLWithMultiHost() {
-        ConnectionInfo connectionInfo = new URLParser().parser("jdbc:mysql//primaryhost:3307,secondaryhost1,secondaryhost2/test?profileSQL=true");
-        assertThat(connectionInfo.getDBType(), is("Mysql"));
-        assertThat(connectionInfo.getDatabaseName(), is("test"));
-        assertThat(connectionInfo.getDatabasePeer(), is("primaryhost:3307,secondaryhost1:3306,secondaryhost2:3306,"));
-    }
-
-    @Test
-    public void testParseMysqlJDBCURLWithConnectorJs() {
-        ConnectionInfo connectionInfo = new URLParser().parser("jdbc:mysql:replication://master,slave1,slave2,slave3/test");
-        assertThat(connectionInfo.getDBType(), is("Mysql"));
-        assertThat(connectionInfo.getDatabaseName(), is("test"));
-        assertThat(connectionInfo.getDatabasePeer(), is("master:3306,slave1:3306,slave2:3306,slave3:3306,"));
-    }
-
     @Test
     public void testParseOracleJDBCURLWithHost() {
         ConnectionInfo connectionInfo = new URLParser().parser("jdbc:oracle:thin:@localhost:orcl");
@@ -105,36 +73,4 @@ public void testParseOracleJDBCURLWithUserNameAndPassword() {
         assertThat(connectionInfo.getDatabaseName(), is("orcl"));
         assertThat(connectionInfo.getDatabasePeer(), is("myhost:1521"));
     }
-
-    @Test
-    public void testParseH2JDBCURLWithEmbedded() {
-        ConnectionInfo connectionInfo = new URLParser().parser("jdbc:h2:file:/data/sample");
-        assertThat(connectionInfo.getDBType(), is("H2"));
-        assertThat(connectionInfo.getDatabaseName(), is("/data/sample"));
-        assertThat(connectionInfo.getDatabasePeer(), is("localhost:-1"));
-    }
-
-    @Test
-    public void testParseH2JDBCURLWithEmbeddedRunningInWindows() {
-        ConnectionInfo connectionInfo = new URLParser().parser("jdbc:h2:file:C:/data/sample");
-        assertThat(connectionInfo.getDBType(), is("H2"));
-        assertThat(connectionInfo.getDatabaseName(), is("C:/data/sample"));
-        assertThat(connectionInfo.getDatabasePeer(), is("localhost:-1"));
-    }
-
-    @Test
-    public void testParseH2JDBCURLWithMemoryMode() {
-        ConnectionInfo connectionInfo = new URLParser().parser("jdbc:h2:mem:test_mem");
-        assertThat(connectionInfo.getDBType(), is("H2"));
-        assertThat(connectionInfo.getDatabaseName(), is("test_mem"));
-        assertThat(connectionInfo.getDatabasePeer(), is("localhost:-1"));
-    }
-
-    @Test
-    public void testParseH2JDBCURL() {
-        ConnectionInfo connectionInfo = new URLParser().parser("jdbc:h2:tcp://localhost:8084/~/sample");
-        assertThat(connectionInfo.getDBType(), is("H2"));
-        assertThat(connectionInfo.getDatabaseName(), is("sample"));
-        assertThat(connectionInfo.getDatabasePeer(), is("localhost:8084"));
-    }
-}
+}
\ No newline at end of file
diff --git a/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/apache/skywalking/apm/plugin/jdbc/connectionurl/parser/PostgreSQLURLParser.java b/apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/postgresql/parser/PostgreSQLURLParser.java
similarity index 90%
rename from apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/apache/skywalking/apm/plugin/jdbc/connectionurl/parser/PostgreSQLURLParser.java
rename to apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/postgresql/parser/PostgreSQLURLParser.java
index c099ffaa5..03ff9faeb 100644
--- a/apm-sniffer/apm-sdk-plugin/jdbc-commons/src/main/java/org/apache/skywalking/apm/plugin/jdbc/connectionurl/parser/PostgreSQLURLParser.java
+++ b/apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdbc/postgresql/parser/PostgreSQLURLParser.java
@@ -17,9 +17,11 @@
  */
 
 
-package org.apache.skywalking.apm.plugin.jdbc.connectionurl.parser;
+package org.apache.skywalking.apm.plugin.jdbc.postgresql.parser;
 
 import org.apache.skywalking.apm.network.trace.component.ComponentsDefine;
+import org.apache.skywalking.apm.plugin.jdbc.connectionurl.parser.AbstractURLParser;
+import org.apache.skywalking.apm.plugin.jdbc.connectionurl.parser.URLLocation;
 import org.apache.skywalking.apm.plugin.jdbc.trace.ConnectionInfo;
 
 /**
@@ -37,6 +39,10 @@
     private static final int DEFAULT_PORT = 5432;
     private static final String DB_TYPE = "PostgreSQL";
 
+    public PostgreSQLURLParser() {
+        this("");
+    }
+
     public PostgreSQLURLParser(String url) {
         super(url);
     }
@@ -83,4 +89,8 @@ public ConnectionInfo parse() {
         }
     }
 
+    @Override public String getJDBCURLPrefix() {
+        return "jdbc:postgresql";
+    }
+
 }
diff --git a/apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/src/main/resources/META-INF/resources/org.apache.skywalking.apm.plugin.jdbc.connectionurl.parser.ConnectionURLParser b/apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/src/main/resources/META-INF/resources/org.apache.skywalking.apm.plugin.jdbc.connectionurl.parser.ConnectionURLParser
new file mode 100644
index 000000000..09e688aa9
--- /dev/null
+++ b/apm-sniffer/apm-sdk-plugin/postgresql-8.x-plugin/src/main/resources/META-INF/resources/org.apache.skywalking.apm.plugin.jdbc.connectionurl.parser.ConnectionURLParser
@@ -0,0 +1 @@
+org.apache.skywalking.apm.plugin.jdbc.postgresql.parser.PostgreSQLURLParser
\ No newline at end of file


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services