You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ko...@apache.org on 2022/12/23 07:07:52 UTC

[ignite-3] branch main updated: IGNITE-18418: Create ignite-jdbc module (#1454)

This is an automated email from the ASF dual-hosted git repository.

korlov pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/ignite-3.git


The following commit(s) were added to refs/heads/main by this push:
     new 7955a61496 IGNITE-18418: Create ignite-jdbc module (#1454)
7955a61496 is described below

commit 7955a61496576f5b3071d6b026043061ce740aa6
Author: Ivan Gagarkin <ga...@gmail.com>
AuthorDate: Fri Dec 23 11:07:46 2022 +0400

    IGNITE-18418: Create ignite-jdbc module (#1454)
    
    
    Co-authored-by: Ivan Gagarkin <ig...@gridgain.com>
---
 docs/_docs/sql/jdbc-driver.adoc                    |  2 +-
 examples/build.gradle                              |  1 +
 examples/pom.xml                                   |  5 ++
 modules/cli/build.gradle                           |  1 +
 modules/cli/pom.xml                                |  5 ++
 .../apache/ignite/internal/cli/sql/SqlManager.java |  2 +-
 .../apache/ignite/internal/jdbc/package-info.java  | 22 -----
 modules/jdbc/README.md                             |  3 +
 {examples => modules/jdbc}/build.gradle            | 50 +++++++++---
 {examples => modules/jdbc}/pom.xml                 | 94 ++++++++++++++++------
 .../apache/ignite}/jdbc/AbstractJdbcSelfTest.java  |  2 +-
 .../jdbc/ItJdbcAbstractStatementSelfTest.java      |  2 +-
 .../apache/ignite}/jdbc/ItJdbcBatchSelfTest.java   |  2 +-
 .../ignite}/jdbc/ItJdbcComplexDmlDdlSelfTest.java  |  2 +-
 .../ignite}/jdbc/ItJdbcComplexQuerySelfTest.java   |  2 +-
 .../jdbc/ItJdbcConnectionPropertiesTest.java       |  2 +-
 .../ignite}/jdbc/ItJdbcConnectionSelfTest.java     |  4 +-
 .../jdbc/ItJdbcDeleteStatementSelfTest.java        |  2 +-
 .../ignite}/jdbc/ItJdbcErrorsAbstractSelfTest.java |  2 +-
 .../apache/ignite}/jdbc/ItJdbcErrorsSelfTest.java  |  2 +-
 .../jdbc/ItJdbcInsertStatementSelfTest.java        |  2 +-
 .../apache/ignite}/jdbc/ItJdbcJoinsSelfTest.java   |  2 +-
 .../jdbc/ItJdbcMetadataPrimaryKeysSelfTest.java    |  2 +-
 .../ignite}/jdbc/ItJdbcMetadataSelfTest.java       |  2 +-
 .../ignite}/jdbc/ItJdbcMultiStatementSelfTest.java |  2 +-
 .../ignite}/jdbc/ItJdbcResultSetSelfTest.java      |  2 +-
 .../ignite}/jdbc/ItJdbcSelectAfterAlterTable.java  |  2 +-
 .../jdbc/ItJdbcStatementCancelSelfTest.java        |  2 +-
 .../ignite}/jdbc/ItJdbcStatementSelfTest.java      |  2 +-
 .../jdbc/ItJdbcUpdateStatementSelfTest.java        |  2 +-
 .../ignite/internal/jdbc/ConnectionProperties.java |  0
 .../internal/jdbc/ConnectionPropertiesImpl.java    |  0
 .../ignite/internal}/jdbc/IgniteJdbcDriver.java    |  4 +-
 .../jdbc/JdbcClientQueryCursorHandler.java         |  0
 .../internal/jdbc/JdbcClientQueryEventHandler.java |  0
 .../ignite/internal/jdbc/JdbcConnection.java       |  0
 .../ignite/internal/jdbc/JdbcDatabaseMetadata.java |  0
 .../internal/jdbc/JdbcPreparedStatement.java       |  6 +-
 .../internal/jdbc/JdbcQueryExecuteResponse.java    |  0
 .../apache/ignite/internal/jdbc/JdbcResultSet.java |  0
 .../internal/jdbc/JdbcResultSetMetadata.java       |  0
 .../apache/ignite/internal/jdbc/JdbcStatement.java |  0
 .../apache/ignite/internal}/jdbc/package-info.java |  2 +-
 packaging/build.gradle                             |  2 +
 parent/pom.xml                                     |  6 ++
 pom.xml                                            |  1 +
 settings.gradle                                    |  2 +
 47 files changed, 161 insertions(+), 89 deletions(-)

diff --git a/docs/_docs/sql/jdbc-driver.adoc b/docs/_docs/sql/jdbc-driver.adoc
index 2163dbbde9..3bc96afa02 100644
--- a/docs/_docs/sql/jdbc-driver.adoc
+++ b/docs/_docs/sql/jdbc-driver.adoc
@@ -28,7 +28,7 @@ This Beta release implementation of JDBC driver does not support the following f
 
 == Setting Up
 
