diff --git a/.github/workflows/build-and-push-images.yml b/.github/workflows/build-and-push-images.yml
index 19534787f8b..ae998c9a9ef 100644
--- a/.github/workflows/build-and-push-images.yml
+++ b/.github/workflows/build-and-push-images.yml
@@ -123,7 +123,7 @@ jobs:
uses: actions/setup-java@v5
with:
distribution: 'temurin'
- java-version: 11
+ java-version: 17
- name: Setup sbt launcher
uses: sbt/setup-sbt@508b753e53cb6095967669e0911487d2b9bc9f41 # v1.1.22
@@ -325,7 +325,7 @@ jobs:
uses: actions/setup-java@v5
with:
distribution: 'temurin'
- java-version: 11
+ java-version: 17
- name: Setup sbt launcher
uses: sbt/setup-sbt@508b753e53cb6095967669e0911487d2b9bc9f41 # v1.1.22
@@ -405,7 +405,7 @@ jobs:
uses: actions/setup-java@v5
with:
distribution: 'temurin'
- java-version: 11
+ java-version: 17
- name: Setup sbt launcher
uses: sbt/setup-sbt@508b753e53cb6095967669e0911487d2b9bc9f41 # v1.1.22
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 988c3831397..0a1ffbef18a 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -144,7 +144,7 @@ jobs:
strategy:
matrix:
os: [ubuntu-22.04]
- java-version: [11]
+ java-version: [17]
runs-on: ${{ matrix.os }}
env:
JAVA_OPTS: -Xms2048M -Xmx2048M -Xss6M -XX:ReservedCodeCacheSize=256M -Dfile.encoding=UTF-8
@@ -175,7 +175,7 @@ jobs:
uses: actions/setup-java@v5
with:
distribution: "temurin"
- java-version: 11
+ java-version: 17
- name: Create Databases
# Must run before any sbt compile step: the build's JOOQ source
# generators connect to texera_db while compiling.
@@ -262,7 +262,7 @@ jobs:
strategy:
matrix:
os: [ubuntu-22.04]
- java-version: [11]
+ java-version: [17]
runs-on: ${{ matrix.os }}
env:
JAVA_OPTS: -Xms2048M -Xmx2048M -Xss6M -XX:ReservedCodeCacheSize=256M -Dfile.encoding=UTF-8
@@ -293,7 +293,7 @@ jobs:
uses: actions/setup-java@v5
with:
distribution: "temurin"
- java-version: 11
+ java-version: 17
- name: Setup Python for Scala-Python integration tests
uses: actions/setup-python@v6
with:
@@ -405,7 +405,7 @@ jobs:
uses: actions/setup-java@v5
with:
distribution: "temurin"
- java-version: 11
+ java-version: 17
- name: Setup sbt launcher
uses: sbt/setup-sbt@508b753e53cb6095967669e0911487d2b9bc9f41 # v1.1.22
- uses: coursier/cache-action@90c37294538be80a558fd665531fcdc2b467b475 # v8.1.0
diff --git a/.jvmopts b/.jvmopts
new file mode 100644
index 00000000000..d27383a1a86
--- /dev/null
+++ b/.jvmopts
@@ -0,0 +1,34 @@
+# 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.
+#
+# JVM options for sbt's launcher script. Read by `sbt` from the build
+# root and applied to sbt's own JVM (which also runs the tests when
+# Test / fork := false, the default for this project).
+#
+# JDK 17+ --add-opens flags required by:
+# - Apache Pekko (dispatcher / mailbox / scheduler use sun.misc.Unsafe
+# via jdk.internal.misc, plus java.lang for virtual threads and
+# sun.nio.ch for Aeron / NIO channels).
+# https://github.com/apache/pekko/blob/main/project/JdkOptions.scala
+# - Apache Arrow Java off-heap memory (java.nio).
+# https://arrow.apache.org/java/main/install.html
+# - Ehcache SizeOf reflection used by Tuple.inMemSize (java.lang +
+# java.util). Refs discussion #4001.
+--add-opens=java.base/jdk.internal.misc=ALL-UNNAMED
+--add-opens=java.base/java.lang=ALL-UNNAMED
+--add-opens=java.base/sun.nio.ch=ALL-UNNAMED
+--add-opens=java.base/java.nio=ALL-UNNAMED
+--add-opens=java.base/java.util=ALL-UNNAMED
diff --git a/.run/ComputingUnitMaster.run.xml b/.run/ComputingUnitMaster.run.xml
index 5ffffb79e88..094518362bc 100644
--- a/.run/ComputingUnitMaster.run.xml
+++ b/.run/ComputingUnitMaster.run.xml
@@ -21,6 +21,9 @@ under the License.
+
+
+
diff --git a/.run/ComputingUnitWorker.run.xml b/.run/ComputingUnitWorker.run.xml
index 854da672287..13d3198d640 100644
--- a/.run/ComputingUnitWorker.run.xml
+++ b/.run/ComputingUnitWorker.run.xml
@@ -21,6 +21,9 @@ under the License.
+
+
+
diff --git a/AGENTS.md b/AGENTS.md
index cb1cd0fdb3a..ab4706a43de 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -66,7 +66,7 @@ merge.
| Component | Version |
| --- | --- |
-| Java | JDK 11 |
+| Java | JDK 17 |
| Scala | 2.13 |
| Python | 3.12 |
| Node | 24 |
@@ -90,6 +90,14 @@ in [`udf.conf`](common/config/src/main/resources/udf.conf) or
`export UDF_PYTHON_PATH="$(pwd)/../venv312/bin/python"` (env var overrides).
Without it, `sbt` Python-integration tests fail to launch a worker.
+When running computing-unit master/worker outside their Docker images on
+JDK 17+, also `export JDK_JAVA_OPTIONS="--add-opens=java.base/java.nio=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED"`.
+Without it, [Apache Arrow Java](https://arrow.apache.org/java/main/install.html)
+(off-heap `java.nio` access) and Ehcache `SizeOf` used by `Tuple.inMemSize`
+(reflective `java.lang`/`java.util` access) hit `InaccessibleObjectException`
+under JDK 17 strong encapsulation
+(refs [discussion #4001](https://github.com/apache/texera/discussions/4001)).
+
### Branch and commit naming
Short, **Conventional Commits**, same shape for branch and commit subject.
diff --git a/bin/access-control-service.dockerfile b/bin/access-control-service.dockerfile
index 1429171a5a5..79eb2594286 100644
--- a/bin/access-control-service.dockerfile
+++ b/bin/access-control-service.dockerfile
@@ -24,7 +24,7 @@
# completeness or stability of the code, it does indicate that the project
# has yet to be fully endorsed by the ASF.
-FROM sbtscala/scala-sbt:eclipse-temurin-jammy-11.0.17_8_1.9.3_2.13.11 AS build
+FROM sbtscala/scala-sbt:eclipse-temurin-jammy-17.0.5_8_1.9.3_2.13.11 AS build
# Set working directory
WORKDIR /texera
@@ -52,7 +52,7 @@ RUN sbt clean AccessControlService/dist
# Unzip the texera binary
RUN unzip access-control-service/target/universal/access-control-service-*.zip -d target/
-FROM eclipse-temurin:11-jre-jammy AS runtime
+FROM eclipse-temurin:17-jre-jammy AS runtime
WORKDIR /texera
diff --git a/bin/computing-unit-master.dockerfile b/bin/computing-unit-master.dockerfile
index 5fcb54968dc..973da14ed77 100644
--- a/bin/computing-unit-master.dockerfile
+++ b/bin/computing-unit-master.dockerfile
@@ -24,7 +24,7 @@
# completeness or stability of the code, it does indicate that the project
# has yet to be fully endorsed by the ASF.
-FROM sbtscala/scala-sbt:eclipse-temurin-jammy-11.0.17_8_1.9.3_2.13.11 AS build
+FROM sbtscala/scala-sbt:eclipse-temurin-jammy-17.0.5_8_1.9.3_2.13.11 AS build
# Set working directory
WORKDIR /texera
@@ -64,7 +64,7 @@ RUN python3 bin/licensing/concat_license_binary.py amber/LICENSE-binary-combined
amber/LICENSE-binary-java \
amber/LICENSE-binary-python
-FROM eclipse-temurin:11-jdk-jammy AS runtime
+FROM eclipse-temurin:17-jdk-jammy AS runtime
WORKDIR /texera/amber
diff --git a/bin/computing-unit-worker.dockerfile b/bin/computing-unit-worker.dockerfile
index f600a9c05fb..5c78eea2a7b 100644
--- a/bin/computing-unit-worker.dockerfile
+++ b/bin/computing-unit-worker.dockerfile
@@ -24,7 +24,7 @@
# completeness or stability of the code, it does indicate that the project
# has yet to be fully endorsed by the ASF.
-FROM sbtscala/scala-sbt:eclipse-temurin-jammy-11.0.17_8_1.9.3_2.13.11 AS build
+FROM sbtscala/scala-sbt:eclipse-temurin-jammy-17.0.5_8_1.9.3_2.13.11 AS build
# Set working directory
WORKDIR /texera
@@ -64,7 +64,7 @@ RUN python3 bin/licensing/concat_license_binary.py amber/LICENSE-binary-combined
amber/LICENSE-binary-java \
amber/LICENSE-binary-python
-FROM eclipse-temurin:11-jre-jammy AS runtime
+FROM eclipse-temurin:17-jre-jammy AS runtime
WORKDIR /texera/amber
diff --git a/bin/config-service.dockerfile b/bin/config-service.dockerfile
index 17c3d57de1f..d8a967ab9a5 100644
--- a/bin/config-service.dockerfile
+++ b/bin/config-service.dockerfile
@@ -24,7 +24,7 @@
# completeness or stability of the code, it does indicate that the project
# has yet to be fully endorsed by the ASF.
-FROM sbtscala/scala-sbt:eclipse-temurin-jammy-11.0.17_8_1.9.3_2.13.11 AS build
+FROM sbtscala/scala-sbt:eclipse-temurin-jammy-17.0.5_8_1.9.3_2.13.11 AS build
# Set working directory
WORKDIR /texera
@@ -52,7 +52,7 @@ RUN sbt clean ConfigService/dist
# Unzip the texera binary
RUN unzip config-service/target/universal/config-service-*.zip -d target/
-FROM eclipse-temurin:11-jre-jammy AS runtime
+FROM eclipse-temurin:17-jre-jammy AS runtime
WORKDIR /texera
diff --git a/bin/file-service.dockerfile b/bin/file-service.dockerfile
index 3966b5122b8..a475e0ccdba 100644
--- a/bin/file-service.dockerfile
+++ b/bin/file-service.dockerfile
@@ -24,7 +24,7 @@
# completeness or stability of the code, it does indicate that the project
# has yet to be fully endorsed by the ASF.
-FROM sbtscala/scala-sbt:eclipse-temurin-jammy-11.0.17_8_1.9.3_2.13.11 AS build
+FROM sbtscala/scala-sbt:eclipse-temurin-jammy-17.0.5_8_1.9.3_2.13.11 AS build
# Set working directory
WORKDIR /texera
@@ -52,7 +52,7 @@ RUN sbt clean FileService/dist
# Unzip the texera binary
RUN unzip file-service/target/universal/file-service-*.zip -d target/
-FROM eclipse-temurin:11-jre-jammy AS runtime
+FROM eclipse-temurin:17-jre-jammy AS runtime
WORKDIR /texera
diff --git a/bin/texera-web-application.dockerfile b/bin/texera-web-application.dockerfile
index 706b0fdcfb5..08bca93d103 100644
--- a/bin/texera-web-application.dockerfile
+++ b/bin/texera-web-application.dockerfile
@@ -38,7 +38,7 @@ RUN echo "nodeLinker: node-modules" >> /frontend/.yarnrc.yml
WORKDIR /frontend
RUN yarn install && yarn run build
-FROM sbtscala/scala-sbt:eclipse-temurin-jammy-11.0.17_8_1.9.3_2.13.11 AS build
+FROM sbtscala/scala-sbt:eclipse-temurin-jammy-17.0.5_8_1.9.3_2.13.11 AS build
# Set working directory
WORKDIR /texera
@@ -82,7 +82,7 @@ RUN python3 bin/licensing/concat_license_binary.py amber/LICENSE-binary-combined
amber/LICENSE-binary-java \
amber/LICENSE-binary-frontend
-FROM eclipse-temurin:11-jre-jammy AS runtime
+FROM eclipse-temurin:17-jre-jammy AS runtime
WORKDIR /texera/amber
# Copy built frontend files from the build-frontend stage to match FileAssetsBundle path (../../frontend/dist from /texera/amber)
diff --git a/bin/workflow-compiling-service.dockerfile b/bin/workflow-compiling-service.dockerfile
index b8f7f6c3923..ba29e0d0b89 100644
--- a/bin/workflow-compiling-service.dockerfile
+++ b/bin/workflow-compiling-service.dockerfile
@@ -24,7 +24,7 @@
# completeness or stability of the code, it does indicate that the project
# has yet to be fully endorsed by the ASF.
-FROM sbtscala/scala-sbt:eclipse-temurin-jammy-11.0.17_8_1.9.3_2.13.11 AS build
+FROM sbtscala/scala-sbt:eclipse-temurin-jammy-17.0.5_8_1.9.3_2.13.11 AS build
# Set working directory
WORKDIR /texera
@@ -52,7 +52,7 @@ RUN sbt clean WorkflowCompilingService/dist
# Unzip the texera binary
RUN unzip workflow-compiling-service/target/universal/workflow-compiling-service-*.zip -d target/
-FROM eclipse-temurin:11-jre-jammy AS runtime
+FROM eclipse-temurin:17-jre-jammy AS runtime
WORKDIR /texera
diff --git a/bin/workflow-computing-unit-managing-service.dockerfile b/bin/workflow-computing-unit-managing-service.dockerfile
index 78d0ba89db4..8d8bf738fd6 100644
--- a/bin/workflow-computing-unit-managing-service.dockerfile
+++ b/bin/workflow-computing-unit-managing-service.dockerfile
@@ -24,7 +24,7 @@
# completeness or stability of the code, it does indicate that the project
# has yet to be fully endorsed by the ASF.
-FROM sbtscala/scala-sbt:eclipse-temurin-jammy-11.0.17_8_1.9.3_2.13.11 AS build
+FROM sbtscala/scala-sbt:eclipse-temurin-jammy-17.0.5_8_1.9.3_2.13.11 AS build
# Set working directory
WORKDIR /texera
@@ -52,7 +52,7 @@ RUN sbt clean ComputingUnitManagingService/dist
# Unzip the texera binary
RUN unzip computing-unit-managing-service/target/universal/computing-unit-managing-service-*.zip -d target/
-FROM eclipse-temurin:11-jre-jammy AS runtime
+FROM eclipse-temurin:17-jre-jammy AS runtime
WORKDIR /texera