This is an automated email from the ASF dual-hosted git repository.
diqiu50 pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/gravitino.git
The following commit(s) were added to refs/heads/main by this push:
new ff256c0ea5 [#13739] feat(flink-connector): Support Apache Flink 2.2
(#13740)
ff256c0ea5 is described below
commit ff256c0ea584f63d95e44e1c1add271b4dbb41bc
Author: Xu Bai <[email protected]>
AuthorDate: Wed Oct 14 22:13:43 2026 +0800
[#13739] feat(flink-connector): Support Apache Flink 2.2 (#13740)
### What changes were proposed in this pull request?
Add Flink 2.2 connector/runtime modules and update CI, Docker setup and
connector documentation.
### Why are the changes needed?
Enable Gravitino catalog workflows on Flink 2.2 while retaining existing
version support.
Fix: #13739
### Does this PR introduce _any_ user-facing change?
Yes. Add `gravitino-flink-connector-runtime-2.2-${version}.jar` for
Flink 2.2.1, supporting Iceberg, Paimon, JDBC, Catalog Store and session
catalogs. Hive remains unsupported on Flink 2.x.
### How was this patch tested?
- Flink 2.2 connector/runtime builds and unit tests passed, including 2
runtime packaging tests and a Scala 2.13 runtime build.
- 14 Iceberg unit tests and 7 REST deploy integration tests passed with
Iceberg 1.12.0 client and 1.11.0 server.
- Repository unit tests excluding Docker tests and formatting checks
passed.
---
.../workflows/backend-integration-test-action.yml | 1 +
.../workflows/flink-integration-test-action.yml | 4 +-
.../workflows/trino-integration-test-action.yml | 2 +
.../workflows/trino-multi-version-test-action.yml | 2 +
dev/docker/flink-connectors/Dockerfile | 11 ++-
dev/docker/flink-connectors/README.md | 7 +-
dev/docker/flink-connectors/copy-connector.sh | 10 +-
.../flink-connectors-dependency.sh | 9 +-
docs/flink-connector/flink-catalog-iceberg.md | 1 +
docs/flink-connector/flink-catalog-jdbc.md | 8 +-
docs/flink-connector/flink-catalog-paimon.md | 16 ++--
docs/flink-connector/flink-connector.md | 3 +-
.../v2.1/flink-runtime/build.gradle.kts | 5 +-
.../flink/runtime/TestRuntimeJarDependencies.java | 37 ++++++--
flink-connector/v2.1/flink/build.gradle.kts | 7 +-
.../{v2.1 => v2.2}/flink-runtime/build.gradle.kts | 9 +-
.../flink/runtime/TestRuntimeJarDependencies.java | 37 ++++++--
.../{v2.1 => v2.2}/flink/build.gradle.kts | 25 ++---
.../GravitinoIcebergCatalogFactoryFlink22.java | 47 +++++++++
.../iceberg/GravitinoIcebergCatalogFlink22.java | 105 +++++++++++++++++++++
.../jdbc/GravitinoJdbcCatalogFlink22.java | 64 +++++++++++++
.../GravitinoMysqlJdbcCatalogFactoryFlink22.java | 41 ++++++++
...GravitinoPostgresJdbcCatalogFactoryFlink22.java | 42 +++++++++
.../GravitinoPaimonCatalogFactoryFlink22.java | 39 ++++++++
.../paimon/GravitinoPaimonCatalogFlink22.java | 52 ++++++++++
.../connector/utils/CatalogCompatFlink22.java | 64 +++++++++++++
.../org.apache.flink.table.factories.Factory | 29 ++++++
.../connector/catalog/TestBaseCatalogFlink22.java | 31 ++++++
.../hive/TestFlinkGenericTableUtilFlink22.java | 31 ++++++
.../hive/TestGravitinoHiveCatalogFlink22.java | 31 ++++++
.../TestGravitinoIcebergCatalogFlink22.java | 84 +++++++++++++++++
.../test/catalog/GravitinoCatalogManagerIT22.java | 22 +++++
.../test/iceberg/FlinkIcebergHiveCatalogIT22.java | 22 +++++
.../test/iceberg/FlinkIcebergJdbcCatalogIT22.java | 29 ++++++
.../test/iceberg/FlinkIcebergRestCatalogIT22.java | 22 +++++
.../test/jdbc/FlinkJdbcMysqlCatalogIT22.java | 53 +++++++++++
.../test/paimon/FlinkPaimonHiveBackendIT22.java | 22 +++++
.../test/paimon/FlinkPaimonJdbcBackendIT22.java | 22 +++++
.../FlinkPaimonLocalFileSystemBackendIT22.java | 22 +++++
.../jdbc/TestGravitinoJdbcCatalogFlink22.java | 31 ++++++
.../paimon/TestGravitinoPaimonCatalogFlink22.java | 31 ++++++
.../connector/utils/TestCatalogCompatFlink22.java | 80 ++++++++++++++++
gradle/libs.versions.toml | 13 ++-
settings.gradle.kts | 7 +-
44 files changed, 1162 insertions(+), 68 deletions(-)
diff --git a/.github/workflows/backend-integration-test-action.yml
b/.github/workflows/backend-integration-test-action.yml
index cd26d94d6d..b5de5e641e 100644
--- a/.github/workflows/backend-integration-test-action.yml
+++ b/.github/workflows/backend-integration-test-action.yml
@@ -78,6 +78,7 @@ jobs:
-x :flink-connector:flink-1.19:test -x
:flink-connector:flink-runtime-1.19:test \
-x :flink-connector:flink-1.20:test -x
:flink-connector:flink-runtime-1.20:test \
-x :flink-connector:flink-2.1:test -x
:flink-connector:flink-runtime-2.1:test \
+ -x :flink-connector:flink-2.2:test -x
:flink-connector:flink-runtime-2.2:test \
-x :spark-connector:spark-3.5:test -x
:spark-connector:spark-4.0:test \
-x :spark-connector:spark-runtime-3.5:test -x
:spark-connector:spark-runtime-4.0:test \
-x :trino-connector:integration-test:test -x
:trino-connector:trino-connector:test \
diff --git a/.github/workflows/flink-integration-test-action.yml
b/.github/workflows/flink-integration-test-action.yml
index efe786b92b..db792b457c 100644
--- a/.github/workflows/flink-integration-test-action.yml
+++ b/.github/workflows/flink-integration-test-action.yml
@@ -48,7 +48,7 @@ jobs:
id: integrationTest
# run embedded mode and deploy mode integration tests for every
supported Flink minor
run: |
- for v in 1.19 1.20 2.1; do
+ for v in 1.19 1.20 2.1 2.2; do
./gradlew -PskipTests -PtestMode=embedded -PskipDockerTests=false
-PskipWeb=true \
:flink-connector:flink-$v:test \
--tests
"org.apache.gravitino.flink.connector.integration.test.**"
@@ -70,6 +70,8 @@ jobs:
flink-connector/v1.20/flink/build/*.tar
flink-connector/v2.1/flink/build/*.log
flink-connector/v2.1/flink/build/*.tar
+ flink-connector/v2.2/flink/build/*.log
+ flink-connector/v2.2/flink/build/*.tar
distribution/package/logs/gravitino-server.out
distribution/package/logs/gravitino-server.log
catalogs/**/*.log
diff --git a/.github/workflows/trino-integration-test-action.yml
b/.github/workflows/trino-integration-test-action.yml
index 165706a59a..8435aa0494 100644
--- a/.github/workflows/trino-integration-test-action.yml
+++ b/.github/workflows/trino-integration-test-action.yml
@@ -46,6 +46,8 @@ jobs:
-x :flink-connector:flink-runtime-1.20:build \
-x :flink-connector:flink-2.1:build \
-x :flink-connector:flink-runtime-2.1:build \
+ -x :flink-connector:flink-2.2:build \
+ -x :flink-connector:flink-runtime-2.2:build \
-x :spark-connector:spark-3.5:build -x
:spark-connector:spark-4.0:build \
-x :spark-connector:spark-runtime-3.5:build -x
:spark-connector:spark-runtime-4.0:build \
-x :mcp-server:build -x :lineage:build \
diff --git a/.github/workflows/trino-multi-version-test-action.yml
b/.github/workflows/trino-multi-version-test-action.yml
index 0e81613f8f..9542928161 100644
--- a/.github/workflows/trino-multi-version-test-action.yml
+++ b/.github/workflows/trino-multi-version-test-action.yml
@@ -33,6 +33,8 @@ jobs:
-x :flink-connector:flink-runtime-1.20:build \
-x :flink-connector:flink-2.1:build \
-x :flink-connector:flink-runtime-2.1:build \
+ -x :flink-connector:flink-2.2:build \
+ -x :flink-connector:flink-runtime-2.2:build \
-x :spark-connector:spark-3.5:build -x
:spark-connector:spark-4.0:build \
-x :spark-connector:spark-runtime-3.5:build -x
:spark-connector:spark-runtime-4.0:build \
-x :mcp-server:build -x :lineage:build \
diff --git a/dev/docker/flink-connectors/Dockerfile
b/dev/docker/flink-connectors/Dockerfile
index a9a11439ba..2b6f164991 100644
--- a/dev/docker/flink-connectors/Dockerfile
+++ b/dev/docker/flink-connectors/Dockerfile
@@ -20,9 +20,10 @@
#
==============================================================================
# Apache Gravitino Flink Connector — UBI 10-based, certification-oriented image
# Contains the Apache Gravitino Flink connector runtime jars for every
-# supported Flink version present in the source tree (Scala 2.12; Flink does
-# not support Scala 2.13). The connector code is Apache-2.0; the shaded runtime
-# jar bundles third-party open source components (see the licenses/ directory).
+# supported Flink version present in the source tree. Flink 1.x jars use the
+# Scala 2.12 suffix; Flink 2.x jars have no Scala suffix. The connector code is
+# Apache-2.0; the shaded runtime jar bundles third-party open source components
+# (see the licenses/ directory).
# Used as a Kubernetes init-container to inject connector jars into Flink pods.
#
# The set of Flink versions is discovered at build time from the Gravitino
@@ -56,8 +57,8 @@ LABEL name="gravitino-flink-connector" \
vendor="The Apache Software Foundation" \
version="${IMAGE_VERSION}" \
release="${IMAGE_RELEASE}" \
- summary="Apache Gravitino Flink Connector (Scala 2.12)" \
- description="Apache Gravitino Flink connector runtime jars for all
supported Flink versions (Scala 2.12), for Kubernetes init-container
deployment. The version is selected at runtime via the FLINK_VERSION
environment variable." \
+ summary="Apache Gravitino Flink Connector" \
+ description="Apache Gravitino Flink connector runtime jars for all
supported Flink versions, for Kubernetes init-container deployment. Flink 1.x
jars use the Scala 2.12 suffix; Flink 2.x jars have no Scala suffix. The
version is selected at runtime via the FLINK_VERSION environment variable." \
maintainer="Apache Gravitino <[email protected]>"
# Default Flink version (can be overridden at runtime)
diff --git a/dev/docker/flink-connectors/README.md
b/dev/docker/flink-connectors/README.md
index 68d35d708a..6b54fb383a 100644
--- a/dev/docker/flink-connectors/README.md
+++ b/dev/docker/flink-connectors/README.md
@@ -59,13 +59,14 @@ server version, or keep it lower.
## Supported versions
-Each Flink minor version ships as its own directory under `/connectors`
-(Scala 2.12; Flink does not support Scala 2.13). The exact set baked into an
+Flink 1.19, 1.20, 2.1, and 2.2 are supported. Each Flink minor version ships
as its own directory under
+`/connectors`. Flink 1.x runtime JAR names include the `_2.12` Scala suffix;
+Flink 2.x runtime JAR names have no Scala suffix. The exact set baked into an
image depends on the Gravitino source branch it was built from; list them
with:
```bash
-docker run --rm apache/gravitino-flink-connector:{version}
+docker run --rm -e LIST_VERSIONS=true
apache/gravitino-flink-connector:{version}
```
Each directory contains one shaded runtime JAR. Do not mix JARs from
diff --git a/dev/docker/flink-connectors/copy-connector.sh
b/dev/docker/flink-connectors/copy-connector.sh
index 591aa7c6dc..12f4b35ba2 100755
--- a/dev/docker/flink-connectors/copy-connector.sh
+++ b/dev/docker/flink-connectors/copy-connector.sh
@@ -27,8 +27,8 @@
# Useful for `docker run --rm <image>`.
#
# The available versions are DISCOVERED at runtime from the directories baked
-# into /connectors (flink-<ver>). All versions are Scala 2.12 only (Flink does
-# not support Scala 2.13).
+# into /connectors (flink-<ver>). Flink 1.x jars use the Scala 2.12 suffix;
+# Flink 2.x jars have no Scala suffix.
#
# As an init container, a missing /target volume is treated as an error so a
# misconfigured pod fails fast instead of letting the engine start without the
@@ -44,7 +44,7 @@ list_available_versions() {
}
if [ "${LIST_VERSIONS}" = "true" ]; then
- echo "Apache Gravitino Flink connector jars available at /connectors/ (all
Scala 2.12):"
+ echo "Apache Gravitino Flink connector jars available at /connectors/:"
echo ""
list_available_versions
echo ""
@@ -64,12 +64,12 @@ SOURCE_DIR="/connectors/flink-${FLINK_VERSION}"
if [ ! -d "$SOURCE_DIR" ]; then
echo "ERROR: Flink version ${FLINK_VERSION} is not supported by this image."
>&2
echo "" >&2
- echo "Available versions (all Scala 2.12):" >&2
+ echo "Available versions:" >&2
list_available_versions >&2
exit 1
fi
-echo "Copying Flink ${FLINK_VERSION} connector (Scala 2.12) to /target/..."
+echo "Copying Flink ${FLINK_VERSION} connector to /target/..."
cp "${SOURCE_DIR}"/*.jar /target/
echo "Done. Jars copied to /target/:"
ls -1 /target/*.jar 2>/dev/null
diff --git a/dev/docker/flink-connectors/flink-connectors-dependency.sh
b/dev/docker/flink-connectors/flink-connectors-dependency.sh
index 5085460b87..2cd64ec8e9 100755
--- a/dev/docker/flink-connectors/flink-connectors-dependency.sh
+++ b/dev/docker/flink-connectors/flink-connectors-dependency.sh
@@ -20,14 +20,15 @@
# Build every Apache Gravitino Flink connector runtime shadow jar present in
# the source tree and prepare the layout consumed by the Docker image.
-# Flink only supports Scala 2.12.
+# Flink 1.x jars use the Scala 2.12 suffix; Flink 2.x jars have no Scala
suffix.
#
# The set of Flink runtime modules is DISCOVERED from the Gradle project, so
# this script does not hard-code which versions exist. Whatever the checked-out
-# branch supports (for example 1.19/1.20/2.1) is built automatically.
+# branch supports (for example 1.19/1.20/2.1/2.2) is built automatically.
#
# Output layout:
-#
packages/connectors/flink-<ver>/gravitino-flink-connector-runtime-<ver>_2.12-*.jar
+#
packages/connectors/flink-1.<minor>/gravitino-flink-connector-runtime-1.<minor>_2.12-*.jar
+#
packages/connectors/flink-2.<minor>/gravitino-flink-connector-runtime-2.<minor>-*.jar
set -euo pipefail
@@ -52,7 +53,7 @@ versions="$(echo "${runtime_modules}" | sed
's/flink-runtime-//' | sort -u)"
echo "Discovered Flink connector versions:"
echo "${versions}" | sed 's/^/ - /'
-# Assemble each discovered runtime shadow jar (Scala 2.12 only).
+# Assemble each discovered runtime shadow jar.
tasks=""
for m in ${runtime_modules}; do
tasks="${tasks} :flink-connector:${m}:shadowJar"
diff --git a/docs/flink-connector/flink-catalog-iceberg.md
b/docs/flink-connector/flink-catalog-iceberg.md
index c347d93682..db88e7a2b4 100644
--- a/docs/flink-connector/flink-catalog-iceberg.md
+++ b/docs/flink-connector/flink-catalog-iceberg.md
@@ -45,6 +45,7 @@ Flink clients use a different Iceberg version than the
Gravitino server (1.11.0)
| 1.19 | 2.12 | 1.10.2 |
`iceberg-flink-runtime-1.19-1.10.2.jar` |
`gravitino-flink-connector-runtime-1.19_2.12-${gravitino-version}.jar` |
| 1.20 | 2.12 | 1.11.0 |
`iceberg-flink-runtime-1.20-1.11.0.jar` |
`gravitino-flink-connector-runtime-1.20_2.12-${gravitino-version}.jar` |
| 2.1 | n/a | 1.11.0 |
`iceberg-flink-runtime-2.1-1.11.0.jar` |
`gravitino-flink-connector-runtime-2.1-${gravitino-version}.jar` |
+| 2.2 | n/a | 1.12.0 |
`iceberg-flink-runtime-2.2-1.12.0.jar` |
`gravitino-flink-connector-runtime-2.2-${gravitino-version}.jar` |
Replace `${gravitino-version}` with your Gravitino release version.
diff --git a/docs/flink-connector/flink-catalog-jdbc.md
b/docs/flink-connector/flink-catalog-jdbc.md
index d50cc4f18b..8b8ac74226 100644
--- a/docs/flink-connector/flink-catalog-jdbc.md
+++ b/docs/flink-connector/flink-catalog-jdbc.md
@@ -31,8 +31,14 @@ Place the following JAR files in the lib directory of your
Flink installation:
| 1.19 | `3.3.0-1.19` |
`gravitino-flink-connector-runtime-1.19_2.12-${gravitino-version}.jar` |
| 1.20 | `3.3.0-1.20` |
`gravitino-flink-connector-runtime-1.20_2.12-${gravitino-version}.jar` |
| 2.1 | `4.1.0-2.1` |
`gravitino-flink-connector-runtime-2.1-${gravitino-version}.jar` |
+| 2.2 | `4.1.0-2.2` |
`gravitino-flink-connector-runtime-2.2-${gravitino-version}.jar` |
-Starting with Flink 2.1, `flink-connector-jdbc` is split into per-database
artifacts: place `flink-connector-jdbc-core-4.1.0-2.1.jar`,
`flink-connector-jdbc-mysql-4.1.0-2.1.jar`, and
`flink-connector-jdbc-postgres-4.1.0-2.1.jar` together in the classpath instead
of a single combined JAR.
+For Flink 2.x, `flink-connector-jdbc` is split into core and per-database
artifacts. Place all three JARs from the matching row in the classpath instead
of a single combined JAR:
+
+| Flink version | Core artifact | MySQL artifact
| PostgreSQL artifact |
+|---------------|-------------------------------------------|--------------------------------------------|-----------------------------------------------|
+| 2.1 | `flink-connector-jdbc-core-4.1.0-2.1.jar` |
`flink-connector-jdbc-mysql-4.1.0-2.1.jar` |
`flink-connector-jdbc-postgres-4.1.0-2.1.jar` |
+| 2.2 | `flink-connector-jdbc-core-4.1.0-2.2.jar` |
`flink-connector-jdbc-mysql-4.1.0-2.2.jar` |
`flink-connector-jdbc-postgres-4.1.0-2.2.jar` |
Next, when you create the JDBC catalog in Gravitino, add the
`flink.bypass.default-database` property with the value of the default database
name.
diff --git a/docs/flink-connector/flink-catalog-paimon.md
b/docs/flink-connector/flink-catalog-paimon.md
index 09669b7568..e21a70a077 100644
--- a/docs/flink-connector/flink-catalog-paimon.md
+++ b/docs/flink-connector/flink-catalog-paimon.md
@@ -39,9 +39,10 @@ Supports most DDL and DML operations in Flink SQL, except
such operations:
## Prerequisites
-* Paimon 1.2.0 is fully tested.
+* Flink 1.19 and 1.20 use Paimon 1.2.0.
+* Flink 2.1 and 2.2 use Paimon 1.4.1.
-Other Paimon versions may also work but have not been tested fully.
+The supported Paimon versions are pinned in the table below. Other Paimon
versions may also work but have not been tested fully.
## Getting Started
@@ -52,11 +53,12 @@ Place the following JAR files in the lib directory of your
Flink installation:
- The Paimon Flink connector JAR that matches your Flink minor version
- The Gravitino Flink connector runtime JAR that matches your Flink minor
version
-| Flink version | Paimon connector artifact | Gravitino
runtime artifact |
-|---------------|-------------------------------------------|------------------------------------------------------------------------|
-| 1.19 | `paimon-flink-1.19-${paimon-version}.jar` |
`gravitino-flink-connector-runtime-1.19_2.12-${gravitino-version}.jar` |
-| 1.20 | `paimon-flink-1.20-${paimon-version}.jar` |
`gravitino-flink-connector-runtime-1.20_2.12-${gravitino-version}.jar` |
-| 2.1 | `paimon-flink-2.1-${paimon-version}.jar` |
`gravitino-flink-connector-runtime-2.1-${gravitino-version}.jar` |
+| Flink version | Paimon version | Paimon connector artifact |
Gravitino runtime artifact |
+|---------------|----------------|-------------------------------------|------------------------------------------------------------------------|
+| 1.19 | 1.2.0 | `paimon-flink-1.19-1.2.0.jar` |
`gravitino-flink-connector-runtime-1.19_2.12-${gravitino-version}.jar` |
+| 1.20 | 1.2.0 | `paimon-flink-1.20-1.2.0.jar` |
`gravitino-flink-connector-runtime-1.20_2.12-${gravitino-version}.jar` |
+| 2.1 | 1.4.1 | `paimon-flink-2.1-1.4.1.jar` |
`gravitino-flink-connector-runtime-2.1-${gravitino-version}.jar` |
+| 2.2 | 1.4.1 | `paimon-flink-2.2-1.4.1.jar` |
`gravitino-flink-connector-runtime-2.2-${gravitino-version}.jar` |
### SQL Example
diff --git a/docs/flink-connector/flink-connector.md
b/docs/flink-connector/flink-connector.md
index f239eba324..1340e2f383 100644
--- a/docs/flink-connector/flink-connector.md
+++ b/docs/flink-connector/flink-connector.md
@@ -24,7 +24,7 @@ The connector is published as a version-specific runtime JAR
for each supported
## Prerequisites
* Scala 2.12 (Flink 1.19 and 1.20 only; Flink 2.x removed the Scala APIs)
-* Flink 1.19, 1.20, or 2.1
+* Flink 1.19, 1.20, 2.1, or 2.2
* JDK 8, 11 or 17 for Flink 1.x; JDK 17 for Flink 2.x
On Flink 2.x, the Hive catalog is not supported: `flink-connector-hive` has
not published a
@@ -41,6 +41,7 @@ catalogs are supported on Flink 2.x.
| 1.19 |
`gravitino-flink-connector-runtime-1.19_2.12-${gravitino-version}.jar` |
| 1.20 |
`gravitino-flink-connector-runtime-1.20_2.12-${gravitino-version}.jar` |
| 2.1 |
`gravitino-flink-connector-runtime-2.1-${gravitino-version}.jar` |
+| 2.2 |
`gravitino-flink-connector-runtime-2.2-${gravitino-version}.jar` |
Do not mix runtime JARs from different Flink minor versions in the same Flink
deployment.
diff --git a/flink-connector/v2.1/flink-runtime/build.gradle.kts
b/flink-connector/v2.1/flink-runtime/build.gradle.kts
index 61c21a2556..84d56553b5 100644
--- a/flink-connector/v2.1/flink-runtime/build.gradle.kts
+++ b/flink-connector/v2.1/flink-runtime/build.gradle.kts
@@ -46,11 +46,11 @@ configurations.all {
dependencies {
implementation(project(":clients:client-java-runtime", configuration =
"shadow"))
implementation(project(":flink-connector:flink-2.1"))
- // flink-2.1's own openlineageSqlJava21 constraint only applies to that
module's compileOnly and
+ // flink-2.1's own openlineageSqlJava constraint only applies to that
module's compileOnly and
// testImplementation configurations, so it never reaches this module's
runtimeClasspath (which
// shadowJar packages). Depend on it directly here so the shaded runtime jar
ships the patched
// 1.52.0 release instead of the vulnerable 1.32.0 pulled transitively by
flink-connector-jdbc.
- implementation(libs.openlineageSqlJava21)
+ implementation(libs.openlineageSqlJava)
testImplementation(libs.junit.jupiter.api)
testRuntimeOnly(libs.junit.jupiter.engine)
@@ -76,6 +76,7 @@ shadowJarTask.configure {
tasks.test {
useJUnitPlatform()
dependsOn(shadowJarTask)
+ inputs.file(shadowJarTask.flatMap { it.archiveFile })
doFirst {
systemProperty("shadowJarPath",
shadowJarTask.get().archiveFile.get().asFile.absolutePath)
}
diff --git
a/flink-connector/v2.1/flink-runtime/src/test/java/org/apache/gravitino/flink/runtime/TestRuntimeJarDependencies.java
b/flink-connector/v2.1/flink-runtime/src/test/java/org/apache/gravitino/flink/runtime/TestRuntimeJarDependencies.java
index 067cd616a6..d7307b874d 100644
---
a/flink-connector/v2.1/flink-runtime/src/test/java/org/apache/gravitino/flink/runtime/TestRuntimeJarDependencies.java
+++
b/flink-connector/v2.1/flink-runtime/src/test/java/org/apache/gravitino/flink/runtime/TestRuntimeJarDependencies.java
@@ -18,6 +18,7 @@
*/
package org.apache.gravitino.flink.runtime;
+import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -26,7 +27,9 @@ import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
+import java.util.HashSet;
import java.util.List;
+import java.util.Set;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import java.util.stream.Collectors;
@@ -69,14 +72,32 @@ class TestRuntimeJarDependencies {
try (InputStream in = jarFile.getInputStream(factoryServiceEntry)) {
factoryServices = new String(in.readAllBytes(),
StandardCharsets.UTF_8);
}
- assertTrue(
- factoryServices.contains(
-
"org.apache.gravitino.flink.connector.store.GravitinoCatalogStoreFactory"),
- "Runtime jar should include the shared catalog-store factory
descriptor");
- assertTrue(
- factoryServices.contains(
-
"org.apache.gravitino.flink.connector.paimon.GravitinoPaimonCatalogFactoryFlink21"),
- "Runtime jar should include the version-specific catalog factory
descriptor");
+ List<String> gravitinoFactories =
+ factoryServices
+ .lines()
+ .map(line -> line.split("#", 2)[0].trim())
+ .filter(line -> line.startsWith("org.apache.gravitino.flink."))
+ .collect(Collectors.toList());
+ Set<String> expectedFactories =
+ Set.of(
+
"org.apache.gravitino.flink.connector.store.GravitinoCatalogStoreFactory",
+
"org.apache.gravitino.flink.connector.paimon.GravitinoPaimonCatalogFactoryFlink21",
+
"org.apache.gravitino.flink.connector.iceberg.GravitinoIcebergCatalogFactoryFlink21",
+
"org.apache.gravitino.flink.connector.jdbc.mysql.GravitinoMysqlJdbcCatalogFactoryFlink21",
+
"org.apache.gravitino.flink.connector.jdbc.postgresql.GravitinoPostgresJdbcCatalogFactoryFlink21");
+ assertEquals(
+ expectedFactories,
+ new HashSet<>(gravitinoFactories),
+ "Runtime jar should register exactly the shared catalog-store and
four Flink 2.1 factories");
+ assertEquals(
+ expectedFactories.size(),
+ gravitinoFactories.size(),
+ "Runtime jar should not contain duplicate Gravitino factory
registrations");
+ for (String factory : expectedFactories) {
+ assertNotNull(
+ jarFile.getJarEntry(factory.replace('.', '/') + ".class"),
+ "Registered factory class should exist in runtime jar: " +
factory);
+ }
}
}
}
diff --git a/flink-connector/v2.1/flink/build.gradle.kts
b/flink-connector/v2.1/flink/build.gradle.kts
index 803eb3e52c..e8758b7086 100644
--- a/flink-connector/v2.1/flink/build.gradle.kts
+++ b/flink-connector/v2.1/flink/build.gradle.kts
@@ -56,7 +56,8 @@ val flinkVersion: String = libs.versions.flink21.get()
val flinkMajorVersion: String = flinkVersion.substringBeforeLast(".")
val icebergVersion: String = libs.versions.iceberg4flink21.get()
val paimonVersion: String = libs.versions.paimon4flink21.get()
-// Flink 2.x removed the Scala APIs entirely, so unlike the 1.x modules there
is no scala suffix.
+// This connector uses Flink Java APIs, so its artifacts need no Scala-version
suffix.
+// Flink internals still use Scala.
val artifactName = "${rootProject.name}-flink-$flinkMajorVersion"
dependencies {
@@ -70,8 +71,8 @@ dependencies {
// can't simply be excluded: the connector's lineage extraction actually
calls into it at
// runtime (JdbcSource.getLineageVertex). Force this newer release
instead, which ships an
// up-to-date bundled copy.
- compileOnly(libs.openlineageSqlJava21)
- testImplementation(libs.openlineageSqlJava21)
+ compileOnly(libs.openlineageSqlJava)
+ testImplementation(libs.openlineageSqlJava)
}
// Dependencies needed to compile flink-common's sources (mirrors
flink-common/build.gradle.kts).
diff --git a/flink-connector/v2.1/flink-runtime/build.gradle.kts
b/flink-connector/v2.2/flink-runtime/build.gradle.kts
similarity index 90%
copy from flink-connector/v2.1/flink-runtime/build.gradle.kts
copy to flink-connector/v2.2/flink-runtime/build.gradle.kts
index 61c21a2556..e3b307d8c4 100644
--- a/flink-connector/v2.1/flink-runtime/build.gradle.kts
+++ b/flink-connector/v2.2/flink-runtime/build.gradle.kts
@@ -29,7 +29,7 @@ repositories {
mavenCentral()
}
-val flinkVersion: String = libs.versions.flink21.get()
+val flinkVersion: String = libs.versions.flink22.get()
val flinkMajorVersion: String = flinkVersion.substringBeforeLast(".")
// Flink 2.x removed the Scala APIs entirely, so unlike the 1.x modules there
is no scala suffix.
val artifactName = "gravitino-${project.name}"
@@ -45,12 +45,12 @@ configurations.all {
dependencies {
implementation(project(":clients:client-java-runtime", configuration =
"shadow"))
- implementation(project(":flink-connector:flink-2.1"))
- // flink-2.1's own openlineageSqlJava21 constraint only applies to that
module's compileOnly and
+ implementation(project(":flink-connector:flink-2.2"))
+ // flink-2.2's own openlineageSqlJava constraint only applies to that
module's compileOnly and
// testImplementation configurations, so it never reaches this module's
runtimeClasspath (which
// shadowJar packages). Depend on it directly here so the shaded runtime jar
ships the patched
// 1.52.0 release instead of the vulnerable 1.32.0 pulled transitively by
flink-connector-jdbc.
- implementation(libs.openlineageSqlJava21)
+ implementation(libs.openlineageSqlJava)
testImplementation(libs.junit.jupiter.api)
testRuntimeOnly(libs.junit.jupiter.engine)
@@ -76,6 +76,7 @@ shadowJarTask.configure {
tasks.test {
useJUnitPlatform()
dependsOn(shadowJarTask)
+ inputs.file(shadowJarTask.flatMap { it.archiveFile })
doFirst {
systemProperty("shadowJarPath",
shadowJarTask.get().archiveFile.get().asFile.absolutePath)
}
diff --git
a/flink-connector/v2.1/flink-runtime/src/test/java/org/apache/gravitino/flink/runtime/TestRuntimeJarDependencies.java
b/flink-connector/v2.2/flink-runtime/src/test/java/org/apache/gravitino/flink/runtime/TestRuntimeJarDependencies.java
similarity index 69%
copy from
flink-connector/v2.1/flink-runtime/src/test/java/org/apache/gravitino/flink/runtime/TestRuntimeJarDependencies.java
copy to
flink-connector/v2.2/flink-runtime/src/test/java/org/apache/gravitino/flink/runtime/TestRuntimeJarDependencies.java
index 067cd616a6..1187a46b33 100644
---
a/flink-connector/v2.1/flink-runtime/src/test/java/org/apache/gravitino/flink/runtime/TestRuntimeJarDependencies.java
+++
b/flink-connector/v2.2/flink-runtime/src/test/java/org/apache/gravitino/flink/runtime/TestRuntimeJarDependencies.java
@@ -18,6 +18,7 @@
*/
package org.apache.gravitino.flink.runtime;
+import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -26,7 +27,9 @@ import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
+import java.util.HashSet;
import java.util.List;
+import java.util.Set;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import java.util.stream.Collectors;
@@ -69,14 +72,32 @@ class TestRuntimeJarDependencies {
try (InputStream in = jarFile.getInputStream(factoryServiceEntry)) {
factoryServices = new String(in.readAllBytes(),
StandardCharsets.UTF_8);
}
- assertTrue(
- factoryServices.contains(
-
"org.apache.gravitino.flink.connector.store.GravitinoCatalogStoreFactory"),
- "Runtime jar should include the shared catalog-store factory
descriptor");
- assertTrue(
- factoryServices.contains(
-
"org.apache.gravitino.flink.connector.paimon.GravitinoPaimonCatalogFactoryFlink21"),
- "Runtime jar should include the version-specific catalog factory
descriptor");
+ List<String> gravitinoFactories =
+ factoryServices
+ .lines()
+ .map(line -> line.split("#", 2)[0].trim())
+ .filter(line -> line.startsWith("org.apache.gravitino.flink."))
+ .collect(Collectors.toList());
+ Set<String> expectedFactories =
+ Set.of(
+
"org.apache.gravitino.flink.connector.store.GravitinoCatalogStoreFactory",
+
"org.apache.gravitino.flink.connector.paimon.GravitinoPaimonCatalogFactoryFlink22",
+
"org.apache.gravitino.flink.connector.iceberg.GravitinoIcebergCatalogFactoryFlink22",
+
"org.apache.gravitino.flink.connector.jdbc.mysql.GravitinoMysqlJdbcCatalogFactoryFlink22",
+
"org.apache.gravitino.flink.connector.jdbc.postgresql.GravitinoPostgresJdbcCatalogFactoryFlink22");
+ assertEquals(
+ expectedFactories,
+ new HashSet<>(gravitinoFactories),
+ "Runtime jar should register exactly the shared catalog-store and
four Flink 2.2 factories");
+ assertEquals(
+ expectedFactories.size(),
+ gravitinoFactories.size(),
+ "Runtime jar should not contain duplicate Gravitino factory
registrations");
+ for (String factory : expectedFactories) {
+ assertNotNull(
+ jarFile.getJarEntry(factory.replace('.', '/') + ".class"),
+ "Registered factory class should exist in runtime jar: " +
factory);
+ }
}
}
}
diff --git a/flink-connector/v2.1/flink/build.gradle.kts
b/flink-connector/v2.2/flink/build.gradle.kts
similarity index 94%
copy from flink-connector/v2.1/flink/build.gradle.kts
copy to flink-connector/v2.2/flink/build.gradle.kts
index 803eb3e52c..e0a3bae162 100644
--- a/flink-connector/v2.1/flink/build.gradle.kts
+++ b/flink-connector/v2.2/flink/build.gradle.kts
@@ -52,11 +52,12 @@
plugins.withType<com.diffplug.gradle.spotless.SpotlessPlugin>().configureEach {
}
}
-val flinkVersion: String = libs.versions.flink21.get()
+val flinkVersion: String = libs.versions.flink22.get()
val flinkMajorVersion: String = flinkVersion.substringBeforeLast(".")
-val icebergVersion: String = libs.versions.iceberg4flink21.get()
-val paimonVersion: String = libs.versions.paimon4flink21.get()
-// Flink 2.x removed the Scala APIs entirely, so unlike the 1.x modules there
is no scala suffix.
+val icebergVersion: String = libs.versions.iceberg4flink22.get()
+val paimonVersion: String = libs.versions.paimon4flink22.get()
+// This connector uses Flink Java APIs, so its artifacts need no Scala-version
suffix.
+// Flink internals still use Scala.
val artifactName = "${rootProject.name}-flink-$flinkMajorVersion"
dependencies {
@@ -70,8 +71,8 @@ dependencies {
// can't simply be excluded: the connector's lineage extraction actually
calls into it at
// runtime (JdbcSource.getLineageVertex). Force this newer release
instead, which ships an
// up-to-date bundled copy.
- compileOnly(libs.openlineageSqlJava21)
- testImplementation(libs.openlineageSqlJava21)
+ compileOnly(libs.openlineageSqlJava)
+ testImplementation(libs.openlineageSqlJava)
}
// Dependencies needed to compile flink-common's sources (mirrors
flink-common/build.gradle.kts).
@@ -93,9 +94,9 @@ dependencies {
compileOnly("org.apache.flink:flink-table-common:$flinkVersion")
compileOnly("org.apache.flink:flink-table-api-java:$flinkVersion")
compileOnly("org.apache.paimon:paimon-flink-$flinkMajorVersion:$paimonVersion")
- compileOnly(libs.flinkjdbc21.core)
- compileOnly(libs.flinkjdbc21.mysql)
- compileOnly(libs.flinkjdbc21.postgres)
+ compileOnly(libs.flinkjdbc22.core)
+ compileOnly(libs.flinkjdbc22.mysql)
+ compileOnly(libs.flinkjdbc22.postgres)
compileOnly(libs.hive2.common) {
exclude("org.eclipse.jetty.aggregate", "jetty-all")
exclude("org.eclipse.jetty.orbit", "javax.servlet")
@@ -133,9 +134,9 @@ dependencies {
testImplementation(project(":server"))
testImplementation(project(":server-common"))
testImplementation(libs.awaitility)
- testImplementation(libs.flinkjdbc21.core)
- testImplementation(libs.flinkjdbc21.mysql)
- testImplementation(libs.flinkjdbc21.postgres)
+ testImplementation(libs.flinkjdbc22.core)
+ testImplementation(libs.flinkjdbc22.mysql)
+ testImplementation(libs.flinkjdbc22.postgres)
testImplementation(libs.junit.jupiter.api)
testImplementation(libs.junit.jupiter.params)
testImplementation(libs.metrics.core)
diff --git
a/flink-connector/v2.2/flink/src/main/java/org/apache/gravitino/flink/connector/iceberg/GravitinoIcebergCatalogFactoryFlink22.java
b/flink-connector/v2.2/flink/src/main/java/org/apache/gravitino/flink/connector/iceberg/GravitinoIcebergCatalogFactoryFlink22.java
new file mode 100644
index 0000000000..1d09ae3ed8
--- /dev/null
+++
b/flink-connector/v2.2/flink/src/main/java/org/apache/gravitino/flink/connector/iceberg/GravitinoIcebergCatalogFactoryFlink22.java
@@ -0,0 +1,47 @@
+/*
+ * 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.gravitino.flink.connector.iceberg;
+
+import java.util.Map;
+import org.apache.flink.table.catalog.Catalog;
+import org.apache.gravitino.flink.connector.PartitionConverter;
+import org.apache.gravitino.flink.connector.SchemaAndTablePropertiesConverter;
+
+/** {@link GravitinoIcebergCatalogFactory} implementation for Flink 2.2. */
+public class GravitinoIcebergCatalogFactoryFlink22 extends
GravitinoIcebergCatalogFactory {
+
+ /** {@inheritDoc} */
+ @Override
+ protected Catalog newCatalog(
+ String catalogName,
+ String defaultDatabase,
+ SchemaAndTablePropertiesConverter schemaAndTablePropertiesConverter,
+ PartitionConverter partitionConverter,
+ Map<String, String> catalogOptions,
+ Map<String, String> icebergCatalogProperties) {
+ return new GravitinoIcebergCatalogFlink22(
+ catalogName,
+ defaultDatabase,
+ schemaAndTablePropertiesConverter,
+ partitionConverter,
+ catalogOptions,
+ icebergCatalogProperties);
+ }
+}
diff --git
a/flink-connector/v2.2/flink/src/main/java/org/apache/gravitino/flink/connector/iceberg/GravitinoIcebergCatalogFlink22.java
b/flink-connector/v2.2/flink/src/main/java/org/apache/gravitino/flink/connector/iceberg/GravitinoIcebergCatalogFlink22.java
new file mode 100644
index 0000000000..44e8d2cf4f
--- /dev/null
+++
b/flink-connector/v2.2/flink/src/main/java/org/apache/gravitino/flink/connector/iceberg/GravitinoIcebergCatalogFlink22.java
@@ -0,0 +1,105 @@
+/*
+ * 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.gravitino.flink.connector.iceberg;
+
+import java.util.Map;
+import org.apache.flink.configuration.Configuration;
+import org.apache.flink.configuration.ReadableConfig;
+import org.apache.flink.table.factories.CatalogFactory;
+import org.apache.gravitino.flink.connector.PartitionConverter;
+import org.apache.gravitino.flink.connector.SchemaAndTablePropertiesConverter;
+import org.apache.gravitino.flink.connector.utils.CatalogCompat;
+import org.apache.gravitino.flink.connector.utils.CatalogCompatFlink22;
+import org.apache.iceberg.flink.FlinkCatalogFactory;
+
+/** {@link GravitinoIcebergCatalog} implementation for Flink 2.2. */
+public class GravitinoIcebergCatalogFlink22 extends GravitinoIcebergCatalog {
+
+ /**
+ * Creates a catalog backed by the Flink 2.2 connector.
+ *
+ * @param catalogName the catalog name
+ * @param defaultDatabase the default database name
+ * @param schemaAndTablePropertiesConverter the converter for schemas and
table properties
+ * @param partitionConverter the converter for partition specifications
+ * @param catalogOptions the Gravitino catalog options
+ * @param icebergCatalogProperties the properties of the underlying Iceberg
catalog
+ */
+ protected GravitinoIcebergCatalogFlink22(
+ String catalogName,
+ String defaultDatabase,
+ SchemaAndTablePropertiesConverter schemaAndTablePropertiesConverter,
+ PartitionConverter partitionConverter,
+ Map<String, String> catalogOptions,
+ Map<String, String> icebergCatalogProperties) {
+ super(
+ catalogName,
+ defaultDatabase,
+ schemaAndTablePropertiesConverter,
+ partitionConverter,
+ catalogOptions,
+ icebergCatalogProperties);
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ protected Object createInnerIcebergCatalog(String catalogName, Map<String,
String> properties) {
+ // Flink 2.x removed the 2-arg createCatalog(String, Map) overload and
made the 3-arg
+ // (String, Map, org.apache.hadoop.conf.Configuration) overload protected;
only the public
+ // createCatalog(Context) overload remains usable from outside the
iceberg-flink package.
+ return new FlinkCatalogFactory()
+ .createCatalog(
+ new CatalogFactory.Context() {
+ /** {@inheritDoc} */
+ @Override
+ public String getName() {
+ return catalogName;
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public Map<String, String> getOptions() {
+ return properties;
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public ReadableConfig getConfiguration() {
+ // FlinkCatalogFactory.createCatalog(Context) does not
currently read
+ // getConfiguration() (it derives its Hadoop Configuration from
+ // FlinkCatalogFactory.clusterHadoopConf() instead), so an
empty one is a no-op
+ // stub to satisfy the interface. Re-check this on
iceberg-flink upgrades.
+ return new Configuration();
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public ClassLoader getClassLoader() {
+ return GravitinoIcebergCatalogFlink22.class.getClassLoader();
+ }
+ });
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ protected CatalogCompat catalogCompat() {
+ return CatalogCompatFlink22.INSTANCE;
+ }
+}
diff --git
a/flink-connector/v2.2/flink/src/main/java/org/apache/gravitino/flink/connector/jdbc/GravitinoJdbcCatalogFlink22.java
b/flink-connector/v2.2/flink/src/main/java/org/apache/gravitino/flink/connector/jdbc/GravitinoJdbcCatalogFlink22.java
new file mode 100644
index 0000000000..ce0fd3e735
--- /dev/null
+++
b/flink-connector/v2.2/flink/src/main/java/org/apache/gravitino/flink/connector/jdbc/GravitinoJdbcCatalogFlink22.java
@@ -0,0 +1,64 @@
+/*
+ * 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.gravitino.flink.connector.jdbc;
+
+import
org.apache.flink.connector.jdbc.core.database.catalog.factory.JdbcCatalogFactory;
+import org.apache.flink.table.catalog.AbstractCatalog;
+import org.apache.flink.table.factories.CatalogFactory;
+import org.apache.gravitino.flink.connector.PartitionConverter;
+import org.apache.gravitino.flink.connector.SchemaAndTablePropertiesConverter;
+import org.apache.gravitino.flink.connector.utils.CatalogCompat;
+import org.apache.gravitino.flink.connector.utils.CatalogCompatFlink22;
+
+/**
+ * {@link GravitinoJdbcCatalog} implementation for Flink 2.2. Uses the {@code
+ * org.apache.flink.connector.jdbc.core.*} factory packages shipped with {@code
+ * flink-connector-jdbc-core}/{@code -mysql}/{@code -postgres} 4.1.0-2.2.
+ */
+public class GravitinoJdbcCatalogFlink22 extends GravitinoJdbcCatalog {
+
+ /**
+ * Creates a catalog backed by the Flink 2.2 connector.
+ *
+ * @param context the catalog factory context
+ * @param defaultDatabase the default database name
+ * @param schemaAndTablePropertiesConverter the converter for schemas and
table properties
+ * @param partitionConverter the converter for partition specifications
+ */
+ public GravitinoJdbcCatalogFlink22(
+ CatalogFactory.Context context,
+ String defaultDatabase,
+ SchemaAndTablePropertiesConverter schemaAndTablePropertiesConverter,
+ PartitionConverter partitionConverter) {
+ super(context, defaultDatabase, schemaAndTablePropertiesConverter,
partitionConverter);
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ protected AbstractCatalog createInnerCatalog(CatalogFactory.Context context)
{
+ return (AbstractCatalog) new JdbcCatalogFactory().createCatalog(context);
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ protected CatalogCompat catalogCompat() {
+ return CatalogCompatFlink22.INSTANCE;
+ }
+}
diff --git
a/flink-connector/v2.2/flink/src/main/java/org/apache/gravitino/flink/connector/jdbc/mysql/GravitinoMysqlJdbcCatalogFactoryFlink22.java
b/flink-connector/v2.2/flink/src/main/java/org/apache/gravitino/flink/connector/jdbc/mysql/GravitinoMysqlJdbcCatalogFactoryFlink22.java
new file mode 100644
index 0000000000..9a6e7e3ce6
--- /dev/null
+++
b/flink-connector/v2.2/flink/src/main/java/org/apache/gravitino/flink/connector/jdbc/mysql/GravitinoMysqlJdbcCatalogFactoryFlink22.java
@@ -0,0 +1,41 @@
+/*
+ * 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.gravitino.flink.connector.jdbc.mysql;
+
+import org.apache.flink.table.catalog.Catalog;
+import org.apache.flink.table.factories.CatalogFactory;
+import org.apache.gravitino.flink.connector.PartitionConverter;
+import org.apache.gravitino.flink.connector.SchemaAndTablePropertiesConverter;
+import org.apache.gravitino.flink.connector.jdbc.GravitinoJdbcCatalogFlink22;
+
+/** {@link GravitinoMysqlJdbcCatalogFactory} implementation for Flink 2.2. */
+public class GravitinoMysqlJdbcCatalogFactoryFlink22 extends
GravitinoMysqlJdbcCatalogFactory {
+
+ /** {@inheritDoc} */
+ @Override
+ protected Catalog newCatalog(
+ CatalogFactory.Context context,
+ String defaultDatabase,
+ SchemaAndTablePropertiesConverter schemaAndTablePropertiesConverter,
+ PartitionConverter partitionConverter) {
+ return new GravitinoJdbcCatalogFlink22(
+ context, defaultDatabase, schemaAndTablePropertiesConverter,
partitionConverter);
+ }
+}
diff --git
a/flink-connector/v2.2/flink/src/main/java/org/apache/gravitino/flink/connector/jdbc/postgresql/GravitinoPostgresJdbcCatalogFactoryFlink22.java
b/flink-connector/v2.2/flink/src/main/java/org/apache/gravitino/flink/connector/jdbc/postgresql/GravitinoPostgresJdbcCatalogFactoryFlink22.java
new file mode 100644
index 0000000000..e2eb7e9f53
--- /dev/null
+++
b/flink-connector/v2.2/flink/src/main/java/org/apache/gravitino/flink/connector/jdbc/postgresql/GravitinoPostgresJdbcCatalogFactoryFlink22.java
@@ -0,0 +1,42 @@
+/*
+ * 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.gravitino.flink.connector.jdbc.postgresql;
+
+import org.apache.flink.table.catalog.Catalog;
+import org.apache.flink.table.factories.CatalogFactory;
+import org.apache.gravitino.flink.connector.PartitionConverter;
+import org.apache.gravitino.flink.connector.SchemaAndTablePropertiesConverter;
+import org.apache.gravitino.flink.connector.jdbc.GravitinoJdbcCatalogFlink22;
+
+/** {@link GravitinoPostgresJdbcCatalogFactory} implementation for Flink 2.2.
*/
+public class GravitinoPostgresJdbcCatalogFactoryFlink22
+ extends GravitinoPostgresJdbcCatalogFactory {
+
+ /** {@inheritDoc} */
+ @Override
+ protected Catalog newCatalog(
+ CatalogFactory.Context context,
+ String defaultDatabase,
+ SchemaAndTablePropertiesConverter schemaAndTablePropertiesConverter,
+ PartitionConverter partitionConverter) {
+ return new GravitinoJdbcCatalogFlink22(
+ context, defaultDatabase, schemaAndTablePropertiesConverter,
partitionConverter);
+ }
+}
diff --git
a/flink-connector/v2.2/flink/src/main/java/org/apache/gravitino/flink/connector/paimon/GravitinoPaimonCatalogFactoryFlink22.java
b/flink-connector/v2.2/flink/src/main/java/org/apache/gravitino/flink/connector/paimon/GravitinoPaimonCatalogFactoryFlink22.java
new file mode 100644
index 0000000000..0f25d1b690
--- /dev/null
+++
b/flink-connector/v2.2/flink/src/main/java/org/apache/gravitino/flink/connector/paimon/GravitinoPaimonCatalogFactoryFlink22.java
@@ -0,0 +1,39 @@
+/*
+ * 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.gravitino.flink.connector.paimon;
+
+import org.apache.flink.table.catalog.Catalog;
+import org.apache.gravitino.flink.connector.PartitionConverter;
+import org.apache.gravitino.flink.connector.SchemaAndTablePropertiesConverter;
+
+/** {@link GravitinoPaimonCatalogFactory} implementation for Flink 2.2. */
+public class GravitinoPaimonCatalogFactoryFlink22 extends
GravitinoPaimonCatalogFactory {
+
+ /** {@inheritDoc} */
+ @Override
+ protected Catalog newCatalog(
+ Context context,
+ String defaultDatabase,
+ SchemaAndTablePropertiesConverter schemaAndTablePropertiesConverter,
+ PartitionConverter partitionConverter) {
+ return new GravitinoPaimonCatalogFlink22(
+ context, defaultDatabase, schemaAndTablePropertiesConverter,
partitionConverter);
+ }
+}
diff --git
a/flink-connector/v2.2/flink/src/main/java/org/apache/gravitino/flink/connector/paimon/GravitinoPaimonCatalogFlink22.java
b/flink-connector/v2.2/flink/src/main/java/org/apache/gravitino/flink/connector/paimon/GravitinoPaimonCatalogFlink22.java
new file mode 100644
index 0000000000..1655545783
--- /dev/null
+++
b/flink-connector/v2.2/flink/src/main/java/org/apache/gravitino/flink/connector/paimon/GravitinoPaimonCatalogFlink22.java
@@ -0,0 +1,52 @@
+/*
+ * 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.gravitino.flink.connector.paimon;
+
+import org.apache.flink.table.factories.CatalogFactory;
+import org.apache.gravitino.flink.connector.PartitionConverter;
+import org.apache.gravitino.flink.connector.SchemaAndTablePropertiesConverter;
+import org.apache.gravitino.flink.connector.utils.CatalogCompat;
+import org.apache.gravitino.flink.connector.utils.CatalogCompatFlink22;
+
+/** {@link GravitinoPaimonCatalog} implementation for Flink 2.2. */
+public class GravitinoPaimonCatalogFlink22 extends GravitinoPaimonCatalog {
+
+ /**
+ * Creates a catalog backed by the Flink 2.2 connector.
+ *
+ * @param context the catalog factory context
+ * @param defaultDatabase the default database name
+ * @param schemaAndTablePropertiesConverter the converter for schemas and
table properties
+ * @param partitionConverter the converter for partition specifications
+ */
+ protected GravitinoPaimonCatalogFlink22(
+ CatalogFactory.Context context,
+ String defaultDatabase,
+ SchemaAndTablePropertiesConverter schemaAndTablePropertiesConverter,
+ PartitionConverter partitionConverter) {
+ super(context, defaultDatabase, schemaAndTablePropertiesConverter,
partitionConverter);
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ protected CatalogCompat catalogCompat() {
+ return CatalogCompatFlink22.INSTANCE;
+ }
+}
diff --git
a/flink-connector/v2.2/flink/src/main/java/org/apache/gravitino/flink/connector/utils/CatalogCompatFlink22.java
b/flink-connector/v2.2/flink/src/main/java/org/apache/gravitino/flink/connector/utils/CatalogCompatFlink22.java
new file mode 100644
index 0000000000..893783eaf8
--- /dev/null
+++
b/flink-connector/v2.2/flink/src/main/java/org/apache/gravitino/flink/connector/utils/CatalogCompatFlink22.java
@@ -0,0 +1,64 @@
+/*
+ * 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.gravitino.flink.connector.utils;
+
+import java.util.List;
+import java.util.Map;
+import org.apache.flink.connector.jdbc.core.table.JdbcDynamicTableFactory;
+import org.apache.flink.table.api.Schema;
+import org.apache.flink.table.catalog.CatalogPropertiesUtil;
+import org.apache.flink.table.catalog.CatalogTable;
+import org.apache.flink.table.catalog.ResolvedCatalogTable;
+import org.apache.flink.table.expressions.DefaultSqlFactory;
+import org.apache.flink.table.factories.Factory;
+
+/** {@link CatalogCompat} implementation for Flink 2.2. */
+public enum CatalogCompatFlink22 implements CatalogCompat {
+ /** Singleton compatibility implementation for Flink 2.2. */
+ INSTANCE;
+
+ /** {@inheritDoc} */
+ @Override
+ public CatalogTable createCatalogTable(
+ Schema schema, String comment, List<String> partitionKeys, Map<String,
String> options) {
+ // CatalogTable.of(...) was removed in Flink 2.x (deprecated as of Flink
1.20); use the
+ // builder API instead.
+ return CatalogTable.newBuilder()
+ .schema(schema)
+ .comment(comment)
+ .partitionKeys(partitionKeys)
+ .options(options)
+ .build();
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public Map<String, String> serializeCatalogTable(ResolvedCatalogTable
resolvedTable) {
+ // Flink 2.x requires a SqlFactory parameter for serializing
computed-column
+ // expressions; DefaultSqlFactory is the standard built-in implementation.
+ return CatalogPropertiesUtil.serializeCatalogTable(resolvedTable,
DefaultSqlFactory.INSTANCE);
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public Factory jdbcDynamicTableFactory() {
+ return new JdbcDynamicTableFactory();
+ }
+}
diff --git
a/flink-connector/v2.2/flink/src/main/resources/META-INF/services/org.apache.flink.table.factories.Factory
b/flink-connector/v2.2/flink/src/main/resources/META-INF/services/org.apache.flink.table.factories.Factory
new file mode 100644
index 0000000000..0fd9b0b5e7
--- /dev/null
+++
b/flink-connector/v2.2/flink/src/main/resources/META-INF/services/org.apache.flink.table.factories.Factory
@@ -0,0 +1,29 @@
+#
+# 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.
+#
+
+# Hive catalog support is intentionally omitted for Flink 2.2: no
flink-connector-hive release
+# targets the Flink 2.x line yet (tracked upstream as FLINK-38031), and the
newest available
+# release (built against 1.20) fails at runtime on Flink 2.x because it
references
+# org.apache.flink.api.java.hadoop.mapred.utils.HadoopUtils, a class removed
along with the
+# DataSet API. Revisit once flink-connector-hive ships a Flink 2.x-compatible
release.
+org.apache.gravitino.flink.connector.paimon.GravitinoPaimonCatalogFactoryFlink22
+org.apache.gravitino.flink.connector.iceberg.GravitinoIcebergCatalogFactoryFlink22
+org.apache.gravitino.flink.connector.jdbc.mysql.GravitinoMysqlJdbcCatalogFactoryFlink22
+org.apache.gravitino.flink.connector.jdbc.postgresql.GravitinoPostgresJdbcCatalogFactoryFlink22
+org.apache.gravitino.flink.connector.store.GravitinoCatalogStoreFactory
diff --git
a/flink-connector/v2.2/flink/src/test/java/org/apache/gravitino/flink/connector/catalog/TestBaseCatalogFlink22.java
b/flink-connector/v2.2/flink/src/test/java/org/apache/gravitino/flink/connector/catalog/TestBaseCatalogFlink22.java
new file mode 100644
index 0000000000..adfc181df9
--- /dev/null
+++
b/flink-connector/v2.2/flink/src/test/java/org/apache/gravitino/flink/connector/catalog/TestBaseCatalogFlink22.java
@@ -0,0 +1,31 @@
+/*
+ * 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.gravitino.flink.connector.catalog;
+
+import org.apache.gravitino.flink.connector.utils.CatalogCompat;
+import org.apache.gravitino.flink.connector.utils.CatalogCompatFlink22;
+
+public class TestBaseCatalogFlink22 extends TestBaseCatalog {
+
+ @Override
+ protected CatalogCompat catalogCompat() {
+ return CatalogCompatFlink22.INSTANCE;
+ }
+}
diff --git
a/flink-connector/v2.2/flink/src/test/java/org/apache/gravitino/flink/connector/hive/TestFlinkGenericTableUtilFlink22.java
b/flink-connector/v2.2/flink/src/test/java/org/apache/gravitino/flink/connector/hive/TestFlinkGenericTableUtilFlink22.java
new file mode 100644
index 0000000000..e14b254496
--- /dev/null
+++
b/flink-connector/v2.2/flink/src/test/java/org/apache/gravitino/flink/connector/hive/TestFlinkGenericTableUtilFlink22.java
@@ -0,0 +1,31 @@
+/*
+ * 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.gravitino.flink.connector.hive;
+
+import org.apache.gravitino.flink.connector.utils.CatalogCompat;
+import org.apache.gravitino.flink.connector.utils.CatalogCompatFlink22;
+
+public class TestFlinkGenericTableUtilFlink22 extends
TestFlinkGenericTableUtil {
+
+ @Override
+ protected CatalogCompat catalogCompat() {
+ return CatalogCompatFlink22.INSTANCE;
+ }
+}
diff --git
a/flink-connector/v2.2/flink/src/test/java/org/apache/gravitino/flink/connector/hive/TestGravitinoHiveCatalogFlink22.java
b/flink-connector/v2.2/flink/src/test/java/org/apache/gravitino/flink/connector/hive/TestGravitinoHiveCatalogFlink22.java
new file mode 100644
index 0000000000..b410fda376
--- /dev/null
+++
b/flink-connector/v2.2/flink/src/test/java/org/apache/gravitino/flink/connector/hive/TestGravitinoHiveCatalogFlink22.java
@@ -0,0 +1,31 @@
+/*
+ * 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.gravitino.flink.connector.hive;
+
+import org.apache.gravitino.flink.connector.utils.CatalogCompat;
+import org.apache.gravitino.flink.connector.utils.CatalogCompatFlink22;
+
+public class TestGravitinoHiveCatalogFlink22 extends TestGravitinoHiveCatalog {
+
+ @Override
+ protected CatalogCompat catalogCompat() {
+ return CatalogCompatFlink22.INSTANCE;
+ }
+}
diff --git
a/flink-connector/v2.2/flink/src/test/java/org/apache/gravitino/flink/connector/iceberg/TestGravitinoIcebergCatalogFlink22.java
b/flink-connector/v2.2/flink/src/test/java/org/apache/gravitino/flink/connector/iceberg/TestGravitinoIcebergCatalogFlink22.java
new file mode 100644
index 0000000000..34e4515c22
--- /dev/null
+++
b/flink-connector/v2.2/flink/src/test/java/org/apache/gravitino/flink/connector/iceberg/TestGravitinoIcebergCatalogFlink22.java
@@ -0,0 +1,84 @@
+/*
+ * 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.gravitino.flink.connector.iceberg;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertInstanceOf;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.mockito.Mockito.mock;
+
+import com.google.common.collect.ImmutableMap;
+import java.nio.file.Path;
+import java.util.List;
+import java.util.Map;
+import org.apache.flink.table.catalog.AbstractCatalog;
+import org.apache.gravitino.flink.connector.PartitionConverter;
+import org.apache.gravitino.flink.connector.SchemaAndTablePropertiesConverter;
+import org.apache.iceberg.flink.FlinkCatalog;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.io.TempDir;
+
+/**
+ * Verifies that {@link
GravitinoIcebergCatalogFlink22#createInnerIcebergCatalog} correctly threads
+ * the given catalog name and properties into the anonymous {@code
CatalogFactory.Context} shim
+ * required to work around Flink 2.x removing {@code FlinkCatalogFactory}'s
2-arg {@code
+ * createCatalog(String, Map)} overload.
+ */
+class TestGravitinoIcebergCatalogFlink22 {
+
+ @TempDir private Path warehouse;
+
+ @Test
+ void createInnerIcebergCatalogThreadsNameAndProperties() throws Exception {
+ Map<String, String> icebergProperties =
+ ImmutableMap.of(
+ IcebergPropertiesConstants.ICEBERG_CATALOG_TYPE,
+ "hadoop",
+ IcebergPropertiesConstants.ICEBERG_CATALOG_WAREHOUSE,
+ "file://" + warehouse);
+
+ GravitinoIcebergCatalogFlink22 catalog =
+ new GravitinoIcebergCatalogFlink22(
+ "my_catalog",
+ "default",
+ mock(SchemaAndTablePropertiesConverter.class),
+ mock(PartitionConverter.class),
+ icebergProperties,
+ icebergProperties);
+
+ Object inner = catalog.createInnerIcebergCatalog("my_catalog",
icebergProperties);
+
+ assertInstanceOf(FlinkCatalog.class, inner);
+ AbstractCatalog innerCatalog = (AbstractCatalog) inner;
+ // The catalog name was threaded through Context.getName().
+ assertEquals("my_catalog", innerCatalog.getName());
+
+ // The warehouse property was threaded through Context.getOptions():
opening the catalog and
+ // listing databases succeeds against the temp warehouse rather than
failing with a
+ // missing-warehouse / uninitialized-catalog error.
+ innerCatalog.open();
+ try {
+ List<String> databases = innerCatalog.listDatabases();
+ assertTrue(databases.isEmpty());
+ } finally {
+ innerCatalog.close();
+ }
+ }
+}
diff --git
a/flink-connector/v2.2/flink/src/test/java/org/apache/gravitino/flink/connector/integration/test/catalog/GravitinoCatalogManagerIT22.java
b/flink-connector/v2.2/flink/src/test/java/org/apache/gravitino/flink/connector/integration/test/catalog/GravitinoCatalogManagerIT22.java
new file mode 100644
index 0000000000..97f5711873
--- /dev/null
+++
b/flink-connector/v2.2/flink/src/test/java/org/apache/gravitino/flink/connector/integration/test/catalog/GravitinoCatalogManagerIT22.java
@@ -0,0 +1,22 @@
+/*
+ * 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.gravitino.flink.connector.integration.test.catalog;
+
+public class GravitinoCatalogManagerIT22 extends GravitinoCatalogManagerIT {}
diff --git
a/flink-connector/v2.2/flink/src/test/java/org/apache/gravitino/flink/connector/integration/test/iceberg/FlinkIcebergHiveCatalogIT22.java
b/flink-connector/v2.2/flink/src/test/java/org/apache/gravitino/flink/connector/integration/test/iceberg/FlinkIcebergHiveCatalogIT22.java
new file mode 100644
index 0000000000..0a8c42e79c
--- /dev/null
+++
b/flink-connector/v2.2/flink/src/test/java/org/apache/gravitino/flink/connector/integration/test/iceberg/FlinkIcebergHiveCatalogIT22.java
@@ -0,0 +1,22 @@
+/*
+ * 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.gravitino.flink.connector.integration.test.iceberg;
+
+public class FlinkIcebergHiveCatalogIT22 extends FlinkIcebergHiveCatalogIT {}
diff --git
a/flink-connector/v2.2/flink/src/test/java/org/apache/gravitino/flink/connector/integration/test/iceberg/FlinkIcebergJdbcCatalogIT22.java
b/flink-connector/v2.2/flink/src/test/java/org/apache/gravitino/flink/connector/integration/test/iceberg/FlinkIcebergJdbcCatalogIT22.java
new file mode 100644
index 0000000000..b0b9bebc8f
--- /dev/null
+++
b/flink-connector/v2.2/flink/src/test/java/org/apache/gravitino/flink/connector/integration/test/iceberg/FlinkIcebergJdbcCatalogIT22.java
@@ -0,0 +1,29 @@
+/*
+ * 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.gravitino.flink.connector.integration.test.iceberg;
+
+import org.junit.jupiter.api.condition.DisabledIf;
+
+// Even though Flink 2.2 and lakehouse-iceberg both use Iceberg 1.11, a JDBC
backend exercises the
+// server-side Iceberg JdbcCatalog, which hits a cross-classloader
IllegalAccessError when the
+// embedded MiniGravitino server shares the JVM with the Flink Iceberg
runtime. Run in deploy mode
+// only. @DisabledIf is not @Inherited, so each concrete subclass must declare
it explicitly.
+@DisabledIf("org.apache.gravitino.integration.test.util.ITUtils#isEmbedded")
+public class FlinkIcebergJdbcCatalogIT22 extends FlinkIcebergJdbcCatalogIT {}
diff --git
a/flink-connector/v2.2/flink/src/test/java/org/apache/gravitino/flink/connector/integration/test/iceberg/FlinkIcebergRestCatalogIT22.java
b/flink-connector/v2.2/flink/src/test/java/org/apache/gravitino/flink/connector/integration/test/iceberg/FlinkIcebergRestCatalogIT22.java
new file mode 100644
index 0000000000..feb825ac39
--- /dev/null
+++
b/flink-connector/v2.2/flink/src/test/java/org/apache/gravitino/flink/connector/integration/test/iceberg/FlinkIcebergRestCatalogIT22.java
@@ -0,0 +1,22 @@
+/*
+ * 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.gravitino.flink.connector.integration.test.iceberg;
+
+public class FlinkIcebergRestCatalogIT22 extends FlinkIcebergRestCatalogIT {}
diff --git
a/flink-connector/v2.2/flink/src/test/java/org/apache/gravitino/flink/connector/integration/test/jdbc/FlinkJdbcMysqlCatalogIT22.java
b/flink-connector/v2.2/flink/src/test/java/org/apache/gravitino/flink/connector/integration/test/jdbc/FlinkJdbcMysqlCatalogIT22.java
new file mode 100644
index 0000000000..010af20fde
--- /dev/null
+++
b/flink-connector/v2.2/flink/src/test/java/org/apache/gravitino/flink/connector/integration/test/jdbc/FlinkJdbcMysqlCatalogIT22.java
@@ -0,0 +1,53 @@
+/*
+ * 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.gravitino.flink.connector.integration.test.jdbc;
+
+import org.apache.flink.table.api.ValidationException;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+public class FlinkJdbcMysqlCatalogIT22 extends FlinkJdbcMysqlCatalogIT {
+
+ @Override
+ @Test
+ public void testCreateGravitinoJdbcCatalogUsingSQLMissingOptions() {
+ // Flink 2.2's JdbcCatalogFactory reports missing required catalog options
through Flink's
+ // own ValidationException (via FactoryUtil option validation) rather than
the
+ // IllegalArgumentException thrown by older minor versions.
+ tableEnv.useCatalog(DEFAULT_CATALOG);
+ String catalogName = "gravitino_mysql_jdbc_catalog_missing_options";
+ ValidationException exception =
+ Assertions.assertThrows(
+ ValidationException.class,
+ () ->
+ tableEnv.executeSql(
+ String.format(
+ "create catalog %s with ("
+ + "'type'='gravitino-jdbc-mysql', "
+ + "'base-url'='%s',"
+ + "'username'='%s',"
+ + "'default-database'='%s'"
+ + ")",
+ catalogName, mysqlUrl, mysqlUsername,
mysqlDefaultDatabase)));
+
+ Assertions.assertTrue(exception.getMessage().contains("password"));
+ Assertions.assertFalse(metalake.catalogExists(catalogName));
+ }
+}
diff --git
a/flink-connector/v2.2/flink/src/test/java/org/apache/gravitino/flink/connector/integration/test/paimon/FlinkPaimonHiveBackendIT22.java
b/flink-connector/v2.2/flink/src/test/java/org/apache/gravitino/flink/connector/integration/test/paimon/FlinkPaimonHiveBackendIT22.java
new file mode 100644
index 0000000000..18a92be60c
--- /dev/null
+++
b/flink-connector/v2.2/flink/src/test/java/org/apache/gravitino/flink/connector/integration/test/paimon/FlinkPaimonHiveBackendIT22.java
@@ -0,0 +1,22 @@
+/*
+ * 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.gravitino.flink.connector.integration.test.paimon;
+
+public class FlinkPaimonHiveBackendIT22 extends FlinkPaimonHiveBackendIT {}
diff --git
a/flink-connector/v2.2/flink/src/test/java/org/apache/gravitino/flink/connector/integration/test/paimon/FlinkPaimonJdbcBackendIT22.java
b/flink-connector/v2.2/flink/src/test/java/org/apache/gravitino/flink/connector/integration/test/paimon/FlinkPaimonJdbcBackendIT22.java
new file mode 100644
index 0000000000..e672250402
--- /dev/null
+++
b/flink-connector/v2.2/flink/src/test/java/org/apache/gravitino/flink/connector/integration/test/paimon/FlinkPaimonJdbcBackendIT22.java
@@ -0,0 +1,22 @@
+/*
+ * 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.gravitino.flink.connector.integration.test.paimon;
+
+public class FlinkPaimonJdbcBackendIT22 extends FlinkPaimonJdbcBackendIT {}
diff --git
a/flink-connector/v2.2/flink/src/test/java/org/apache/gravitino/flink/connector/integration/test/paimon/FlinkPaimonLocalFileSystemBackendIT22.java
b/flink-connector/v2.2/flink/src/test/java/org/apache/gravitino/flink/connector/integration/test/paimon/FlinkPaimonLocalFileSystemBackendIT22.java
new file mode 100644
index 0000000000..89e0903a3d
--- /dev/null
+++
b/flink-connector/v2.2/flink/src/test/java/org/apache/gravitino/flink/connector/integration/test/paimon/FlinkPaimonLocalFileSystemBackendIT22.java
@@ -0,0 +1,22 @@
+/*
+ * 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.gravitino.flink.connector.integration.test.paimon;
+
+public class FlinkPaimonLocalFileSystemBackendIT22 extends
FlinkPaimonLocalFileSystemBackendIT {}
diff --git
a/flink-connector/v2.2/flink/src/test/java/org/apache/gravitino/flink/connector/jdbc/TestGravitinoJdbcCatalogFlink22.java
b/flink-connector/v2.2/flink/src/test/java/org/apache/gravitino/flink/connector/jdbc/TestGravitinoJdbcCatalogFlink22.java
new file mode 100644
index 0000000000..e04bfba386
--- /dev/null
+++
b/flink-connector/v2.2/flink/src/test/java/org/apache/gravitino/flink/connector/jdbc/TestGravitinoJdbcCatalogFlink22.java
@@ -0,0 +1,31 @@
+/*
+ * 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.gravitino.flink.connector.jdbc;
+
+import org.apache.gravitino.flink.connector.utils.CatalogCompat;
+import org.apache.gravitino.flink.connector.utils.CatalogCompatFlink22;
+
+public class TestGravitinoJdbcCatalogFlink22 extends TestGravitinoJdbcCatalog {
+
+ @Override
+ protected CatalogCompat catalogCompat() {
+ return CatalogCompatFlink22.INSTANCE;
+ }
+}
diff --git
a/flink-connector/v2.2/flink/src/test/java/org/apache/gravitino/flink/connector/paimon/TestGravitinoPaimonCatalogFlink22.java
b/flink-connector/v2.2/flink/src/test/java/org/apache/gravitino/flink/connector/paimon/TestGravitinoPaimonCatalogFlink22.java
new file mode 100644
index 0000000000..6bfbc973c8
--- /dev/null
+++
b/flink-connector/v2.2/flink/src/test/java/org/apache/gravitino/flink/connector/paimon/TestGravitinoPaimonCatalogFlink22.java
@@ -0,0 +1,31 @@
+/*
+ * 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.gravitino.flink.connector.paimon;
+
+import org.apache.gravitino.flink.connector.utils.CatalogCompat;
+import org.apache.gravitino.flink.connector.utils.CatalogCompatFlink22;
+
+public class TestGravitinoPaimonCatalogFlink22 extends
TestGravitinoPaimonCatalog {
+
+ @Override
+ protected CatalogCompat catalogCompat() {
+ return CatalogCompatFlink22.INSTANCE;
+ }
+}
diff --git
a/flink-connector/v2.2/flink/src/test/java/org/apache/gravitino/flink/connector/utils/TestCatalogCompatFlink22.java
b/flink-connector/v2.2/flink/src/test/java/org/apache/gravitino/flink/connector/utils/TestCatalogCompatFlink22.java
new file mode 100644
index 0000000000..b30215d848
--- /dev/null
+++
b/flink-connector/v2.2/flink/src/test/java/org/apache/gravitino/flink/connector/utils/TestCatalogCompatFlink22.java
@@ -0,0 +1,80 @@
+/*
+ * 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.gravitino.flink.connector.utils;
+
+import java.util.Collections;
+import java.util.Map;
+import org.apache.flink.connector.jdbc.core.table.JdbcDynamicTableFactory;
+import org.apache.flink.table.api.DataTypes;
+import org.apache.flink.table.api.Schema;
+import org.apache.flink.table.catalog.CatalogTable;
+import org.apache.flink.table.catalog.Column;
+import org.apache.flink.table.catalog.ResolvedCatalogTable;
+import org.apache.flink.table.catalog.ResolvedSchema;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+public class TestCatalogCompatFlink22 {
+
+ @Test
+ public void testCreateCatalogTable() {
+ CatalogTable catalogTable =
+ CatalogCompatFlink22.INSTANCE.createCatalogTable(
+ Schema.newBuilder().column("id", DataTypes.INT()).build(),
+ "comment",
+ Collections.singletonList("id"),
+ Collections.singletonMap("key", "value"));
+
+ Assertions.assertEquals("comment", catalogTable.getComment());
+ Assertions.assertEquals(Collections.singletonList("id"),
catalogTable.getPartitionKeys());
+ Assertions.assertEquals("value", catalogTable.getOptions().get("key"));
+ Assertions.assertEquals(1,
catalogTable.getUnresolvedSchema().getColumns().size());
+ }
+
+ @Test
+ @SuppressWarnings("deprecation")
+ public void testSerializeCatalogTable() {
+ CatalogTable catalogTable =
+ CatalogCompatFlink22.INSTANCE.createCatalogTable(
+ Schema.newBuilder().column("id", DataTypes.INT()).build(),
+ "comment",
+ Collections.emptyList(),
+ Collections.singletonMap("key", "value"));
+ ResolvedCatalogTable resolvedCatalogTable =
+ new ResolvedCatalogTable(
+ catalogTable,
+ new ResolvedSchema(
+ Collections.singletonList(Column.physical("id",
DataTypes.INT())),
+ Collections.emptyList(),
+ null));
+
+ Map<String, String> serialized =
+
CatalogCompatFlink22.INSTANCE.serializeCatalogTable(resolvedCatalogTable);
+
+ Assertions.assertEquals("id", serialized.get("schema.0.name"));
+ Assertions.assertEquals("value", serialized.get("key"));
+ }
+
+ @Test
+ public void testJdbcDynamicTableFactory() {
+ Assertions.assertInstanceOf(
+ JdbcDynamicTableFactory.class,
CatalogCompatFlink22.INSTANCE.jdbcDynamicTableFactory());
+ }
+}
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index cb827cdacb..9b2f9a9168 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -119,6 +119,7 @@ jodd = "3.5.2"
flink119 = "1.19.0"
flink120 = "1.20.0"
flink21 = "2.1.3"
+flink22 = "2.2.1"
flinkjdbc119 = "3.3.0-1.19"
flinkjdbc120 = "3.3.0-1.20"
# flink-connector-jdbc was restructured starting with the 4.x line: the
monolithic
@@ -126,20 +127,23 @@ flinkjdbc120 = "3.3.0-1.20"
# database (flink-connector-jdbc-mysql, flink-connector-jdbc-postgres, ...),
and this split line
# is what publishes real Flink 2.x builds.
flinkjdbc21 = "4.1.0-2.1"
+flinkjdbc22 = "4.1.0-2.2"
# flink-connector-hive has not published a build targeting the Flink 2.x line
yet either;
# reuse the newest externalized release (built against 1.20) until an official
2.x build ships.
flinkHive21 = "3.0.0-1.20"
-# flink-connector-jdbc-core (Flink 2.1) transitively pulls
openlineage-sql-java:1.32.0, whose
+# flink-connector-jdbc-core (Flink 2.x) transitively pulls
openlineage-sql-java:1.32.0, whose
# bundled, unrelocated org.apache.commons.lang3.SystemProperties predates the
getUserName(String)
# overload and shadows the real commons-lang3 on the classpath. Force this
newer release, which
# ships an up-to-date bundled copy.
-openlineageSqlJava21 = "1.52.0"
+openlineageSqlJava = "1.52.0"
iceberg4flink119 = "1.10.2"
iceberg4flink120 = "1.11.0"
iceberg4flink21 = "1.11.0"
+iceberg4flink22 = "1.12.0"
paimon4flink119 = "1.2.0"
paimon4flink120 = "1.2.0"
paimon4flink21 = "1.4.1"
+paimon4flink22 = "1.4.1"
# cglib upgraded from 2. to 3.3.0 for Java 17 compatibility.
# Explicit ASM dependency (9.8) is required due to cglib's internal use and
Java 17 module system.
cglib = "3.3.0"
@@ -383,8 +387,11 @@ flinkjdbc120 =
{group='org.apache.flink',name='flink-connector-jdbc', version.re
flinkjdbc21-core = {group='org.apache.flink',name='flink-connector-jdbc-core',
version.ref='flinkjdbc21'}
flinkjdbc21-mysql =
{group='org.apache.flink',name='flink-connector-jdbc-mysql',
version.ref='flinkjdbc21'}
flinkjdbc21-postgres =
{group='org.apache.flink',name='flink-connector-jdbc-postgres',
version.ref='flinkjdbc21'}
+flinkjdbc22-core = {group='org.apache.flink',name='flink-connector-jdbc-core',
version.ref='flinkjdbc22'}
+flinkjdbc22-mysql =
{group='org.apache.flink',name='flink-connector-jdbc-mysql',
version.ref='flinkjdbc22'}
+flinkjdbc22-postgres =
{group='org.apache.flink',name='flink-connector-jdbc-postgres',
version.ref='flinkjdbc22'}
flinkHive21 = {group='org.apache.flink',name='flink-connector-hive_2.12',
version.ref='flinkHive21'}
-openlineageSqlJava21 = {group='io.openlineage',name='openlineage-sql-java',
version.ref='openlineageSqlJava21'}
+openlineageSqlJava = {group='io.openlineage',name='openlineage-sql-java',
version.ref='openlineageSqlJava'}
concurrent-trees = { group = "com.googlecode.concurrent-trees", name =
"concurrent-trees", version.ref = "concurrent-trees" }
jcasbin = { group='org.casbin', name='jcasbin', version.ref="jcasbin" }
openlineage-java= { group = "io.openlineage", name = "openlineage-java",
version.ref = "openlineage" }
diff --git a/settings.gradle.kts b/settings.gradle.kts
index edc3da371e..511cdd025d 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -100,11 +100,16 @@ if (scalaVersion == "2.12") {
project(":flink-connector:flink-runtime-1.20").projectDir =
file("flink-connector/v1.20/flink-runtime")
}
-// Flink 2.x removed the Scala APIs entirely, so the flink-2.1 modules are not
gated by scalaVersion.
+// These connectors use Flink Java APIs, so they do not need scalaVersion
gating.
+// Flink internals still use Scala.
include("flink-connector:flink-2.1", "flink-connector:flink-runtime-2.1")
project(":flink-connector:flink-2.1").projectDir =
file("flink-connector/v2.1/flink")
project(":flink-connector:flink-runtime-2.1").projectDir =
file("flink-connector/v2.1/flink-runtime")
+include("flink-connector:flink-2.2", "flink-connector:flink-runtime-2.2")
+project(":flink-connector:flink-2.2").projectDir =
file("flink-connector/v2.2/flink")
+project(":flink-connector:flink-runtime-2.2").projectDir =
+ file("flink-connector/v2.2/flink-runtime")
include("spark-connector:spark-3.5", "spark-connector:spark-runtime-3.5")
project(":spark-connector:spark-3.5").projectDir =
file("spark-connector/v3.5/spark")
project(":spark-connector:spark-runtime-3.5").projectDir =
file("spark-connector/v3.5/spark-runtime")