Skip to content

Commit 49ce245

Browse files
committed
update news item
1 parent 7d2001e commit 49ce245

1 file changed

Lines changed: 114 additions & 3 deletions

File tree

site/content/news/rdf4j-600-M1.md

Lines changed: 114 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,127 @@ categories: ["news"]
66
---
77
Milestone number 1 of the upcoming 6.0.0 release of RDF4J is now available for download.
88

9-
RDF4J 6.0.0 is a major release focusing on dependency upgrades, lmdb improvements and http client improvements.
9+
RDF4J 6.0.0 is a major release of the RDF4J framework, focusing on dependency upgrades, LMDB
10+
improvements, and HTTP client improvements.
1011

1112
Please note that RDF4J 6.0.0-M1 requires Java 25.
1213

14+
Some of the highlights covered in this first milestone:
15+
16+
- Upgrade to Java 25 as the minimally-required version of Java
17+
- Introduction of a pluggable HTTP client SPI with Apache HttpComponents 5 and JDK built-in backends
18+
- Migration from Apache HttpComponents 4 to the new HTTP client facade
19+
1320
This milestone build is not yet feature-complete, but we are putting it out to receive early feedback on all the improvements we have put in.
1421

1522
<!--more-->
1623

17-
- [issues fixed in 6.0.0 Milestone 1](https://github.com/eclipse/rdf4j/issues?q=is%3Aissue+label%3AM1+is%3Aclosed+milestone%3A6.0.0)
18-
- [issues planned for 6.0.0](https://github.com/eclipse/rdf4j/milestone/128)
24+
- [issues fixed in 6.0.0 Milestone 1](https://github.com/eclipse-rdf4j/rdf4j/issues?q=is%3Aissue+label%3AM1+is%3Aclosed+milestone%3A6.0.0)
25+
- [issues planned for 6.0.0](https://github.com/eclipse-rdf4j/rdf4j/milestone/128)
26+
27+
## Upgrade notes
28+
29+
RDF4J 6.0.0 contains several [backward incompatible changes](https://github.com/eclipse-rdf4j/rdf4j/issues?q=is%3Aclosed+is%3Aissue+label%3A%22%E2%9B%94+Not+backwards+compatible%22+milestone%3A6.0.0).
30+
31+
### HTTP client migration
32+
33+
RDF4J previously used Apache HttpComponents 4 as its sole HTTP client, with Apache HttpComponents 4 types
34+
directly exposed in the public API. In 6.0.0, this dependency has been replaced by a new
35+
HTTP-client-agnostic facade. Apache HttpComponents 4 is no longer exposed through the `rdf4j-http-client`
36+
public API or required as a transitive dependency of `rdf4j-http-client` for standard use.
37+
38+
For most users, no dependency changes are required. The `rdf4j-http-client` artifact continues to bundle both
39+
built-in backend implementations as runtime dependencies, so upgrading the RDF4J version is sufficient for
40+
standard use cases.
41+
42+
Two HTTP client backends are now available:
43+
44+
- Apache HttpComponents 5 (`rdf4j-http-client-apache5`) - the default backend when on the classpath.
45+
- JDK built-in HTTP client (`rdf4j-http-client-jdk`) - a zero-dependency alternative using the JDK
46+
`java.net.http.HttpClient` API.
47+
48+
To select a specific backend, set the `rdf4j.http.client.factory` system property to either `apache5` or
49+
`jdk`:
50+
51+
```bash
52+
-Drdf4j.http.client.factory=jdk
53+
```
54+
55+
If you previously configured connection pooling or timeouts via system properties on
56+
`SharedHttpClientSessionManager`, those properties are still supported:
57+
58+
- `org.eclipse.rdf4j.client.http.maxConnPerRoute` (default: 25)
59+
- `org.eclipse.rdf4j.client.http.maxConnTotal` (default: 50)
60+
- `org.eclipse.rdf4j.client.http.connectionTimeout` (default: 30 000 ms)
61+
- `org.eclipse.rdf4j.client.http.connectionRequestTimeout`
62+
63+
For a minimal-footprint deployment without Apache HttpComponents 5, exclude `rdf4j-http-client-apache5` and
64+
ensure `rdf4j-http-client-jdk` is on the classpath.
65+
66+
### Developer-facing changes
67+
68+
The following public API methods previously exposed `org.apache.http.client.HttpClient` from Apache
69+
HttpComponents 4 and have been replaced ([GH-5723](https://github.com/eclipse-rdf4j/rdf4j/issues/5723)):
70+
71+
| Old method | Replacement |
72+
| --- | --- |
73+
| `HttpClientDependent#getHttpClient()` returns `org.apache.http.client.HttpClient` | Returns `org.eclipse.rdf4j.http.client.spi.RDF4JHttpClient` |
74+
| `HttpClientDependent#setHttpClient(HttpClient)` | Accepts `org.eclipse.rdf4j.http.client.spi.RDF4JHttpClient` |
75+
| `HttpClientSessionManager#getHttpClient()` returns `org.apache.http.client.HttpClient` | Returns `org.eclipse.rdf4j.http.client.spi.RDF4JHttpClient` |
76+
77+
If your code calls `setHttpClient()` with a custom Apache HttpComponents 4 client, you must migrate to the
78+
new API.
79+
80+
The new `rdf4j-http-client-api` module defines the HTTP client facade with no third-party HTTP dependencies.
81+
The key types are:
82+
83+
- `RDF4JHttpClientFactory` - SPI interface discovered via `java.util.ServiceLoader`; implement this to plug in
84+
a custom HTTP backend.
85+
- `RDF4JHttpClient` - the HTTP client interface used internally by `SPARQLProtocolSession` and
86+
`RDF4JProtocolSession`.
87+
- `RDF4JHttpClientConfig` - immutable configuration object for timeouts, connection pooling, SSL, and default
88+
headers.
89+
- `RDF4JHttpClients` - utility class for obtaining the default factory or creating clients.
90+
91+
Use `RDF4JHttpClientConfig` and `RDF4JHttpClients` to create a configured client and pass it to a repository
92+
or session:
93+
94+
```java
95+
RDF4JHttpClientConfig config = RDF4JHttpClientConfig.newBuilder()
96+
.connectTimeoutMs(5_000)
97+
.socketTimeoutMs(30_000)
98+
.maxConnectionsPerRoute(10)
99+
.build();
100+
101+
RDF4JHttpClient client = RDF4JHttpClients.newDefaultClient(config);
102+
103+
HTTPRepository repo = new HTTPRepository("http://localhost:8080/rdf4j-server/repositories/myrepo");
104+
repo.setHttpClient(client);
105+
```
106+
107+
The previous `HttpClientBuilders.getSSLTrustAllHttpClientBuilder()` helper, which returned an Apache
108+
HttpComponents 4 builder, has been replaced by `HttpClientBuilders.getSslTrustAllConfig()`:
109+
110+
```java
111+
RDF4JHttpClientConfig config = HttpClientBuilders.getSslTrustAllConfig();
112+
RDF4JHttpClient client = RDF4JHttpClients.newDefaultClient(config);
113+
repo.setHttpClient(client);
114+
```
115+
116+
Authentication is now handled via the `AuthenticationHandler` SPI rather than Apache HttpComponents 4
117+
credential stores. Built-in implementations are provided for basic authentication and bearer tokens:
118+
119+
```java
120+
session.setAuthenticationHandler(new BasicAuthenticationHandler("user", "secret"));
121+
session.setAuthenticationHandler(new BearerTokenAuthenticationHandler("my-token"));
122+
session.setAuthenticationHandler(new BearerTokenAuthenticationHandler(tokenStore::currentToken));
123+
```
124+
125+
To provide a fully custom HTTP backend, implement `RDF4JHttpClientFactory` and register it as a
126+
`java.util.ServiceLoader` service in
127+
`META-INF/services/org.eclipse.rdf4j.http.client.spi.RDF4JHttpClientFactory`. To extend the Apache
128+
HttpComponents 5 backend with additional configuration, subclass `ApacheHC5RDF4JHttpClientFactory` and
129+
override `buildHttpClient(HttpClientBuilder, RDF4JHttpClientConfig)`.
19130

20131
### Links
21132

0 commit comments

Comments
 (0)