-The name of the driver’s class is `org.apache.ignite.jdbc.IgniteJdbcDriver`. For instance, this is how you can open a JDBC connection to the cluster node listening on IP address `192.168.0.50`:
+The name of the driver’s class is `org.apache.ignite.internal.jdbc.IgniteJdbcDriver`. For instance, this is how you can open a JDBC connection to the cluster node listening on IP address `192.168.0.50`:
 
 [source, java]
 ----
diff --git a/examples/build.gradle b/examples/build.gradle
index 5bd7a96882..ccf074b5a7 100644
--- a/examples/build.gradle
+++ b/examples/build.gradle
@@ -25,6 +25,7 @@ description = 'ignite-examples'
 dependencies {
     implementation project(':ignite-runner')
     implementation project(':ignite-client')
+    implementation project(':ignite-jdbc')
     implementation project(':ignite-api')
 
     testImplementation project(':ignite-core')
diff --git a/examples/pom.xml b/examples/pom.xml
index 1e4deeb2dc..5626965472 100644
--- a/examples/pom.xml
+++ b/examples/pom.xml
@@ -60,6 +60,11 @@
             <artifactId>ignite-client</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>org.apache.ignite</groupId>
+            <artifactId>ignite-jdbc</artifactId>
+        </dependency>
+
         <!-- Test dependencies -->
         <dependency>
             <groupId>org.apache.ignite</groupId>
diff --git a/modules/cli/build.gradle b/modules/cli/build.gradle
index e68c746fea..4d646194bf 100644
--- a/modules/cli/build.gradle
+++ b/modules/cli/build.gradle
@@ -37,6 +37,7 @@ dependencies {
     implementation project(':ignite-core')
     implementation project(':ignite-api')
     implementation project(':ignite-client')
+    implementation project(':ignite-jdbc')
 
     implementation libs.fliptables
     implementation libs.jline.core
diff --git a/modules/cli/pom.xml b/modules/cli/pom.xml
index 63f383048f..9b819b1280 100644
--- a/modules/cli/pom.xml
+++ b/modules/cli/pom.xml
@@ -63,6 +63,11 @@
             <artifactId>ignite-client</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>org.apache.ignite</groupId>
+            <artifactId>ignite-jdbc</artifactId>
+        </dependency>
+
         <!-- 3rd party dependencies -->
         <dependency>
             <groupId>io.micronaut</groupId>
diff --git a/modules/cli/src/main/java/org/apache/ignite/internal/cli/sql/SqlManager.java b/modules/cli/src/main/java/org/apache/ignite/internal/cli/sql/SqlManager.java
index 2dbaad3c34..d032d10750 100644
--- a/modules/cli/src/main/java/org/apache/ignite/internal/cli/sql/SqlManager.java
+++ b/modules/cli/src/main/java/org/apache/ignite/internal/cli/sql/SqlManager.java
@@ -36,7 +36,7 @@ public class SqlManager implements AutoCloseable {
      */
     public SqlManager(String jdbcUrl) throws SQLException {
         try {
-            Class.forName("org.apache.ignite.jdbc.IgniteJdbcDriver");
+            Class.forName("org.apache.ignite.internal.jdbc.IgniteJdbcDriver");
         } catch (ClassNotFoundException e) {
             throw new SQLException("Jdbc driver not found.");
         }
diff --git a/modules/client/src/main/java/org/apache/ignite/internal/jdbc/package-info.java b/modules/client/src/main/java/org/apache/ignite/internal/jdbc/package-info.java
deleted file mode 100644
index f46f4e5217..0000000000
--- a/modules/client/src/main/java/org/apache/ignite/internal/jdbc/package-info.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * 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.
- */
-
-/**
- * Ignite jdbc client internal classes.
- */
-
-package org.apache.ignite.internal.jdbc;
\ No newline at end of file
diff --git a/modules/jdbc/README.md b/modules/jdbc/README.md
new file mode 100644
index 0000000000..1c16c43ab4
--- /dev/null
+++ b/modules/jdbc/README.md
@@ -0,0 +1,3 @@
+# Ignite JDBC Driver
+
+This module contains ignite JDBC Driver.
diff --git a/examples/build.gradle b/modules/jdbc/build.gradle
similarity index 58%
copy from examples/build.gradle
copy to modules/jdbc/build.gradle
index 5bd7a96882..71b0d726cb 100644
--- a/examples/build.gradle
+++ b/modules/jdbc/build.gradle
@@ -15,27 +15,53 @@
  * limitations under the License.
  */
 
+plugins {
+    alias(libs.plugins.shadow)
+}
+
 apply from: "$rootDir/buildscripts/java-core.gradle"
 apply from: "$rootDir/buildscripts/publishing.gradle"
 apply from: "$rootDir/buildscripts/java-junit5.gradle"
 apply from: "$rootDir/buildscripts/java-integration-test.gradle"
 
-description = 'ignite-examples'
-
 dependencies {
-    implementation project(':ignite-runner')
+    api project(':ignite-client-common')
     implementation project(':ignite-client')
     implementation project(':ignite-api')
+    implementation project(':ignite-core')
 
-    testImplementation project(':ignite-core')
-    testImplementation libs.hamcrest.core
+    implementation libs.jetbrains.annotations
+    implementation libs.auto.service.annotations
 
-    integrationTestImplementation project(':ignite-core')
-    integrationTestImplementation project(':ignite-storage-page-memory')
-    integrationTestImplementation project(':ignite-page-memory')
-    integrationTestImplementation project(':ignite-storage-rocksdb')
-    integrationTestImplementation project(':ignite-configuration')
-    integrationTestImplementation(testFixtures(project(':ignite-core')))
-    integrationTestImplementation libs.hamcrest.core
+    annotationProcessor libs.auto.service
+
+    integrationTestImplementation(testFixtures(project(":ignite-core")))
+    integrationTestImplementation(project(":ignite-runner"))
 }
 
+description = 'ignite-jdbc'
+
+shadowJar {
+    minimize()
+
+    [
+            'com.google',
+            'io.netty',
+            'it.unimi',
+            'org.jetbrains',
+            'org.msgpack'
+    ].forEach {
+        relocate(it, "${project.group}.shaded.$it")
+    }
+}
+
+configurations {
+    jdbcRelease {
+        canBeConsumed = true
+        canBeResolved = false
+    }
+}
+
+artifacts {
+    jdbcRelease shadowJar
+}
diff --git a/examples/pom.xml b/modules/jdbc/pom.xml
similarity index 54%
copy from examples/pom.xml
copy to modules/jdbc/pom.xml
index 1e4deeb2dc..1b45c7fea5 100644
--- a/examples/pom.xml
+++ b/modules/jdbc/pom.xml
@@ -26,33 +26,21 @@
         <groupId>org.apache.ignite</groupId>
         <artifactId>ignite-parent</artifactId>
         <version>1</version>
-        <relativePath>../parent/pom.xml</relativePath>
+        <relativePath>../../parent/pom.xml</relativePath>
     </parent>
 
-    <artifactId>ignite-examples</artifactId>
+    <artifactId>ignite-jdbc</artifactId>
     <version>3.0.0-SNAPSHOT</version>
 
-    <properties>
-        <root.directory>${pom.basedir}/..</root.directory>
-
-        <common.test.argLine>
-            --add-opens java.base/java.lang=ALL-UNNAMED
-            --add-opens java.base/java.lang.invoke=ALL-UNNAMED
-            --add-opens java.base/java.lang.reflect=ALL-UNNAMED
-            --add-opens java.base/java.io=ALL-UNNAMED
-            --add-opens java.base/java.nio=ALL-UNNAMED
-            --add-opens java.base/java.math=ALL-UNNAMED
-            --add-opens java.base/java.util=ALL-UNNAMED
-            --add-opens java.base/jdk.internal.misc=ALL-UNNAMED
-            -Dio.netty.tryReflectionSetAccessible=true
-            -Djava.util.logging.config.file=../config/java.util.logging.properties
-        </common.test.argLine>
-    </properties>
-
     <dependencies>
         <dependency>
             <groupId>org.apache.ignite</groupId>
-            <artifactId>ignite-runner</artifactId>
+            <artifactId>ignite-api</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.ignite</groupId>
+            <artifactId>ignite-core</artifactId>
         </dependency>
 
         <dependency>
@@ -60,12 +48,34 @@
             <artifactId>ignite-client</artifactId>
         </dependency>
 
-        <!-- Test dependencies -->
         <dependency>
             <groupId>org.apache.ignite</groupId>
-            <artifactId>ignite-core</artifactId>
+            <artifactId>ignite-client-common</artifactId>
+        </dependency>
+
+        <!--        Test dependencies-->
+        <dependency>
+            <groupId>org.hamcrest</groupId>
+            <artifactId>hamcrest</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>com.github.npathai</groupId>
+            <artifactId>hamcrest-optional</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.mockito</groupId>
+            <artifactId>mockito-junit-jupiter</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>io.micronaut.test</groupId>
+            <artifactId>micronaut-test-junit5</artifactId>
             <scope>test</scope>
-            <type>test-jar</type>
         </dependency>
 
         <dependency>
@@ -87,9 +97,43 @@
         </dependency>
 
         <dependency>
-            <groupId>org.hamcrest</groupId>
-            <artifactId>hamcrest</artifactId>
+            <groupId>org.apache.ignite</groupId>
+            <artifactId>ignite-core</artifactId>
+            <scope>test</scope>
+            <type>test-jar</type>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.ignite</groupId>
+            <artifactId>ignite-runner</artifactId>
             <scope>test</scope>
         </dependency>
     </dependencies>
+
+    <build>
+        <resources>
+            <resource>
+                <directory>src/main/resources</directory>
+                <filtering>true</filtering>
+            </resource>
+        </resources>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-dependency-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <phase>install</phase>
+                        <goals>
+                            <goal>copy-dependencies</goal>
+                        </goals>
+                        <configuration>
+                            <outputDirectory>${project.build.directory}/libs</outputDirectory>
+                            <includeScope>runtime</includeScope>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
 </project>
diff --git a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/jdbc/AbstractJdbcSelfTest.java b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/AbstractJdbcSelfTest.java
similarity index 99%
rename from modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/jdbc/AbstractJdbcSelfTest.java
rename to modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/AbstractJdbcSelfTest.java
index 43c33dfcae..87651d33f9 100644
--- a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/jdbc/AbstractJdbcSelfTest.java
+++ b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/AbstractJdbcSelfTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.internal.runner.app.jdbc;
+package org.apache.ignite.jdbc;
 
 import static org.apache.ignite.internal.testframework.IgniteTestUtils.testNodeName;
 import static org.apache.ignite.internal.testframework.matchers.CompletableFutureMatcher.willCompleteSuccessfully;
diff --git a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/jdbc/ItJdbcAbstractStatementSelfTest.java b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcAbstractStatementSelfTest.java
similarity index 97%
rename from modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/jdbc/ItJdbcAbstractStatementSelfTest.java
rename to modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcAbstractStatementSelfTest.java
index 852327413f..f887a6a74b 100644
--- a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/jdbc/ItJdbcAbstractStatementSelfTest.java
+++ b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcAbstractStatementSelfTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.internal.runner.app.jdbc;
+package org.apache.ignite.jdbc;
 
 import java.sql.Statement;
 import org.junit.jupiter.api.AfterAll;
diff --git a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/jdbc/ItJdbcBatchSelfTest.java b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcBatchSelfTest.java
similarity index 99%
rename from modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/jdbc/ItJdbcBatchSelfTest.java
rename to modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcBatchSelfTest.java
index e6adc30f48..07304eab9d 100644
--- a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/jdbc/ItJdbcBatchSelfTest.java
+++ b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcBatchSelfTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.internal.runner.app.jdbc;
+package org.apache.ignite.jdbc;
 
 import static org.junit.jupiter.api.Assertions.assertArrayEquals;
 import static org.junit.jupiter.api.Assertions.assertEquals;
diff --git a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/jdbc/ItJdbcComplexDmlDdlSelfTest.java b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcComplexDmlDdlSelfTest.java
similarity index 99%
rename from modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/jdbc/ItJdbcComplexDmlDdlSelfTest.java
rename to modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcComplexDmlDdlSelfTest.java
index 30c88ac069..b6510b5b30 100644
--- a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/jdbc/ItJdbcComplexDmlDdlSelfTest.java
+++ b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcComplexDmlDdlSelfTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.internal.runner.app.jdbc;
+package org.apache.ignite.jdbc;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
diff --git a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/jdbc/ItJdbcComplexQuerySelfTest.java b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcComplexQuerySelfTest.java
similarity index 99%
rename from modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/jdbc/ItJdbcComplexQuerySelfTest.java
rename to modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcComplexQuerySelfTest.java
index f6c0376f9b..3dbfcd03df 100644
--- a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/jdbc/ItJdbcComplexQuerySelfTest.java
+++ b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcComplexQuerySelfTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.internal.runner.app.jdbc;
+package org.apache.ignite.jdbc;
 
 import static org.hamcrest.CoreMatchers.anyOf;
 import static org.hamcrest.CoreMatchers.is;
diff --git a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/jdbc/ItJdbcConnectionPropertiesTest.java b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcConnectionPropertiesTest.java
similarity index 97%
rename from modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/jdbc/ItJdbcConnectionPropertiesTest.java
rename to modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcConnectionPropertiesTest.java
index a57b73ada4..16e4e0f6c2 100644
--- a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/jdbc/ItJdbcConnectionPropertiesTest.java
+++ b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcConnectionPropertiesTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.internal.runner.app.jdbc;
+package org.apache.ignite.jdbc;
 
 import static org.junit.jupiter.api.Assertions.assertNotEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
diff --git a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/jdbc/ItJdbcConnectionSelfTest.java b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcConnectionSelfTest.java
similarity index 99%
rename from modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/jdbc/ItJdbcConnectionSelfTest.java
rename to modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcConnectionSelfTest.java
index d4820c2a9f..adc421f57c 100644
--- a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/jdbc/ItJdbcConnectionSelfTest.java
+++ b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcConnectionSelfTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.internal.runner.app.jdbc;
+package org.apache.ignite.jdbc;
 
 import static java.sql.Connection.TRANSACTION_NONE;
 import static java.sql.Connection.TRANSACTION_READ_COMMITTED;
@@ -54,7 +54,7 @@ import java.util.Properties;
 import java.util.ServiceLoader;
 import java.util.concurrent.Executor;
 import java.util.concurrent.Executors;
-import org.apache.ignite.jdbc.IgniteJdbcDriver;
+import org.apache.ignite.internal.jdbc.IgniteJdbcDriver;
 import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 
diff --git a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/jdbc/ItJdbcDeleteStatementSelfTest.java b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcDeleteStatementSelfTest.java
similarity index 97%
rename from modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/jdbc/ItJdbcDeleteStatementSelfTest.java
rename to modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcDeleteStatementSelfTest.java
index 611cc05524..a2cb64839e 100644
--- a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/jdbc/ItJdbcDeleteStatementSelfTest.java
+++ b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcDeleteStatementSelfTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.internal.runner.app.jdbc;
+package org.apache.ignite.jdbc;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
diff --git a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/jdbc/ItJdbcErrorsAbstractSelfTest.java b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcErrorsAbstractSelfTest.java
similarity index 99%
rename from modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/jdbc/ItJdbcErrorsAbstractSelfTest.java
rename to modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcErrorsAbstractSelfTest.java
index 107bc6f797..4f41367029 100644
--- a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/jdbc/ItJdbcErrorsAbstractSelfTest.java
+++ b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcErrorsAbstractSelfTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.internal.runner.app.jdbc;
+package org.apache.ignite.jdbc;
 
 import static org.apache.ignite.internal.jdbc.proto.SqlStateCode.CONNECTION_CLOSED;
 import static org.apache.ignite.internal.jdbc.proto.SqlStateCode.CONVERSION_FAILED;
diff --git a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/jdbc/ItJdbcErrorsSelfTest.java b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcErrorsSelfTest.java
similarity index 99%
rename from modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/jdbc/ItJdbcErrorsSelfTest.java
rename to modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcErrorsSelfTest.java
index f10d2284c1..305f3feafe 100644
--- a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/jdbc/ItJdbcErrorsSelfTest.java
+++ b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcErrorsSelfTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.internal.runner.app.jdbc;
+package org.apache.ignite.jdbc;
 
 import static org.apache.ignite.internal.jdbc.proto.SqlStateCode.CLIENT_CONNECTION_FAILED;
 import static org.apache.ignite.internal.jdbc.proto.SqlStateCode.INVALID_TRANSACTION_LEVEL;
diff --git a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/jdbc/ItJdbcInsertStatementSelfTest.java b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcInsertStatementSelfTest.java
similarity index 99%
rename from modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/jdbc/ItJdbcInsertStatementSelfTest.java
rename to modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcInsertStatementSelfTest.java
index db195269f2..9318c0c479 100644
--- a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/jdbc/ItJdbcInsertStatementSelfTest.java
+++ b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcInsertStatementSelfTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.internal.runner.app.jdbc;
+package org.apache.ignite.jdbc;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
diff --git a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/jdbc/ItJdbcJoinsSelfTest.java b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcJoinsSelfTest.java
similarity index 99%
rename from modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/jdbc/ItJdbcJoinsSelfTest.java
rename to modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcJoinsSelfTest.java
index 5d21c3324e..5ae13251f6 100644
--- a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/jdbc/ItJdbcJoinsSelfTest.java
+++ b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcJoinsSelfTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.internal.runner.app.jdbc;
+package org.apache.ignite.jdbc;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
diff --git a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/jdbc/ItJdbcMetadataPrimaryKeysSelfTest.java b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcMetadataPrimaryKeysSelfTest.java
similarity index 98%
rename from modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/jdbc/ItJdbcMetadataPrimaryKeysSelfTest.java
rename to modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcMetadataPrimaryKeysSelfTest.java
index f3254be348..82ae075e0f 100644
--- a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/jdbc/ItJdbcMetadataPrimaryKeysSelfTest.java
+++ b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcMetadataPrimaryKeysSelfTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.internal.runner.app.jdbc;
+package org.apache.ignite.jdbc;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
diff --git a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/jdbc/ItJdbcMetadataSelfTest.java b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcMetadataSelfTest.java
similarity index 99%
rename from modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/jdbc/ItJdbcMetadataSelfTest.java
rename to modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcMetadataSelfTest.java
index 685deceffa..b41bda5da2 100644
--- a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/jdbc/ItJdbcMetadataSelfTest.java
+++ b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcMetadataSelfTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.internal.runner.app.jdbc;
+package org.apache.ignite.jdbc;
 
 import static java.sql.Types.DATE;
 import static java.sql.Types.DECIMAL;
diff --git a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/jdbc/ItJdbcMultiStatementSelfTest.java b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcMultiStatementSelfTest.java
similarity index 99%
rename from modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/jdbc/ItJdbcMultiStatementSelfTest.java
rename to modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcMultiStatementSelfTest.java
index 0b415b3500..a47f650763 100644
--- a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/jdbc/ItJdbcMultiStatementSelfTest.java
+++ b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcMultiStatementSelfTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.internal.runner.app.jdbc;
+package org.apache.ignite.jdbc;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
diff --git a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/jdbc/ItJdbcResultSetSelfTest.java b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcResultSetSelfTest.java
similarity index 99%
rename from modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/jdbc/ItJdbcResultSetSelfTest.java
rename to modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcResultSetSelfTest.java
index ac1e0b56a9..ab8721be4f 100644
--- a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/jdbc/ItJdbcResultSetSelfTest.java
+++ b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcResultSetSelfTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.internal.runner.app.jdbc;
+package org.apache.ignite.jdbc;
 
 import static org.junit.jupiter.api.Assertions.assertArrayEquals;
 import static org.junit.jupiter.api.Assertions.assertEquals;
diff --git a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/jdbc/ItJdbcSelectAfterAlterTable.java b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcSelectAfterAlterTable.java
similarity index 98%
rename from modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/jdbc/ItJdbcSelectAfterAlterTable.java
rename to modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcSelectAfterAlterTable.java
index 5ef9b8eaf8..e22b9f49d2 100644
--- a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/jdbc/ItJdbcSelectAfterAlterTable.java
+++ b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcSelectAfterAlterTable.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.internal.runner.app.jdbc;
+package org.apache.ignite.jdbc;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
diff --git a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/jdbc/ItJdbcStatementCancelSelfTest.java b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcStatementCancelSelfTest.java
similarity index 98%
rename from modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/jdbc/ItJdbcStatementCancelSelfTest.java
rename to modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcStatementCancelSelfTest.java
index f1beb75e16..e8e5ad28fa 100644
--- a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/jdbc/ItJdbcStatementCancelSelfTest.java
+++ b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcStatementCancelSelfTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.internal.runner.app.jdbc;
+package org.apache.ignite.jdbc;
 
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertThrows;
diff --git a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/jdbc/ItJdbcStatementSelfTest.java b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcStatementSelfTest.java
similarity index 99%
rename from modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/jdbc/ItJdbcStatementSelfTest.java
rename to modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcStatementSelfTest.java
index 1c75419cb5..bb7487bf57 100644
--- a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/jdbc/ItJdbcStatementSelfTest.java
+++ b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcStatementSelfTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.internal.runner.app.jdbc;
+package org.apache.ignite.jdbc;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
diff --git a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/jdbc/ItJdbcUpdateStatementSelfTest.java b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcUpdateStatementSelfTest.java
similarity index 98%
rename from modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/jdbc/ItJdbcUpdateStatementSelfTest.java
rename to modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcUpdateStatementSelfTest.java
index d646a25c5d..e17e3b6074 100644
--- a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/jdbc/ItJdbcUpdateStatementSelfTest.java
+++ b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcUpdateStatementSelfTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.internal.runner.app.jdbc;
+package org.apache.ignite.jdbc;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
diff --git a/modules/client/src/main/java/org/apache/ignite/internal/jdbc/ConnectionProperties.java b/modules/jdbc/src/main/java/org/apache/ignite/internal/jdbc/ConnectionProperties.java
similarity index 100%
rename from modules/client/src/main/java/org/apache/ignite/internal/jdbc/ConnectionProperties.java
rename to modules/jdbc/src/main/java/org/apache/ignite/internal/jdbc/ConnectionProperties.java
diff --git a/modules/client/src/main/java/org/apache/ignite/internal/jdbc/ConnectionPropertiesImpl.java b/modules/jdbc/src/main/java/org/apache/ignite/internal/jdbc/ConnectionPropertiesImpl.java
similarity index 100%
rename from modules/client/src/main/java/org/apache/ignite/internal/jdbc/ConnectionPropertiesImpl.java
rename to modules/jdbc/src/main/java/org/apache/ignite/internal/jdbc/ConnectionPropertiesImpl.java
diff --git a/modules/client/src/main/java/org/apache/ignite/jdbc/IgniteJdbcDriver.java b/modules/jdbc/src/main/java/org/apache/ignite/internal/jdbc/IgniteJdbcDriver.java
similarity index 96%
rename from modules/client/src/main/java/org/apache/ignite/jdbc/IgniteJdbcDriver.java
rename to modules/jdbc/src/main/java/org/apache/ignite/internal/jdbc/IgniteJdbcDriver.java
index e212dc631d..827f8459dc 100644
--- a/modules/client/src/main/java/org/apache/ignite/jdbc/IgniteJdbcDriver.java
+++ b/modules/jdbc/src/main/java/org/apache/ignite/internal/jdbc/IgniteJdbcDriver.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.jdbc;
+package org.apache.ignite.internal.jdbc;
 
 import static org.apache.ignite.internal.jdbc.ConnectionPropertiesImpl.URL_PREFIX;
 
@@ -29,8 +29,6 @@ import java.sql.SQLFeatureNotSupportedException;
 import java.util.Properties;
 import java.util.logging.Logger;
 import org.apache.ignite.internal.client.proto.ProtocolVersion;
-import org.apache.ignite.internal.jdbc.ConnectionPropertiesImpl;
-import org.apache.ignite.internal.jdbc.JdbcConnection;
 
 /**
  * JDBC driver thin implementation for Apache Ignite 3.x.
diff --git a/modules/client/src/main/java/org/apache/ignite/internal/jdbc/JdbcClientQueryCursorHandler.java b/modules/jdbc/src/main/java/org/apache/ignite/internal/jdbc/JdbcClientQueryCursorHandler.java
similarity index 100%
rename from modules/client/src/main/java/org/apache/ignite/internal/jdbc/JdbcClientQueryCursorHandler.java
rename to modules/jdbc/src/main/java/org/apache/ignite/internal/jdbc/JdbcClientQueryCursorHandler.java
diff --git a/modules/client/src/main/java/org/apache/ignite/internal/jdbc/JdbcClientQueryEventHandler.java b/modules/jdbc/src/main/java/org/apache/ignite/internal/jdbc/JdbcClientQueryEventHandler.java
similarity index 100%
rename from modules/client/src/main/java/org/apache/ignite/internal/jdbc/JdbcClientQueryEventHandler.java
rename to modules/jdbc/src/main/java/org/apache/ignite/internal/jdbc/JdbcClientQueryEventHandler.java
diff --git a/modules/client/src/main/java/org/apache/ignite/internal/jdbc/JdbcConnection.java b/modules/jdbc/src/main/java/org/apache/ignite/internal/jdbc/JdbcConnection.java
similarity index 100%
rename from modules/client/src/main/java/org/apache/ignite/internal/jdbc/JdbcConnection.java
rename to modules/jdbc/src/main/java/org/apache/ignite/internal/jdbc/JdbcConnection.java
diff --git a/modules/client/src/main/java/org/apache/ignite/internal/jdbc/JdbcDatabaseMetadata.java b/modules/jdbc/src/main/java/org/apache/ignite/internal/jdbc/JdbcDatabaseMetadata.java
similarity index 100%
rename from modules/client/src/main/java/org/apache/ignite/internal/jdbc/JdbcDatabaseMetadata.java
rename to modules/jdbc/src/main/java/org/apache/ignite/internal/jdbc/JdbcDatabaseMetadata.java
diff --git a/modules/client/src/main/java/org/apache/ignite/internal/jdbc/JdbcPreparedStatement.java b/modules/jdbc/src/main/java/org/apache/ignite/internal/jdbc/JdbcPreparedStatement.java
similarity index 99%
rename from modules/client/src/main/java/org/apache/ignite/internal/jdbc/JdbcPreparedStatement.java
rename to modules/jdbc/src/main/java/org/apache/ignite/internal/jdbc/JdbcPreparedStatement.java
index 589bc96f4d..ccf16601f3 100644
--- a/modules/client/src/main/java/org/apache/ignite/internal/jdbc/JdbcPreparedStatement.java
+++ b/modules/jdbc/src/main/java/org/apache/ignite/internal/jdbc/JdbcPreparedStatement.java
@@ -19,7 +19,6 @@ package org.apache.ignite.internal.jdbc;
 
 import static org.apache.ignite.internal.util.ArrayUtils.INT_EMPTY_ARRAY;
 
-import io.netty.util.internal.StringUtil;
 import java.io.InputStream;
 import java.io.Reader;
 import java.math.BigDecimal;
@@ -51,6 +50,7 @@ import org.apache.ignite.internal.jdbc.proto.SqlStateCode;
 import org.apache.ignite.internal.jdbc.proto.event.JdbcBatchExecuteResult;
 import org.apache.ignite.internal.jdbc.proto.event.JdbcBatchPreparedStmntRequest;
 import org.apache.ignite.internal.util.CollectionUtils;
+import org.apache.ignite.internal.util.StringUtils;
 
 /**
  * Jdbc prepared statement implementation.
@@ -107,7 +107,7 @@ public class JdbcPreparedStatement extends JdbcStatement implements PreparedStat
 
         closeResults();
 
-        if (CollectionUtils.nullOrEmpty(batchedArgs) || StringUtil.isNullOrEmpty(sql)) {
+        if (CollectionUtils.nullOrEmpty(batchedArgs) || StringUtils.nullOrBlank(sql)) {
             return INT_EMPTY_ARRAY;
         }
 
@@ -650,7 +650,7 @@ public class JdbcPreparedStatement extends JdbcStatement implements PreparedStat
     /**
      * Execute query with arguments and nullify them afterwards.
      *
-     * @param JdbcStatementType Expected statement type.
+     * @param statementType Expected statement type.
      * @throws SQLException If failed.
      */
     private void executeWithArguments(JdbcStatementType statementType) throws SQLException {
diff --git a/modules/client/src/main/java/org/apache/ignite/internal/jdbc/JdbcQueryExecuteResponse.java b/modules/jdbc/src/main/java/org/apache/ignite/internal/jdbc/JdbcQueryExecuteResponse.java
similarity index 100%
rename from modules/client/src/main/java/org/apache/ignite/internal/jdbc/JdbcQueryExecuteResponse.java
rename to modules/jdbc/src/main/java/org/apache/ignite/internal/jdbc/JdbcQueryExecuteResponse.java
diff --git a/modules/client/src/main/java/org/apache/ignite/internal/jdbc/JdbcResultSet.java b/modules/jdbc/src/main/java/org/apache/ignite/internal/jdbc/JdbcResultSet.java
similarity index 100%
rename from modules/client/src/main/java/org/apache/ignite/internal/jdbc/JdbcResultSet.java
rename to modules/jdbc/src/main/java/org/apache/ignite/internal/jdbc/JdbcResultSet.java
diff --git a/modules/client/src/main/java/org/apache/ignite/internal/jdbc/JdbcResultSetMetadata.java b/modules/jdbc/src/main/java/org/apache/ignite/internal/jdbc/JdbcResultSetMetadata.java
similarity index 100%
rename from modules/client/src/main/java/org/apache/ignite/internal/jdbc/JdbcResultSetMetadata.java
rename to modules/jdbc/src/main/java/org/apache/ignite/internal/jdbc/JdbcResultSetMetadata.java
diff --git a/modules/client/src/main/java/org/apache/ignite/internal/jdbc/JdbcStatement.java b/modules/jdbc/src/main/java/org/apache/ignite/internal/jdbc/JdbcStatement.java
similarity index 100%
rename from modules/client/src/main/java/org/apache/ignite/internal/jdbc/JdbcStatement.java
rename to modules/jdbc/src/main/java/org/apache/ignite/internal/jdbc/JdbcStatement.java
diff --git a/modules/client/src/main/java/org/apache/ignite/jdbc/package-info.java b/modules/jdbc/src/main/java/org/apache/ignite/internal/jdbc/package-info.java
similarity index 95%
rename from modules/client/src/main/java/org/apache/ignite/jdbc/package-info.java
rename to modules/jdbc/src/main/java/org/apache/ignite/internal/jdbc/package-info.java
index b2b7b65786..e4a1b54495 100644
--- a/modules/client/src/main/java/org/apache/ignite/jdbc/package-info.java
+++ b/modules/jdbc/src/main/java/org/apache/ignite/internal/jdbc/package-info.java
@@ -19,4 +19,4 @@
  * Ignite jdbc client.
  */
 
-package org.apache.ignite.jdbc;
+package org.apache.ignite.internal.jdbc;
diff --git a/packaging/build.gradle b/packaging/build.gradle
index 3dbf73e128..f2e8c9a7de 100644
--- a/packaging/build.gradle
+++ b/packaging/build.gradle
@@ -41,6 +41,7 @@ dependencies {
     dbZip project(path: ':packaging-db', configuration: 'dbZip')
     release project(path: ':packaging-cli', configuration: 'cliRelease')
     release project(path: ':packaging-db', configuration: 'dbRelease')
+    release project(path: ':ignite-jdbc', configuration: 'jdbcRelease')
     release project(path: ':platforms', configuration: 'platformsRelease')
 }
 
@@ -170,5 +171,6 @@ tasks.register('prepareRelease', Copy) {
     from file("$buildDir/checksums")
     include '*.zip', '*.asc', '*.sha512'
     include '*.rpm', '*.deb', '*.changes'
+    include '*.jar'
     into file("$buildDir/release")
 }
diff --git a/parent/pom.xml b/parent/pom.xml
index 003834c65f..573f88f39b 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -460,6 +460,12 @@
                 <version>${project.version}</version>
             </dependency>
 
+            <dependency>
+                <groupId>org.apache.ignite</groupId>
+                <artifactId>ignite-jdbc</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+
             <dependency>
                 <groupId>org.apache.ignite</groupId>
                 <artifactId>ignite-marshaller-common</artifactId>
diff --git a/pom.xml b/pom.xml
index 55b87108b9..09f381a8e0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -58,6 +58,7 @@
         <module>modules/file-io</module>
         <module>modules/index</module>
         <module>modules/jacoco-report</module>
+        <module>modules/jdbc</module>
         <module>modules/marshaller-common</module>
         <module>modules/metastorage</module>
         <module>modules/metastorage-client</module>
diff --git a/settings.gradle b/settings.gradle
index 62f0d5f0fc..fc1788b2d9 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -20,6 +20,7 @@ include(':ignite-page-memory')
 include(':ignite-storage-api')
 include(':ignite-network-annotation-processor')
 include(':ignite-client')
+include(':ignite-jdbc')
 include(':ignite-rocksdb-common')
 include(':ignite-file-io')
 include(':ignite-vault')
@@ -71,6 +72,7 @@ project(":ignite-page-memory").projectDir = file('modules/page-memory')
 project(":ignite-storage-api").projectDir = file('modules/storage-api')
 project(":ignite-network-annotation-processor").projectDir = file('modules/network-annotation-processor')
 project(":ignite-client").projectDir = file('modules/client')
+project(":ignite-jdbc").projectDir = file('modules/jdbc')
 project(":ignite-rocksdb-common").projectDir = file('modules/rocksdb-common')
 project(":ignite-file-io").projectDir = file('modules/file-io')
 project(":ignite-vault").projectDir = file('modules/vault')