revision=a24ece9cf797f7ea647e33bf846b115208ed1ba5 === public activation-capable constructors === --- dev.caskeleton.adapter.outbound.persistence.experimental.database.TenantDataSourceRegistry public dev.caskeleton.adapter.outbound.persistence.experimental.database.TenantDataSourceRegistry(java.util.function.Function, java.util.function.ToIntFunction, dev.caskeleton.adapter.outbound.persistence.experimental.database.TenantPoolBudget); public synchronized javax.sql.DataSource require(dev.caskeleton.adapter.outbound.persistence.experimental.tenant.TenantId); public synchronized void openTenants(int); public synchronized void evict(dev.caskeleton.adapter.outbound.persistence.experimental.tenant.TenantId); public synchronized int openPools(); public synchronized int allocatedConnections(); public synchronized java.util.Set openTenantIds(); public synchronized void close(); --- dev.caskeleton.adapter.outbound.persistence.experimental.database.TenantEntityManagerFactoryRegistry public dev.caskeleton.adapter.outbound.persistence.experimental.database.TenantEntityManagerFactoryRegistry(java.util.function.Function, dev.caskeleton.adapter.outbound.persistence.experimental.database.TenantDataSourceRegistry); public synchronized jakarta.persistence.EntityManagerFactory require(dev.caskeleton.adapter.outbound.persistence.experimental.tenant.TenantId); public synchronized void evict(dev.caskeleton.adapter.outbound.persistence.experimental.tenant.TenantId); public synchronized java.util.Set openTenants(); public synchronized void close(); --- dev.caskeleton.adapter.outbound.persistence.experimental.schema.SchemaMultiTenantConnectionProvider public dev.caskeleton.adapter.outbound.persistence.experimental.schema.SchemaMultiTenantConnectionProvider(javax.sql.DataSource, dev.caskeleton.adapter.outbound.persistence.experimental.schema.SchemaTenantRegistry); public java.sql.Connection getConnection(dev.caskeleton.adapter.outbound.persistence.experimental.tenant.TenantId) throws java.sql.SQLException; public void releaseConnection(java.sql.Connection) throws java.sql.SQLException; --- dev.caskeleton.adapter.outbound.persistence.experimental.tenant.TenantEntityListenerGuard public dev.caskeleton.adapter.outbound.persistence.experimental.tenant.TenantEntityListenerGuard(java.util.function.Function, java.util.function.BiConsumer); public void stampOnInsert(T); public void verifyOnUpdate(T); === consent test ENTRY_POINTS === /** The behaviour-bearing entry points; the surrounding value types are not activations. */ private static final List> ENTRY_POINTS = List.of( ConsistencyAwareDataSourceRouter.class, RlsTenantSessionBinder.class, SchemaTenantMigrationOrchestrator.class); === production references outside experimental package === --- TenantDataSourceRegistry --- TenantEntityManagerFactoryRegistry --- SchemaMultiTenantConnectionProvider --- TenantEntityListenerGuard === feature properties production config readers === src/adapter/outbound/persistence-jpa/src/main/java/dev/caskeleton/adapter/outbound/persistence/experimental/ExperimentalFeature.java:14: MULTITENANCY_COLUMN("backend.jpa.experimental.multitenancy-column"), src/adapter/outbound/persistence-jpa/src/main/java/dev/caskeleton/adapter/outbound/persistence/experimental/ExperimentalFeature.java:17: MULTITENANCY_RLS("backend.jpa.experimental.multitenancy-rls"), src/adapter/outbound/persistence-jpa/src/main/java/dev/caskeleton/adapter/outbound/persistence/experimental/ExperimentalFeature.java:20: MULTITENANCY_SCHEMA("backend.jpa.experimental.multitenancy-schema"), src/adapter/outbound/persistence-jpa/src/main/java/dev/caskeleton/adapter/outbound/persistence/experimental/ExperimentalFeature.java:23: MULTITENANCY_DATABASE("backend.jpa.experimental.multitenancy-database"), src/adapter/outbound/persistence-jpa/src/main/java/dev/caskeleton/adapter/outbound/persistence/experimental/ExperimentalFeature.java:26: READ_REPLICA("backend.jpa.experimental.read-replica"), src/adapter/outbound/persistence-jpa/src/main/java/dev/caskeleton/adapter/outbound/persistence/experimental/ExperimentalFeature.java:29: JAKARTA_PERSISTENCE_4("backend.jpa.experimental.jakarta-persistence-4"), src/adapter/outbound/persistence-jpa/src/main/java/dev/caskeleton/adapter/outbound/persistence/experimental/ExperimentalFeature.java:32: HIBERNATE_8("backend.jpa.experimental.hibernate-8"), src/adapter/outbound/persistence-jpa/src/main/java/dev/caskeleton/adapter/outbound/persistence/experimental/ExperimentalFeature.java:35: POSTGRESQL_19("backend.jpa.experimental.postgresql-19"); src/adapter/outbound/persistence-jpa/src/main/java/dev/caskeleton/adapter/outbound/persistence/api/capability/SupportLevel.java:17: /** Behind a {@code backend.jpa.experimental.*} flag; never part of the Stable composition. */