Estoy escribiendo una aplicación web que admite varios usuarios. Cada usuario tiene su propia base de datos, utilizando H2. todos los esquemas de base de datos son iguales.Orígenes de datos multiusuario - Spring + Hibernate
Deseo usar Spring + Hibernate para esta aplicación.
Así que estoy atascado en cómo asociar la base de datos de un usuario con ese usuario, tal vez lo asocie en la sesión HTTPSession, y extienda Spring's AbstractRoutingDataSource? pero, ¿no afectaría esto a la memoria caché de Hibernate? Otra forma es tener una SessionFactory con cada fuente de datos, aunque el esquema de cada fuente de datos sea el mismo ... así que lo veo como un desperdicio.
De todos modos, la selección de la fuente de datos debe ser dinámica: no se pueden preconfigurar en archivos de contexto, ya que cada nuevo usuario tendrá su propia base de datos creada. ¿Hay marcos/soluciones existentes?
No sé demasiado sobre Hibernate Shards, ¿quizás funciona?
Hola Pascal, gracias por su respuesta. Todas las bases de datos tienen el mismo esquema, por lo que una SessionFactory para todas estas bases de datos estaría bien. Hibernate tiene un caché de segundo nivel, que puede contener datos caché no válidos si cargo 2 entidades únicas desde 2 bases de datos diferentes pero con los mismos ID. Creo que puedo hacer que esto funcione al asociar el DataSource con una HttpSession y el uso de un Interceptor para conectar el DataSource en la HttpSession a ThreadLocal para que mi impl AbstractDataSource pueda obtener el DS correcto para la transacción. – Dzhu
+1 para el artículo de Ken DeLong - me salvó algunos dolores de cabeza :-) – opyate