Référence factuelle : artefacts Maven publiés, modules JPMS exportés, annotations Jakarta REST 4.0 supportées, propriétés de configuration.

Artefacts Maven

Artefact Rôle

io.vidocq.cassini:cassini-api:0.1.0-SNAPSHOT

SPI publique : HTTP/transport (CassiniHttpExchange, CassiniHttpAdapter, CassiniStack), BeanProvider, ResourceFactory, et la SPI de codegen (ResourceAdapter, RouteProvider, RouteDescriptor, InjectionSupport).

io.vidocq.cassini:cassini-core:0.1.0-SNAPSHOT

Moteur JAX-RS (Invoker, ResourceScanner, RouteRegistry, MessageBodyRegistry, filtres, providers, SSE, multipart) + les générateurs d’adapters (RuntimeAdapterGenerator, AdapterRegistry).

io.vidocq.cassini:cassini-client:0.1.0-SNAPSHOT

Client JAX-RS 4.0 — ClientBuilder zéro-dépendance sur java.net.http + virtual threads. Réutilise MessageBodyRegistry de cassini-core.

io.vidocq.cassini:cassini-cdi-vauban:0.1.0-SNAPSHOT

Adapter BeanProvider qui résout les ressources via Vauban (BCE CassiniScopeExtension incluse).

io.vidocq.cassini:cassini-chappe:0.1.0-SNAPSHOT

Transport de référence — branche Cassini sur Chappe (HTTP/1.1, H2, virtual threads). Utilisé pour le TCK.

io.vidocq.cassini:cassini-jdk-http:0.1.0-SNAPSHOT

Transport JDK pur — com.sun.net.httpserver.HttpServer, zéro dépendance externe.

io.vidocq.cassini:cassini-processor:0.1.0-SNAPSHOT

Processeur d’annotations APT — génère les sources CassiniAdapter+` / `+CassiniRoutes à la compilation. AOT-safe.

io.vidocq.cassini:cassini-maven-plugin:0.1.0-SNAPSHOT

Plugin Maven (goal generate, lié à process-classes) — pré-génère les adapters pour les archives de dépendances externes.

io.vidocq.cassini:cassini-examples-*

Exemples : cassini-examples-chappe (SE-Bootstrap standard), cassini-examples-jdkhttp (CassiniStack direct), cassini-examples-vauban (CDI + SE-Bootstrap).

cassini-tck n’est pas publié et est hors-reactor (POM modelVersion 4.0.0 standalone). Voir TCK — runner hors-reactor.

Modules JPMS

Module Exports / Provides

io.vidocq.cassini.api

exports io.vidocq.cassini.spi.http;
exports io.vidocq.cassini.spi.resource;
exports io.vidocq.cassini.spi.bean;
exports io.vidocq.cassini.spi.gen;
uses io.vidocq.cassini.spi.http.CassiniStack.BuilderFactory;
uses io.vidocq.cassini.spi.bean.BeanProvider.Factory;

io.vidocq.cassini.core

Aucun export public. internal.* est qualifié-exporté / ouvert uniquement à cassini.tck, cassini.client, cassini.maven.plugin, cassini.chappe, cassini.jdkhttp.

provides io.vidocq.cassini.spi.http.CassiniStack.BuilderFactory
    with io.vidocq.cassini.internal.CassiniStackBuilderFactory;

io.vidocq.cassini.chappe

exports io.vidocq.cassini.chappe;
provides jakarta.ws.rs.ext.RuntimeDelegate
    with io.vidocq.cassini.chappe.ChappeRuntimeDelegate;

io.vidocq.cassini.jdkhttp

exports io.vidocq.cassini.jdkhttp;
provides jakarta.ws.rs.ext.RuntimeDelegate
    with io.vidocq.cassini.jdkhttp.JdkHttpRuntimeDelegate;

io.vidocq.cassini.cdi.vauban

exports io.vidocq.cassini.cdi.vauban;
provides io.vidocq.cassini.spi.bean.BeanProvider.Factory
    with ...VaubanBeanProviderFactory;
provides ...build.compatible.spi.BuildCompatibleExtension
    with ...CassiniScopeExtension;

io.vidocq.cassini.client

requires io.vidocq.cassini.core, java.net.http;
provides jakarta.ws.rs.client.ClientBuilder
    with ...CassiniClientBuilder;
provides jakarta.ws.rs.ext.RuntimeDelegate
    with ...CassiniClientRuntimeDelegate;
uses jakarta.ws.rs.core.Feature;

io.vidocq.cassini.processor

exports io.vidocq.cassini.processor;
provides javax.annotation.processing.Processor
    with ...CassiniResourceProcessor;
cassini-core n’expose pas son CassiniRuntimeDelegate via ServiceLoader — c’est volontaire pour éviter une collision avec le RuntimeDelegate du transport actif (cassini-chappe ou cassini-jdk-http).

Annotations supportées

@Path, @GET, @POST, @PUT, @DELETE, @PATCH, @HEAD, @OPTIONS, @HttpMethod, @ApplicationPath, @Produces, @Consumes, @PathParam, @QueryParam, @HeaderParam, @CookieParam, @FormParam, @MatrixParam, @BeanParam, @DefaultValue, @Encoded, @Provider, @Priority, @NameBinding, @PreMatching, @Context, @Suspended (async — voir TCK pour l’état M2h).

CDI (avec cassini-cdi-vauban) : @ApplicationScoped, @RequestScoped, @Singleton, @Inject.

Interfaces JAX-RS implémentées

Application, SeBootstrap, Configuration, Configurable, UriInfo, Request, HttpHeaders, SecurityContext, Providers, MessageBodyReader, MessageBodyWriter, ContextResolver, ExceptionMapper, ContainerRequestFilter, ContainerResponseFilter, ReaderInterceptor, WriterInterceptor, DynamicFeature, Feature, Sse, SseEventSink, SseBroadcaster, AsyncResponse, CompletionCallback, ConnectionCallback, EntityPart, EntityPart.Builder (multipart §3.5.4).

Côté client (cassini-client) : Client, ClientBuilder, WebTarget, Invocation, Invocation.Builder, AsyncInvoker, ClientRequestContext, ClientResponseContext, ClientRequestFilter, ClientResponseFilter.

Configuration

Cassini se configure via SeBootstrap.Configuration (standard) ou via le builder CassiniStack.builder() (avancé) :

Propriété

Défaut

Description

host

0.0.0.0

Interface d’écoute du transport.

port

0 (auto)

Port HTTP. 0 = aléatoire libre.

rootPath

/

Préfixe de montage de l'`Application`.

protocol

HTTP

HTTP ou HTTPS (selon support transport).

Quand Cassini est piloté par Vidocq Runtime (extension vidocq-rest-cassini), deux propriétés MicroProfile Config supplémentaires :

Propriété

Défaut

Description

vidocq.rest.context-path

/

Préfixe de montage JAX-RS dans le serveur Vidocq.

vidocq.rest.listener

default

Listener Chappe cible.

Bugs et benchmarks

  • lien:https://codeberg.org/Vidocq/cassini/src/branch/main/BUG.md[BUG.md] — issues reproductibles.

  • lien:https://codeberg.org/Vidocq/cassini/src/branch/main/BENCH.md[BENCH.md] — JMH/wrk vs RESTEasy / Jersey / Helidon.