Add multitenancy module: Hibernate 7 @TenantId vs schema-per-tenant (shared pool + search_path, pool per tenant), JWT tenant filter, isolation failure modes on PostgreSQL 17 (Hibernate 7.4.14.Final, Spring Boot 4.1.2)
Co-Authored-By: Claude Sonnet 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_017ic4b4VQVEJWetTT1dYzyJ
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
# javap of the shipped hibernate-core-7.4.14.Final.jar
|
||||
|
||||
$ javap -cp hibernate-core-7.4.14.Final.jar org.hibernate.annotations.TenantId
|
||||
Compiled from "TenantId.java"
|
||||
public interface org.hibernate.annotations.TenantId extends java.lang.annotation.Annotation {
|
||||
}
|
||||
|
||||
$ javap -cp hibernate-core-7.4.14.Final.jar org.hibernate.context.spi.CurrentTenantIdentifierResolver
|
||||
Compiled from "CurrentTenantIdentifierResolver.java"
|
||||
public interface org.hibernate.context.spi.CurrentTenantIdentifierResolver<T> {
|
||||
public abstract T resolveCurrentTenantIdentifier();
|
||||
public abstract boolean validateExistingCurrentSessions();
|
||||
public default boolean isRoot(T);
|
||||
}
|
||||
|
||||
$ javap -cp hibernate-core-7.4.14.Final.jar org.hibernate.engine.jdbc.connections.spi.MultiTenantConnectionProvider
|
||||
Compiled from "MultiTenantConnectionProvider.java"
|
||||
public interface org.hibernate.engine.jdbc.connections.spi.MultiTenantConnectionProvider<T> extends org.hibernate.service.Service, org.hibernate.service.spi.Wrapped {
|
||||
public abstract java.sql.Connection getAnyConnection() throws java.sql.SQLException;
|
||||
public abstract void releaseAnyConnection(java.sql.Connection) throws java.sql.SQLException;
|
||||
public abstract java.sql.Connection getConnection(T) throws java.sql.SQLException;
|
||||
public default java.sql.Connection getReadOnlyConnection(T) throws java.sql.SQLException;
|
||||
public abstract void releaseConnection(T, java.sql.Connection) throws java.sql.SQLException;
|
||||
public default void releaseReadOnlyConnection(T, java.sql.Connection) throws java.sql.SQLException;
|
||||
public abstract boolean supportsAggressiveRelease();
|
||||
public default boolean handlesConnectionSchema();
|
||||
public default boolean handlesConnectionReadOnly();
|
||||
public default org.hibernate.engine.jdbc.connections.spi.DatabaseConnectionInfo getDatabaseConnectionInfo(org.hibernate.dialect.Dialect);
|
||||
}
|
||||
|
||||
$ javap -cp hibernate-core-7.4.14.Final.jar org.hibernate.engine.jdbc.connections.spi.AbstractMultiTenantConnectionProvider
|
||||
Compiled from "AbstractMultiTenantConnectionProvider.java"
|
||||
public abstract class org.hibernate.engine.jdbc.connections.spi.AbstractMultiTenantConnectionProvider<T> implements org.hibernate.engine.jdbc.connections.spi.MultiTenantConnectionProvider<T> {
|
||||
public org.hibernate.engine.jdbc.connections.spi.AbstractMultiTenantConnectionProvider();
|
||||
protected abstract org.hibernate.engine.jdbc.connections.spi.ConnectionProvider getAnyConnectionProvider();
|
||||
protected abstract org.hibernate.engine.jdbc.connections.spi.ConnectionProvider selectConnectionProvider(T);
|
||||
public java.sql.Connection getAnyConnection() throws java.sql.SQLException;
|
||||
public void releaseAnyConnection(java.sql.Connection) throws java.sql.SQLException;
|
||||
public java.sql.Connection getConnection(T) throws java.sql.SQLException;
|
||||
public void releaseConnection(T, java.sql.Connection) throws java.sql.SQLException;
|
||||
public boolean supportsAggressiveRelease();
|
||||
public boolean isUnwrappableAs(java.lang.Class<?>);
|
||||
public <X> X unwrap(java.lang.Class<X>);
|
||||
}
|
||||
|
||||
$ javap -cp hibernate-core-7.4.14.Final.jar org.hibernate.cfg.MultiTenancySettings
|
||||
Compiled from "MultiTenancySettings.java"
|
||||
public interface org.hibernate.cfg.MultiTenancySettings {
|
||||
public static final java.lang.String MULTI_TENANT_CONNECTION_PROVIDER;
|
||||
public static final java.lang.String MULTI_TENANT_IDENTIFIER_RESOLVER;
|
||||
public static final java.lang.String TENANT_IDENTIFIER_TO_USE_FOR_ANY_KEY;
|
||||
public static final java.lang.String MULTI_TENANT_SCHEMA_MAPPER;
|
||||
public static final java.lang.String MULTI_TENANT_CREDENTIALS_MAPPER;
|
||||
}
|
||||
|
||||
# javap of spring-boot-hibernate-4.1.2.jar
|
||||
$ javap -cp spring-boot-hibernate-4.1.2.jar org.springframework.boot.hibernate.autoconfigure.HibernatePropertiesCustomizer
|
||||
Compiled from "HibernatePropertiesCustomizer.java"
|
||||
public interface org.springframework.boot.hibernate.autoconfigure.HibernatePropertiesCustomizer {
|
||||
public abstract void customize(java.util.Map<java.lang.String, java.lang.Object>);
|
||||
}
|
||||
|
||||
# does spring-boot-hibernate mention tenants at all? (entries containing 'tenant', case-insensitive)
|
||||
matching files: 0
|
||||
Reference in New Issue
Block a user