Cassini est l’implémentation Jakarta REST 4.0 de l’écosystème Vidocq. Elle s’appuie sur Chappe pour le transport HTTP, sur Vauban pour la résolution CDI, et sur Champollion pour la sérialisation JSON. Elle vise la conformité TCK 100 % sur la cible Core Profile / SE-Bootstrap, sans réflexion ad hoc et sans dépendance externe injustifiée.

Origine du nom

Giovanni Domenico Cassini, francisé en Jean-Dominique Cassini (1625–1712), astronome italo-français, premier directeur de l’Observatoire de Paris (1671). Il fonda la dynastie qui dressa la première carte complète de France par triangulation géodésique — chaque point du royaume rattaché à un réseau hiérarchique de triangles, puis à des chemins, puis à des lieux nommés.

Cassini, l’astronome

Cassini, le runtime

Triangulation géodésique

URI templates @Path("/a/{b}/c")

Mesh hiérarchique royaume → province → ville

Root resource → sub-resource locator → method

Méridien de référence

UriInfo.getBaseUri()

Point unique par 3 angles

Best-match : méthode unique par (path, verb, media-type)

L’arborescence des ressources REST est une carte. Cassini est le runtime qui la dresse et y route chaque requête — sur les lignes de signalisation tracées par le télégraphe optique de Chappe.

En un coup d’œil

Spec implémentée

https://jakarta.ee/specifications/restful-ws/4.0/

Repo

https://codeberg.org/Vidocq/cassini

Java

25 (LTS)

Modules JPMS

io.vidocq.cassini.api, io.vidocq.cassini.core, io.vidocq.cassini.client, io.vidocq.cassini.chappe, io.vidocq.cassini.jdkhttp, io.vidocq.cassini.cdi.vauban (+ build-time : io.vidocq.cassini.processor, cassini-maven-plugin)

Dépendances runtime

Specs Jakarta uniquement (jakarta.ws.rs, jakarta.json.bind). Transport via Chappe ou JDK com.sun.net.httpserver. CDI optionnel via Vauban.

TCK

✅ 2535 / 2535 applicables (100 %) — détails ici.

Positionnement dans l’écosystème

flowchart LR
  Client[Client HTTP] -->|HTTP/1.1, H2, H3| Chappe[Chappe<br/>transport]
  Chappe -->|CassiniHttpExchange| Cassini[Cassini<br/>routeur JAX-RS]
  Cassini -->|@Inject| Vauban[Vauban<br/>CDI Lite]
  Cassini -->|JSON-B| Champollion[Champollion<br/>JSON-P / JSON-B]
  Cassini -->|dispatch| Resource[@Path UserResource]
  Resource --> Cassini
  Cassini -->|response| Chappe
  Chappe --> Client

Cassini partage Chappe avec Foy (Servlet 6.1) : un même process peut exposer une application JAX-RS et un déploiement Servlet sur le même listener.

Ressources rapides

Bugs et benchmarks consolidés : lien:https://codeberg.org/Vidocq/cassini/src/branch/main/BUG.md[BUG.md], lien:https://codeberg.org/Vidocq/cassini/src/branch/main/BENCH.md[BENCH.md].