Référence exhaustive Mansart. Pour la prise en main, voir Démarrage rapide. Pour les patterns courants, voir Cas d’usage.

Artefacts Maven

Artefact Rôle

io.vidocq.mansart:mansart-data-api

Annotations (@Entity, @Repository, @Find, @Query, @Insert, @Update, @Delete, @Save) — re-exposition jakarta.data + spécifiques Mansart (@Dialect, @JdbcRepository, @MansartDataSource).

io.vidocq.mansart:mansart-data-core

Runtime : RepositoryRuntime, exécution QueryPlan, mapping ResultSet.

io.vidocq.mansart:mansart-data-processor

APT — métamodèle statique + génération *RepositoryImpl. À déclarer dans <annotationProcessorPaths>.

io.vidocq.mansart:mansart-data-dialect-spi

SPI dialecte (Dialect, DialectFactory, AST de requête neutre).

io.vidocq.mansart:mansart-data-dialect-h2

Dialecte H2 (référence tests + embarqué).

io.vidocq.mansart:mansart-data-dialect-postgresql

Dialecte PostgreSQL (cible production).

io.vidocq.mansart:mansart-data-cdi

Bootstrap CDI 4.1 — BCE Vauban-compatible qui découvre les @Repository via META-INF/mansart-repositories.list.

io.vidocq.mansart:mansart-pool-api

API publique pool : PoolConfig, PoolMetrics, PoolException, ValidationMode.

io.vidocq.mansart:mansart-pool-core

Implémentation MansartDataSource.

io.vidocq.mansart:mansart-transactions

MansartTransactionManager, UserTransaction, intercepteur @Transactional, scope @TransactionScoped, BCE Vauban.

io.vidocq.mansart:mansart-persistence (M7 en attente)

Implémentation Jakarta Persistence 3.2.

Modules JPMS

Module Exports

io.vidocq.mansart.data

io.vidocq.mansart.data (annotations + MansartData factory), io.vidocq.mansart.data.runtime (SPI), io.vidocq.mansart.data.dialect.spi.

io.vidocq.mansart.pool

io.vidocq.mansart.pool (MansartDataSource, PoolConfig, PoolMetrics).

io.vidocq.mansart.transactions

io.vidocq.mansart.transactions (MansartTransactionManager, UserTransaction providers).

io.vidocq.mansart.persistence (M7 en attente)

TBD.

Tous les modules sont JPMS strict — exports minimaux, pas d'`opens` non justifié, pas de classpath.

Annotations entité

Mansart (zéro-dep) Équivalent JPA reconnu

@io.vidocq.mansart.data.Entity

@jakarta.persistence.Entity

@Id

@Id

@GeneratedValue(strategy)

@GeneratedValue(strategy)IDENTITY, SEQUENCE, UUID, AUTO

@Column(name, nullable, unique, length)

@Column(…​)

@Table(name, schema)

@Table(…​)

@Version

@Version — optimistic locking

@Enumerated(STRING|ORDINAL)

@Enumerated(…​)

@Embedded / @Embeddable

idem

@ManyToOne(fetch) / @OneToOne(fetch)

idem (relations propriétaires uniquement en v1)

@JoinColumn(name)

@JoinColumn(…​)

@Transient

@Transient

Règle APT : si @jakarta.persistence.Entity présent → annotations JPA. Sinon, @io.vidocq.mansart.data.Entity → annotations Mansart. Les deux ensemble → erreur de compilation explicite.

Hors scope v1 : @OneToMany, @ManyToMany, @MappedSuperclass, @Inheritance, @Convert/AttributeConverter. Reportés à mansart-persistence (M7).

Annotations repository

Annotation Usage

@jakarta.data.repository.Repository

Sur l’interface — déclenche la génération APT.

@Find

Méthode finder par paramètres typés (paramètre Java = attribut entité).

@Query("…​")

JDQL — SELECT/UPDATE/DELETE avec paramètres nommés (:name).

@Insert, @Update, @Delete, @Save

Lifecycle annotations — paramètre = entité, collection ou varargs ; retour void/T/Iterable<T>/int/long/boolean.

@OrderBy("attribute")

Ordre statique d’un finder.

@io.vidocq.mansart.data.MansartDataSource("name")

Surcharge la DataSource injectée dans le repository (par défaut @Inject DataSource).

Annotations transactions

Annotation Usage

@jakarta.transaction.Transactional(TxType)

Intercepteur CDI. TxType : REQUIRED (défaut), REQUIRES_NEW, MANDATORY, SUPPORTS, NEVER, NOT_SUPPORTED.

@jakarta.transaction.TransactionScoped

Scope CDI dont la durée de vie épouse la transaction.

Configuration PoolConfig

Propriété Type Description

jdbcUrl

String

URL JDBC complète.

username

String

Login DB.

password

String

Mot de passe.

minSize

int

Connexions minimales pré-warmées (défaut 0).

maxSize

int

Borne dure du pool (défaut 10).

acquireTimeout

Duration

Timeout sur getConnection() (défaut 30 s).

idleTimeout

Duration

Eviction d’une connexion idle (défaut 10 min).

maxLifetime

Duration

Eviction d’une connexion vieille (défaut 30 min).

validationMode

ValidationMode

IS_VALID, QUERY, NONE.

validationQuery

String

SQL si validationMode=QUERY.

leakDetectionThreshold

Duration

Stack-trace de fuite si une connexion reste empruntée plus longtemps.

connectionInitSql

List<String>

SQL exécuté au premier acquire (SET TIMEZONE, etc.).

Dialectes pluggables

Dialecte Statut Notes

H2

✅ Livré

Référence tests + embarqué. MERGE INTO pour upsert, LIMIT/OFFSET pour pagination.

PostgreSQL

⏳ M4

Cible production. ON CONFLICT, RETURNING, types UUID / JSONB.

MariaDB / MySQL

❌ Backlog

SQL Server

❌ Backlog

Oracle

❌ Backlog

SQLite

❌ Backlog

Découverte par ServiceLoader (provides DialectFactory with H2DialectFactory).

Compatibilité

Voir aussi

  • lien:https://codeberg.org/Vidocq/mansart/src/branch/main/PLAN.md[Mansart PLAN.md] — vision et ordre de travail global.

  • lien:https://codeberg.org/Vidocq/mansart/src/branch/main/mansart-jakarta-data/PLAN.md[mansart-jakarta-data PLAN.md] — plan détaillé du module Data.

  • lien:https://codeberg.org/Vidocq/mansart/src/branch/main/mansart-pool/PLAN.md[mansart-pool PLAN.md] — design pool.

  • lien:https://codeberg.org/Vidocq/mansart/src/branch/main/mansart-transactions/PLAN.md[mansart-transactions PLAN.md] — roadmap transactions.