Infinispan 14.0.0.Final
Flying saucers are probably the most common type of UFO. They are sleek and shiny and, most importantly, they come in peace bringing lots of goodies from outer space! Just like Infinispan 14! Oh, and the fact that it’s also the name of a beer is no sheer coincidence.
JDK requirements
You will need at least JDK 11 in order to use Infinispan 14. Infinispan also supports JDK 17 LTS and the recently released JDK 19.
Jakarta EE
We now ship Jakarta EE variants of most of our modules: just append -jakarta
to the artifact name:
<dependency>
<groupId>org.infinispan</groupId>
<artifactId>infinispan-core-jakarta</artifactId>
<version>14.0.0.Final</version>
</dependency>
Core
-
Cluster Listener using
includeCurrentState`
will have better memory and performance performance. Every key no longer requires calculating its segment while iterating and memory is freed much earlier and is closed as each segment completes transfer -
State Transfer reduces how long memory is required to be held therefore reducing required memory overheads when configuring your server.
-
State transfer metrics are exposed through JMX. Expose the number of segments during transfer.
-
Size method when invoked on a cache has been optimized in various cases to be an
O(1)
operation instead ofO(N)
. Involves if expiration and if stores are configured, please check ISPN-9366 for more information. -
Reduced some cases of blocking threads being over utilized, therefore reducing how large the blocking thread pool would need to grow.
-
Dynamic RBAC: a dynamic, clustered role mapper that can be modified at runtime to grant/deny access to specific principals.
Query
-
Native Infinispan indexing annotations which finally replace the legacy Hibernate Query annotations we’ve used in past versions (see https://infinispan.org/blog/2022/06/14/infinispan-14-indexing-query-news)
-
Index startup mode to determine what happens to indexes on cache start (see https://infinispan.org/blog/2022/06/14/infinispan-14-indexing-query-news)
-
Dynamic index schema updates allow you to evolve your schema at runtime with near-zero impact to your queries (see https://infinispan.org/blog/2022/06/14/infinispan-14-indexing-query-news)
-
Support Protobuf’s
oneof
-
We improved the hybrid query system
-
Support normalizers with the HotRod client
Persistence
-
SoftIndexFileStore
(default file store) segmentation performance has been improved significantly. This also reduces the number of Index segments required which reduces the number of open files and threads required on the server. -
JDBCStringBasedStore
no longer requires configuring the database min and max version as this is dynamically configured when checking the JDBC connection. -
JPAStore
has been removed. It had been deprecated for quite a while, but the move to support Hibernate 6 prompted its removal asJPAStore
only worked with Hibernate 5.
Hot Rod client
-
A new Hot Rod client with a completely redesigned API.
-
Sync (blocking), Async (non-blocking) and Mutiny sub-APIs that fit with your programming model of choice.
try (SyncContainer infinispan = Infinispan.create("hotrod://localhost")) { // Sync SyncCache<String, String> mycache = infinispan.sync().caches().get("mycache"); mycache.set("key", "value"); String value = mycache.get("key"); // set with options mycache.set("key", "anothervalue", writeOptions().lifespan(Duration.ofHours(1)).timeout(Duration.ofMillis(500)).build()); // Async infinispan.async().caches() .get("mycache").thenApply(c -> c.set("key", "value").thenApply(ignore -> c.get("key").thenApply(value -> c.set("key", "anothervalue", writeOptions().lifespan(Duration.ofHours(1)).timeout(Duration.ofMillis(500)).build())) )); // Mutiny infinispan.mutiny().caches() .get("mycache").map(c -> c.query("age > :age").param("age", 80).skip(5).limit(10).find()) .subscribe().with(System.out::println); }
Server
-
RESP endpoint: a Redis-compatible endpoint connector (implementing the RESP 3 protocol) with support for a subset of commands:
set
,get
,del
,mget
,mset
,incr
,decr
,publish
,subscribe
,auth
,ping
. The connector integrates with our security and protocol auto-detections, so that it is easily usable from our single-port endpoint. The implemented commands should be enough for typical caching usage. If you would like to see more, reach out via our community. -
If you need to use FIPS, it’s now possible to use PKCS#11 keystores
-
Masked and external credentials, to avoid the use of secrets in your configuration files
-
Custom security providers, such as BouncyCastle, can now be used. Just drop your provider implementation in the
server/lib
and configure:<ssl> <keystore path="server.bcfks" password="secret" alias="server" provider="BC" type="BCFKS"/> </ssl>
-
Improved TLS engine configuration, allowing fine-grained ciphersuites selection for both TLSv1.3 and TLSv1.2:
<engine enabled-protocols="TLSv1.3 TLSv1.2" enabled-ciphersuites="TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384" enabled-ciphersuites-tls13="TLS_AES_256_GCM_SHA384"/>
-
Endpoint worker threads configuration has been removed. With the rewrite in Infinispan 13 to utilize non blocking threads, this configuration was unused and deprecated.
-
JMX integration with our security realms for authentication and authorization.
-
Experimental IO_Uring support
-
REST endpoints expose distribution information for caches and clusters. For more information, see ISPN-12192 and ISPN-12193.
Console
-
Cache creation wizard. See our recent blog post about it
CLI
-
List cache entries, including metadata, using different formats (table, JSON, CSV)
-
Configuration converter
-
Schema command to upload, delete, modify protobuf schema
-
Index command to manage indexes
-
Client certificate authentication
Image
-
Now based upon ubi8/openjdk-17-runtime
-
Images provided for both amd64 and arm64 architectures
-
SERVER_LIBS
environment variable added to allow dependencies to be downloaded prior to server startup -
The
config-generator
has been removed. Its functionality can be replaced by using configuration overlays
Operator
-
Multi-Operand support, which means a single operator can managed different versions of Infinispan
-
FIPS support
-
Custom user configuration refactored to allow greater control of Infinispan configuration
-
Image based upon ubi9/ubi-micro
-
Bundle provided for both amd64 and arm64 architectures
-
Admin service is now headless
Hibernate ORM second-level cache
Hibernate caching implementation supporting Hibernate 6. Note that Hibernate 5 caching support is no longer provided due to Jakarta EE migration.
Observability
-
Integration with OpenTelemetry tracing (see https://infinispan.org/blog/2022/07/18/infinispan-14-opentelemetry-tracing)
-
Client / server request tracing correlations on both Hot Rod and REST APIs (see https://infinispan.org/blog/2022/07/18/infinispan-14-opentelemetry-tracing)
-
Integration with Micrometer to produce Prometheus and OpenMetrics metrics
Other
Infinispan Quarkus server now supports the same command line arguments as the normal JVM Infinispan server. In addition the Infinispan Quarkus native binary can be used in an existing unzipped Infinispan Server zip file for ease of use.
Documentation
Many improvements, updates and fixes.
Release notes
You can look at the release notes to see what has changed since our latest CR.
Get them from our download page.
Get it, Use it, Ask us!
We’re hard at work on new features, improvements and fixes, so watch this space for more announcements!Please, download and test the latest release.
The source code is hosted on GitHub. If you need to report a bug or request a new feature, look for a similar one on our JIRA issues tracker. If you don’t find any, create a new issue.
If you have questions, are experiencing a bug or want advice on using Infinispan, you can use GitHub discussions. We will do our best to answer you as soon as we can.
The Infinispan community uses Zulip for real-time communications. Join us using either a web-browser or a dedicated application on the Infinispan chat.