Sto scrivendo un'app Web che supporta più utenti. Ogni utente ha il proprio database - usando H2. tutti gli schemi di database sono gli stessi.Origini dati multiutente: Spring + Hibernate
Desidero utilizzare Spring + Hibernate per questa applicazione.
Così mi sono bloccato a come associare database di un utente con l'utente - forse associato nel HTTPSession, ed estendere AbstractRoutingDataSource di primavera? ma non avrebbe questo effetto la cache di Hibernate? Un altro modo è avere una SessionFactory con ogni origine dati, anche se lo schema di ogni datasource è lo stesso ... quindi lo considero uno spreco.
In ogni caso, la selezione dell'origine dati deve essere dinamica, non possono essere preconfigurati in file di contesto, poiché ogni nuovo utente avrà il proprio database creato. Esistono strutture/soluzioni esistenti?
Non so troppo su Hibernate Shards, forse funziona?
Ciao Pascal, Grazie per la risposta. Tutti i database hanno lo stesso schema, quindi una SessionFactory per tutti questi database andrebbe bene. Hibernate ha una cache di secondo livello, che potrebbe contenere dati memorizzati nella cache non validi se carico 2 entità uniche da 2 database diversi ma con gli stessi ID. Penso di riuscire a far funzionare tutto associando il DataSource a una HttpSession e utilizzando un Interceptor per collegare il DataSource nella HttpSession a ThreadLocal in modo che il mio impl AbstractDataSource possa ottenere il DS corretto per la transazione. – Dzhu
+1 per l'articolo di Ken DeLong - mi ha risparmiato qualche mal di testa :-) – opyate