diff --git a/.github/workflows/build-timestamped-master.yml b/.github/workflows/build-timestamped-master.yml index 2d154ffc..f202d1aa 100644 --- a/.github/workflows/build-timestamped-master.yml +++ b/.github/workflows/build-timestamped-master.yml @@ -14,5 +14,5 @@ jobs: call_workflow: name: Run Build Workflow if: ${{ github.repository_owner == 'ballerina-platform' }} - uses: ballerina-platform/ballerina-library/.github/workflows/build-timestamp-master-template.yml@main + uses: ballerina-platform/ballerina-library/.github/workflows/build-timestamp-master-template.yml@java21 secrets: inherit diff --git a/.github/workflows/build-with-bal-test-graalvm.yml b/.github/workflows/build-with-bal-test-graalvm.yml index 65d785ad..341a7a88 100644 --- a/.github/workflows/build-with-bal-test-graalvm.yml +++ b/.github/workflows/build-with-bal-test-graalvm.yml @@ -30,7 +30,7 @@ jobs: call_stdlib_workflow: name: Run StdLib Workflow if: ${{ github.event_name != 'schedule' || (github.event_name == 'schedule' && github.repository_owner == 'ballerina-platform') }} - uses: ballerina-platform/ballerina-library/.github/workflows/build-with-bal-test-graalvm-template.yml@main + uses: ballerina-platform/ballerina-library/.github/workflows/build-with-bal-test-graalvm-template.yml@java21 with: lang_tag: ${{ inputs.lang_tag }} lang_version: ${{ inputs.lang_version }} diff --git a/.github/workflows/central-publish.yml b/.github/workflows/central-publish.yml index 11922b55..ebe213e7 100644 --- a/.github/workflows/central-publish.yml +++ b/.github/workflows/central-publish.yml @@ -15,7 +15,7 @@ jobs: call_workflow: name: Run Central Publish Workflow if: ${{ github.repository_owner == 'ballerina-platform' }} - uses: ballerina-platform/ballerina-library/.github/workflows/central-publish-template.yml@main + uses: ballerina-platform/ballerina-library/.github/workflows/central-publish-template.yml@java21 secrets: inherit with: environment: ${{ github.event.inputs.environment }} diff --git a/.github/workflows/fossa_scan.yml b/.github/workflows/fossa_scan.yml index 651f73a6..a2862efe 100644 --- a/.github/workflows/fossa_scan.yml +++ b/.github/workflows/fossa_scan.yml @@ -8,7 +8,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - - uses: fossas/fossa-action@main + - uses: fossas/fossa-action@java21 env: packageUser: ${{ secrets.BALLERINA_BOT_USERNAME }} packagePAT: ${{ secrets.BALLERINA_BOT_TOKEN }} diff --git a/.github/workflows/publish-release.yml b/.github/workflows/publish-release.yml index 5e6adfe3..2478fd39 100644 --- a/.github/workflows/publish-release.yml +++ b/.github/workflows/publish-release.yml @@ -9,7 +9,7 @@ jobs: call_workflow: name: Run Release Workflow if: ${{ github.repository_owner == 'ballerina-platform' }} - uses: ballerina-platform/ballerina-library/.github/workflows/release-package-template.yml@main + uses: ballerina-platform/ballerina-library/.github/workflows/release-package-template.yml@java21 secrets: inherit with: package-name: sql diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml index c717ff55..f85a9816 100644 --- a/.github/workflows/pull-request.yml +++ b/.github/workflows/pull-request.yml @@ -10,7 +10,7 @@ jobs: call_workflow: name: Run PR Build Workflow if: ${{ github.repository_owner == 'ballerina-platform' }} - uses: ballerina-platform/ballerina-library/.github/workflows/pull-request-build-template.yml@main + uses: ballerina-platform/ballerina-library/.github/workflows/pull-request-build-template.yml@java21 secrets: inherit with: additional-windows-test-flags: "-x test" diff --git a/.github/workflows/trivy-scan.yml b/.github/workflows/trivy-scan.yml index c02c8ff4..41e8f6ad 100644 --- a/.github/workflows/trivy-scan.yml +++ b/.github/workflows/trivy-scan.yml @@ -9,5 +9,5 @@ jobs: call_workflow: name: Run Trivy Scan Workflow if: ${{ github.repository_owner == 'ballerina-platform' }} - uses: ballerina-platform/ballerina-library/.github/workflows/trivy-scan-template.yml@main + uses: ballerina-platform/ballerina-library/.github/workflows/trivy-scan-template.yml@java21 secrets: inherit diff --git a/README.md b/README.md index e79392d9..4cf972ff 100644 --- a/README.md +++ b/README.md @@ -429,7 +429,7 @@ This repository only contains the source code for the package. ### Set up the prerequisites -1. Download and install Java SE Development Kit (JDK) version 17 (from one of the following locations). +1. Download and install Java SE Development Kit (JDK) version 21 (from one of the following locations). * [Oracle](https://www.oracle.com/java/technologies/downloads/) * [OpenJDK](https://adoptium.net/) diff --git a/ballerina/Ballerina.toml b/ballerina/Ballerina.toml index e283ceee..7e0a9a99 100644 --- a/ballerina/Ballerina.toml +++ b/ballerina/Ballerina.toml @@ -7,27 +7,27 @@ keywords = ["database", "client", "network", "SQL", "RDBMS"] repository = "https://github.com/ballerina-platform/module-ballerina-sql" icon = "icon.png" license = ["Apache-2.0"] -distribution = "2201.10.0" +distribution = "2201.10.0-20241019-091600-89e54c08" -[platform.java17] +[platform.java21] graalvmCompatible = true -[[platform.java17.dependency]] +[[platform.java21.dependency]] groupId = "io.ballerina.stdlib" artifactId = "sql-native" version = "1.14.2" path = "../native/build/libs/sql-native-1.14.2-SNAPSHOT.jar" -[[platform.java17.dependency]] +[[platform.java21.dependency]] path = "../test-utils/build/libs/sql-test-utils-1.14.2-SNAPSHOT.jar" scope = "testOnly" -[[platform.java17.dependency]] +[[platform.java21.dependency]] groupId = "com.zaxxer" artifactId = "HikariCP" version = "3.3.1" path = "./lib/HikariCP-3.3.1.jar" -[[platform.java17.dependency]] +[[platform.java21.dependency]] path = "./lib/hsqldb-2.7.1.jar" scope = "testOnly" diff --git a/ballerina/Dependencies.toml b/ballerina/Dependencies.toml index 91958039..eebd5468 100644 --- a/ballerina/Dependencies.toml +++ b/ballerina/Dependencies.toml @@ -5,12 +5,12 @@ [ballerina] dependencies-toml-version = "2" -distribution-version = "2201.10.0" +distribution-version = "2201.10.0-20241019-091600-89e54c08" [[package]] org = "ballerina" name = "auth" -version = "2.12.0" +version = "2.12.1" scope = "testOnly" dependencies = [ {org = "ballerina", name = "crypto"}, @@ -23,19 +23,18 @@ dependencies = [ [[package]] org = "ballerina" name = "cache" -version = "3.8.0" +version = "3.8.1" scope = "testOnly" dependencies = [ {org = "ballerina", name = "constraint"}, {org = "ballerina", name = "jballerina.java"}, - {org = "ballerina", name = "task"}, - {org = "ballerina", name = "time"} + {org = "ballerina", name = "task"} ] [[package]] org = "ballerina" name = "constraint" -version = "1.5.0" +version = "1.5.1" scope = "testOnly" dependencies = [ {org = "ballerina", name = "jballerina.java"} @@ -44,7 +43,7 @@ dependencies = [ [[package]] org = "ballerina" name = "crypto" -version = "2.7.2" +version = "2.7.3" scope = "testOnly" dependencies = [ {org = "ballerina", name = "jballerina.java"}, @@ -54,7 +53,7 @@ dependencies = [ [[package]] org = "ballerina" name = "file" -version = "1.10.0" +version = "1.10.1" scope = "testOnly" dependencies = [ {org = "ballerina", name = "io"}, @@ -69,7 +68,7 @@ modules = [ [[package]] org = "ballerina" name = "http" -version = "2.12.1" +version = "2.13.0" scope = "testOnly" dependencies = [ {org = "ballerina", name = "auth"}, @@ -98,7 +97,7 @@ dependencies = [ [[package]] org = "ballerina" name = "io" -version = "1.6.1" +version = "1.6.2" dependencies = [ {org = "ballerina", name = "jballerina.java"}, {org = "ballerina", name = "lang.value"} @@ -118,7 +117,7 @@ modules = [ [[package]] org = "ballerina" name = "jwt" -version = "2.13.0" +version = "2.13.1" scope = "testOnly" dependencies = [ {org = "ballerina", name = "cache"}, @@ -127,8 +126,7 @@ dependencies = [ {org = "ballerina", name = "jballerina.java"}, {org = "ballerina", name = "lang.int"}, {org = "ballerina", name = "lang.string"}, - {org = "ballerina", name = "log"}, - {org = "ballerina", name = "time"} + {org = "ballerina", name = "log"} ] [[package]] @@ -245,7 +243,7 @@ dependencies = [ [[package]] org = "ballerina" name = "log" -version = "2.10.0" +version = "2.10.1" scope = "testOnly" dependencies = [ {org = "ballerina", name = "io"}, @@ -257,7 +255,7 @@ dependencies = [ [[package]] org = "ballerina" name = "mime" -version = "2.10.0" +version = "2.10.1" scope = "testOnly" dependencies = [ {org = "ballerina", name = "io"}, @@ -269,21 +267,20 @@ dependencies = [ [[package]] org = "ballerina" name = "oauth2" -version = "2.12.0" +version = "2.12.1" scope = "testOnly" dependencies = [ {org = "ballerina", name = "cache"}, {org = "ballerina", name = "crypto"}, {org = "ballerina", name = "jballerina.java"}, {org = "ballerina", name = "log"}, - {org = "ballerina", name = "time"}, {org = "ballerina", name = "url"} ] [[package]] org = "ballerina" name = "observe" -version = "1.3.0" +version = "1.3.1" scope = "testOnly" dependencies = [ {org = "ballerina", name = "jballerina.java"} @@ -292,7 +289,7 @@ dependencies = [ [[package]] org = "ballerina" name = "os" -version = "1.8.0" +version = "1.8.1" scope = "testOnly" dependencies = [ {org = "ballerina", name = "io"}, @@ -322,7 +319,7 @@ modules = [ [[package]] org = "ballerina" name = "task" -version = "2.5.0" +version = "2.5.1" scope = "testOnly" dependencies = [ {org = "ballerina", name = "jballerina.java"}, @@ -346,7 +343,7 @@ modules = [ [[package]] org = "ballerina" name = "time" -version = "2.4.0" +version = "2.5.1" dependencies = [ {org = "ballerina", name = "jballerina.java"} ] @@ -357,7 +354,7 @@ modules = [ [[package]] org = "ballerina" name = "url" -version = "2.4.0" +version = "2.4.1" scope = "testOnly" dependencies = [ {org = "ballerina", name = "jballerina.java"} @@ -366,7 +363,7 @@ dependencies = [ [[package]] org = "ballerina" name = "uuid" -version = "1.8.0" +version = "1.8.1" scope = "testOnly" dependencies = [ {org = "ballerina", name = "crypto"}, diff --git a/build-config/resources/Ballerina.toml b/build-config/resources/Ballerina.toml index 63cfb32d..84bcbef0 100644 --- a/build-config/resources/Ballerina.toml +++ b/build-config/resources/Ballerina.toml @@ -7,27 +7,27 @@ keywords = ["database", "client", "network", "SQL", "RDBMS"] repository = "https://github.com/ballerina-platform/module-ballerina-sql" icon = "icon.png" license = ["Apache-2.0"] -distribution = "2201.10.0" +distribution = "2201.10.0-20241019-091600-89e54c08" -[platform.java17] +[platform.java21] graalvmCompatible = true -[[platform.java17.dependency]] +[[platform.java21.dependency]] groupId = "io.ballerina.stdlib" artifactId = "sql-native" version = "@toml.version@" path = "../native/build/libs/sql-native-@project.version@.jar" -[[platform.java17.dependency]] +[[platform.java21.dependency]] path = "../test-utils/build/libs/sql-test-utils-@project.version@.jar" scope = "testOnly" -[[platform.java17.dependency]] +[[platform.java21.dependency]] groupId = "com.zaxxer" artifactId = "HikariCP" version = "@hikkaricp.lib.version@" path = "./lib/HikariCP-@hikkaricp.lib.version@.jar" -[[platform.java17.dependency]] +[[platform.java21.dependency]] path = "./lib/hsqldb-@hsql.connector.version@.jar" scope = "testOnly" diff --git a/build-config/spotbugs-exclude.xml b/build-config/spotbugs-exclude.xml index 9e424c12..5970bd25 100644 --- a/build-config/spotbugs-exclude.xml +++ b/build-config/spotbugs-exclude.xml @@ -87,4 +87,16 @@ + + + + + + + + + + + + diff --git a/compiler-plugin-tests/build.gradle b/compiler-plugin-tests/build.gradle index cd9216c5..012f45ee 100644 --- a/compiler-plugin-tests/build.gradle +++ b/compiler-plugin-tests/build.gradle @@ -48,7 +48,7 @@ tasks.withType(JavaCompile) { options.encoding = 'UTF-8' } -sourceCompatibility = JavaVersion.VERSION_17 +sourceCompatibility = JavaVersion.VERSION_21 jacoco { toolVersion = "0.8.10" @@ -83,9 +83,12 @@ jacocoTestReport { } spotbugsTest { + def classLoader = plugins["com.github.spotbugs"].class.classLoader + def SpotBugsConfidence = classLoader.findLoadedClass("com.github.spotbugs.snom.Confidence") + def SpotBugsEffort = classLoader.findLoadedClass("com.github.spotbugs.snom.Effort") + effort = SpotBugsEffort.MAX + reportLevel = SpotBugsConfidence.LOW ignoreFailures = true - effort = "max" - reportLevel = "low" reportsDir = file("$project.buildDir/reports/spotbugs") def excludeFile = file("${rootDir}/build-config/spotbugs-exclude.xml") if (excludeFile.exists()) { diff --git a/compiler-plugin/build.gradle b/compiler-plugin/build.gradle index 3c5e610a..dfd6ccaf 100644 --- a/compiler-plugin/build.gradle +++ b/compiler-plugin/build.gradle @@ -47,8 +47,11 @@ checkstyle { checkstyleMain.dependsOn(":checkstyle:downloadCheckstyleRuleFiles") spotbugsMain { - effort "max" - reportLevel "low" + def classLoader = plugins["com.github.spotbugs"].class.classLoader + def SpotBugsConfidence = classLoader.findLoadedClass("com.github.spotbugs.snom.Confidence") + def SpotBugsEffort = classLoader.findLoadedClass("com.github.spotbugs.snom.Effort") + effort = SpotBugsEffort.MAX + reportLevel = SpotBugsConfidence.LOW reportsDir = file("$project.buildDir/reports/spotbugs") reports { html.enabled true diff --git a/gradle.properties b/gradle.properties index 8d15e091..6ad5dcc9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -7,52 +7,52 @@ hsqlDriverVersion=2.7.1 h2Version=1.4.200 atomikosLibVersion=5.0.8 checkstyleToolVersion=10.12.1 -githubSpotbugsVersion=5.0.14 +githubSpotbugsVersion=6.0.18 githubJohnrengelmanShadowVersion=8.1.1 underCouchDownloadVersion=5.4.0 researchgateReleaseVersion=2.8.0 testngVersion=7.6.1 ballerinaGradlePluginVersion=2.0.1 -ballerinaLangVersion=2201.10.0 +ballerinaLangVersion=2201.10.0-20241019-091600-89e54c08 # Direct Dependencies # Level 01 -stdlibIoVersion=1.6.1 -stdlibTimeVersion=2.4.0 +stdlibIoVersion=1.6.2-20240928-084100-656404f +stdlibTimeVersion=2.5.1-20240930-120200-e59222b # Level 02 -stdlibLogVersion=2.10.0 -stdlibOsVersion=1.8.0 +stdlibLogVersion=2.10.1-20240930-154200-5ab2aa4 +stdlibOsVersion=1.8.1-20241001-120600-dd1626e # Level 03 -stdlibFileVersion=1.10.0 +stdlibFileVersion=1.10.1-20241007-160900-03f7b64 # Ballerinax Observer -observeVersion=1.3.0 -observeInternalVersion=1.3.0 +observeVersion=1.3.1-20241007-161000-645452d +observeInternalVersion=1.3.1-20241015-172900-cdc3cb3 # Transitive Dependencies # Level 01 -stdlibConstraintVersion=1.5.0 -stdlibUrlVersion=2.4.0 +stdlibConstraintVersion=1.5.1-20240930-123400-5ecd396 +stdlibUrlVersion=2.4.1-20240930-120200-b7fb9e1 # Level 02 -stdlibCryptoVersion=2.7.2 -stdlibTaskVersion=2.5.0 +stdlibCryptoVersion=2.7.3-20240930-132000-5ecc9ab +stdlibTaskVersion=2.5.1-20241002-145700-5bdb843 # Level 03 -stdlibCacheVersion=3.8.0 -stdlibMimeVersion=2.10.0 -stdlibUuidVersion=1.8.0 +stdlibCacheVersion=3.8.1-20241007-154900-63f4403 +stdlibMimeVersion=2.10.1-20241009-141200-8b6c9f0 +stdlibUuidVersion=1.8.1-20241009-134600-a05012b # Level 04 -stdlibAuthVersion=2.12.0 -stdlibJwtVersion=2.13.0 -stdlibOAuth2Version=2.12.0 +stdlibAuthVersion=2.12.1-20241010-130800-733dbef +stdlibJwtVersion=2.13.1-20241010-123600-5ea6a94 +stdlibOAuth2Version=2.12.1-20241010-123600-0e0cfcc # Level 05 -stdlibHttpVersion=2.12.0 +stdlibHttpVersion=2.13.0-20241022-163700-67b6515 # Level 06 -stdlibTransactionVersion=1.10.0 +stdlibTransactionVersion=1.10.1-20241021-105400-f7e16a8 diff --git a/native/build.gradle b/native/build.gradle index 8cd4179f..c95e08c8 100644 --- a/native/build.gradle +++ b/native/build.gradle @@ -47,7 +47,7 @@ tasks.withType(JavaCompile) { options.encoding = 'UTF-8' } -sourceCompatibility = JavaVersion.VERSION_17 +sourceCompatibility = JavaVersion.VERSION_21 jacoco { toolVersion = "0.8.10" @@ -80,9 +80,12 @@ jacocoTestReport { } spotbugsMain { + def classLoader = plugins["com.github.spotbugs"].class.classLoader + def SpotBugsConfidence = classLoader.findLoadedClass("com.github.spotbugs.snom.Confidence") + def SpotBugsEffort = classLoader.findLoadedClass("com.github.spotbugs.snom.Effort") + effort = SpotBugsEffort.MAX + reportLevel = SpotBugsConfidence.LOW ignoreFailures = true - effort = "max" - reportLevel = "low" reportsDir = file("$project.buildDir/reports/spotbugs") def excludeFile = file("${rootDir}/build-config/spotbugs-exclude.xml") if (excludeFile.exists()) { diff --git a/native/src/main/java/io/ballerina/stdlib/sql/datasource/SQLWorkerThreadPool.java b/native/src/main/java/io/ballerina/stdlib/sql/datasource/SQLWorkerThreadPool.java deleted file mode 100644 index e1443075..00000000 --- a/native/src/main/java/io/ballerina/stdlib/sql/datasource/SQLWorkerThreadPool.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (c) 2021, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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 io.ballerina.stdlib.sql.datasource; - -import java.util.concurrent.ExecutorService; -import java.util.concurrent.LinkedBlockingQueue; -import java.util.concurrent.ThreadFactory; -import java.util.concurrent.ThreadPoolExecutor; -import java.util.concurrent.TimeUnit; - -import static io.ballerina.stdlib.sql.Constants.BALLERINA_SQL_MAX_POOL_SIZE; - -/** - * Class to hold the static cachedThreadPool for SQL. - */ -public class SQLWorkerThreadPool { - - private SQLWorkerThreadPool() { - } - - static final int MAX_POOL_SIZE = Integer.parseInt( - System.getenv(BALLERINA_SQL_MAX_POOL_SIZE) != null ? - System.getenv(BALLERINA_SQL_MAX_POOL_SIZE) : "50" - ); - - // This is similar to cachedThreadPool util from Executors.newCachedThreadPool(..); but with upper cap on threads - public static final ExecutorService SQL_EXECUTOR_SERVICE = new ThreadPoolExecutor(0, MAX_POOL_SIZE, - 60L, TimeUnit.SECONDS, new LinkedBlockingQueue<>(), new SQLThreadFactory()); - - static class SQLThreadFactory implements ThreadFactory { - @Override - public Thread newThread(Runnable r) { - Thread ballerinaSql = new Thread(r); - ballerinaSql.setName("bal-sql-thread"); - return ballerinaSql; - } - } -} diff --git a/native/src/main/java/io/ballerina/stdlib/sql/nativeimpl/CallProcessor.java b/native/src/main/java/io/ballerina/stdlib/sql/nativeimpl/CallProcessor.java index 885a9e8f..9bc7baeb 100644 --- a/native/src/main/java/io/ballerina/stdlib/sql/nativeimpl/CallProcessor.java +++ b/native/src/main/java/io/ballerina/stdlib/sql/nativeimpl/CallProcessor.java @@ -19,7 +19,6 @@ package io.ballerina.stdlib.sql.nativeimpl; import io.ballerina.runtime.api.Environment; -import io.ballerina.runtime.api.Future; import io.ballerina.runtime.api.PredefinedTypes; import io.ballerina.runtime.api.creators.TypeCreator; import io.ballerina.runtime.api.creators.ValueCreator; @@ -61,7 +60,6 @@ import static io.ballerina.stdlib.sql.Constants.RESULT_SET_TOTAL_NATIVE_DATA_FIELD; import static io.ballerina.stdlib.sql.Constants.STATEMENT_NATIVE_DATA_FIELD; import static io.ballerina.stdlib.sql.Constants.TYPE_DESCRIPTIONS_NATIVE_DATA_FIELD; -import static io.ballerina.stdlib.sql.datasource.SQLWorkerThreadPool.SQL_EXECUTOR_SERVICE; import static io.ballerina.stdlib.sql.utils.Utils.getColumnDefinitions; import static io.ballerina.stdlib.sql.utils.Utils.getDefaultStreamConstraint; import static io.ballerina.stdlib.sql.utils.Utils.getSqlQuery; @@ -95,14 +93,9 @@ public static Object nativeCall(Environment env, BObject client, BObject paramSQ boolean withinTrxBlock = Utils.isWithinTrxBlock(trxResourceManager); boolean trxManagerEnabled = trxResourceManager.getTransactionManagerEnabled(); TransactionLocalContext currentTrxContext = trxResourceManager.getCurrentTransactionContext(); - Future balFuture = env.markAsync(); - SQL_EXECUTOR_SERVICE.execute(() -> { - Object resultStream = - nativeCallExecutable(client, paramSQLString, recordTypes, statementParameterProcessor, - resultParameterProcessor, withinTrxBlock, currentTrxContext, trxManagerEnabled); - balFuture.complete(resultStream); - }); - return null; + return env.yieldAndRun(() -> nativeCallExecutable(client, paramSQLString, recordTypes, + statementParameterProcessor, resultParameterProcessor, withinTrxBlock, + currentTrxContext, trxManagerEnabled)); } private static Object nativeCallExecutable(BObject client, BObject paramSQLString, BArray recordTypes, diff --git a/native/src/main/java/io/ballerina/stdlib/sql/nativeimpl/ExecuteProcessor.java b/native/src/main/java/io/ballerina/stdlib/sql/nativeimpl/ExecuteProcessor.java index 212b47eb..69065dcf 100644 --- a/native/src/main/java/io/ballerina/stdlib/sql/nativeimpl/ExecuteProcessor.java +++ b/native/src/main/java/io/ballerina/stdlib/sql/nativeimpl/ExecuteProcessor.java @@ -19,7 +19,6 @@ package io.ballerina.stdlib.sql.nativeimpl; import io.ballerina.runtime.api.Environment; -import io.ballerina.runtime.api.Future; import io.ballerina.runtime.api.creators.TypeCreator; import io.ballerina.runtime.api.creators.ValueCreator; import io.ballerina.runtime.api.values.BArray; @@ -49,7 +48,6 @@ import java.util.Locale; import java.util.Map; -import static io.ballerina.stdlib.sql.datasource.SQLWorkerThreadPool.SQL_EXECUTOR_SERVICE; import static io.ballerina.stdlib.sql.utils.Utils.closeResources; import static io.ballerina.stdlib.sql.utils.Utils.getGeneratedKeys; import static io.ballerina.stdlib.sql.utils.Utils.getSqlQuery; @@ -78,15 +76,8 @@ public static Object nativeExecute(Environment env, BObject client, BObject para boolean withinTrxBlock = Utils.isWithinTrxBlock(trxResourceManager); boolean trxManagerEnabled = trxResourceManager.getTransactionManagerEnabled(); TransactionLocalContext currentTrxContext = trxResourceManager.getCurrentTransactionContext(); - Future balFuture = env.markAsync(); - SQL_EXECUTOR_SERVICE.execute(() -> { - Object resultStream = - nativeExecuteExecutable(client, paramSQLString, statementParameterProcessor, withinTrxBlock, - currentTrxContext, trxManagerEnabled); - balFuture.complete(resultStream); - }); - - return null; + return env.yieldAndRun(() -> nativeExecuteExecutable(client, paramSQLString, statementParameterProcessor, + withinTrxBlock, currentTrxContext, trxManagerEnabled)); } private static Object nativeExecuteExecutable(BObject client, BObject paramSQLString, @@ -159,15 +150,8 @@ public static Object nativeBatchExecute(Environment env, BObject client, BArray boolean withinTrxBlock = Utils.isWithinTrxBlock(trxResourceManager); boolean trxManagerEnabled = trxResourceManager.getTransactionManagerEnabled(); TransactionLocalContext currentTrxContext = trxResourceManager.getCurrentTransactionContext(); - Future balFuture = env.markAsync(); - SQL_EXECUTOR_SERVICE.execute(() -> { - Object resultStream = - nativeBatchExecuteExecutable(client, paramSQLStrings, statementParameterProcessor, - withinTrxBlock, currentTrxContext, trxManagerEnabled); - balFuture.complete(resultStream); - }); - - return null; + return env.yieldAndRun(() -> nativeBatchExecuteExecutable(client, paramSQLStrings, statementParameterProcessor, + withinTrxBlock, currentTrxContext, trxManagerEnabled)); } private static Object nativeBatchExecuteExecutable(BObject client, BArray paramSQLStrings, diff --git a/native/src/main/java/io/ballerina/stdlib/sql/nativeimpl/QueryProcessor.java b/native/src/main/java/io/ballerina/stdlib/sql/nativeimpl/QueryProcessor.java index ff4524fd..c2e2af0c 100644 --- a/native/src/main/java/io/ballerina/stdlib/sql/nativeimpl/QueryProcessor.java +++ b/native/src/main/java/io/ballerina/stdlib/sql/nativeimpl/QueryProcessor.java @@ -19,7 +19,6 @@ package io.ballerina.stdlib.sql.nativeimpl; import io.ballerina.runtime.api.Environment; -import io.ballerina.runtime.api.Future; import io.ballerina.runtime.api.PredefinedTypes; import io.ballerina.runtime.api.TypeTags; import io.ballerina.runtime.api.creators.TypeCreator; @@ -54,7 +53,6 @@ import java.sql.SQLException; import java.util.List; -import static io.ballerina.stdlib.sql.datasource.SQLWorkerThreadPool.SQL_EXECUTOR_SERVICE; import static io.ballerina.stdlib.sql.utils.Utils.getErrorStream; /** @@ -84,14 +82,9 @@ public static BStream nativeQuery(Environment env, BObject client, BObject param boolean withinTrxBlock = Utils.isWithinTrxBlock(trxResourceManager); boolean trxManagerEnabled = trxResourceManager.getTransactionManagerEnabled(); TransactionLocalContext currentTrxContext = trxResourceManager.getCurrentTransactionContext(); - Future balFuture = env.markAsync(); - SQL_EXECUTOR_SERVICE.execute(() -> { - BStream resultStream = - nativeQueryExecutable(client, paramSQLString, recordType, statementParameterProcessor, - resultParameterProcessor, withinTrxBlock, currentTrxContext, trxManagerEnabled); - balFuture.complete(resultStream); - }); - return null; + return env.yieldAndRun(() -> nativeQueryExecutable(client, paramSQLString, recordType, + statementParameterProcessor, resultParameterProcessor, withinTrxBlock, + currentTrxContext, trxManagerEnabled)); } private static BStream nativeQueryExecutable(BObject client, BObject paramSQLString, Object recordType, @@ -156,16 +149,9 @@ public static Object nativeQueryRow(Environment env, BObject client, BObject par boolean withinTrxBlock = Utils.isWithinTrxBlock(trxResourceManager); boolean trxManagerEnabled = trxResourceManager.getTransactionManagerEnabled(); TransactionLocalContext currentTrxContext = trxResourceManager.getCurrentTransactionContext(); - Future balFuture = env.markAsync(); - SQL_EXECUTOR_SERVICE.execute(() -> { - Object resultStream = - nativeQueryRowExecutable(client, paramSQLString, bTypedesc, statementParameterProcessor, - resultParameterProcessor, withinTrxBlock, currentTrxContext, - trxManagerEnabled); - balFuture.complete(resultStream); - }); - - return null; + return env.yieldAndRun(() -> nativeQueryRowExecutable(client, paramSQLString, bTypedesc, + statementParameterProcessor, resultParameterProcessor, withinTrxBlock, + currentTrxContext, trxManagerEnabled)); } private static Object nativeQueryRowExecutable( diff --git a/test-utils/build.gradle b/test-utils/build.gradle index 8c07af5d..f9c906db 100644 --- a/test-utils/build.gradle +++ b/test-utils/build.gradle @@ -32,9 +32,12 @@ dependencies { } spotbugsMain { + def classLoader = plugins["com.github.spotbugs"].class.classLoader + def SpotBugsConfidence = classLoader.findLoadedClass("com.github.spotbugs.snom.Confidence") + def SpotBugsEffort = classLoader.findLoadedClass("com.github.spotbugs.snom.Effort") + effort = SpotBugsEffort.MAX + reportLevel = SpotBugsConfidence.LOW ignoreFailures = true - effort = "max" - reportLevel = "low" reportsDir = file("$project.buildDir/reports/spotbugs") def excludeFile = file("${rootDir}/build-config/spotbugs-exclude.xml") if (excludeFile.exists()) {