对于使用现代 JDK 技术栈的嵌入式 Jena 应用,在构建查询执行或启动工作线程之前,先建立一个共同的回退方案:

import java.net.InetSocketAddress;
import java.net.ProxySelector;
import org.apache.jena.http.HttpEnv;

var http = HttpEnv.httpClientBuilder()
    .proxy(ProxySelector.of(
        new InetSocketAddress("proxy.example.net", 8080)))
    .build();

HttpEnv.setDftHttpClient(http);

Jena 的构建器在添加选择器的同时保留其传输默认设置。对于使用获准的公共 SPARQL 端点且没有代理账户的嵌入式工作负载,HTTP 代理列表可以提供选择器所需的 HTTP 地址。这仍然是整个 JVM 共享的默认值,而不是按请求切换的开关。

操作客户端选择顺序
普通 HTTP 查询构建器显式客户端、基于 URL 的注册表匹配、HttpEnv 默认值
内置联合 SERVICE匹配的注册表客户端、查询上下文客户端、全局默认值

因此,本地或注册表覆盖可以使用另一条路由。HTTP 构建器在调用 build 时确定其客户端,并把该对象传入执行;之后再替换默认值不会重写已经构建的执行。

保持启动时的回退方案稳定。路由不同时,使用相应的本地/上下文/注册表接口。

独立的 Fuseki 服务器也需要其部署版本所支持的初始化运行方式。把这段 Java 代码放进文件并不会让该服务器执行它。

相关文章