Highlights
v0.7.0 is a performance and operability release. Parameterized queries move off ADBC onto native Arrow Flight SQL prepared statements running on the same tuned connection as regular queries, prepared statements are cached and reused, retries use real exponential backoff, and the Netty/gRPC dependency stack is aligned onto supported versions. The release also delivers mTLS client certificates and health, readiness, and runtime status checks.
Most applications can upgrade without code changes — see the upgrade guide.
<dependency>
<groupId>ai.spice</groupId>
<artifactId>spiceai</artifactId>
<version>0.7.0</version>
</dependency>What's New
🔐 mTLS Client Certificates
Connect to Spice deployments requiring mutual TLS and/or a custom CA — withTlsClientCertFile, withTlsClientKeyFile, withTlsRootCertFile (PEM), applied to Flight queries, parameterized queries, and HTTP operations.
🏥 Health, Readiness, and Runtime Status
isHealthy() (liveness), isReady() (datasets loaded), and runtimeStatus() (per-connection detail) — poll-friendly, never throw on an unreachable runtime.
⚡ Native Flight SQL Prepared Statements (ADBC removed)
queryWithParams now runs on Arrow Flight SQL prepared statements on the same tuned channels as query() — inheriting DNS re-resolution, HTTP/2 keep-alive, and mTLS — with prepared statement caching (default 64, withPreparedStatementCacheSize(0) to disable) that removes two network round trips from every repeated query, transparent re-prepare on stale handles, and full multi-endpoint result consumption. Two dependencies removed.
🚀 Performance Tuning Options
withChannelCount(n)— round-robin gRPC connection pool for highly concurrent workloadswithQueryTimeout(d)— deadline for query planning / prepare / bind RPCs (result streaming unaffected)withPreparedStatementCacheSize(n)— prepared statement reuse
🔁 Real Retry Backoff
Exponential backoff with jitter (~250ms, 500ms, 1s, … capped at 10s) replaces the previous 1–2ms waits, so default retries actually survive load-balancer failovers and restarts.
🔄 Automatic Re-Authentication
Expired handshake tokens (UNAUTHENTICATED) trigger a single automatic re-handshake and retry — no manual reset() needed.
🛡️ Safer reset() Under Concurrency
reset() retires old connections gracefully: in-flight queries and open result streams complete while new queries move to fresh connections.
🐝 HikariCP / JDBC Interop
Pooling JDBC connections to Spice with HikariCP via the Arrow Flight SQL JDBC driver is now verified by tests and documented in the README.
Dependency Changes
| Dependency | v0.6.0 | v0.7.0 |
|---|---|---|
| Apache Arrow Flight SQL | 19.0.0 | 19.0.0 |
| Apache Arrow ADBC (driver + core) | 0.22.0 | removed |
| netty-all | 4.2.12.Final | removed |
| Netty (netty-bom) | 4.2.12 (forced) | 4.1.130.Final |
| gRPC (grpc-bom) | transitive | 1.79.0 (pinned) |
| netty-transport-native-epoll | — | 4.1.130.Final (Linux) |
| BouncyCastle bcprov/bcpkix | transitive | 1.80 (explicit) |
Compatibility
Public API unchanged; new APIs are additive. Two things to know:
queryWithParamsfailure causes are nowFlightRuntimeException(wasAdbcException), still wrapped inExecutionException.- Failed queries take longer to surface by default (real retry backoff); use
withMaxRetries(0)for fail-fast paths.
Full details: release notes · upgrade guide