Sto imparando JPA e ho una domanda:Quando abbiamo bisogno di più di un EntityManager?
In quali situazioni abbiamo bisogno di più di uno EntityManager
nella nostra applicazione?
Le due situazioni che sono a conoscenza sono i seguenti:
Quando la nostra applicazione è un'applicazione multi-threaded e più di un thread ha bisogno di un'operazione APP perché
EntityManager
non è thread-safe e abbiamo bisogno unoEntityManager
per thread.Quando qualsiasi del filo deve più transazioni simultanee, dobbiamo più
EntityManager
in quel filo perché c'è uno-a-uno traEntityManager
eEntityTransaction
.
Q1. Ci sono altre situazioni in cui abbiamo bisogno di più di uno EntityManager
?
Q2. A mio avviso, dovrebbe esserci solo uno EntityManagerFactory
per Persitence Unit. Ho ragione? In caso contrario, quali sono quelle situazioni in cui è necessario più EntityManagerFactory
per unità di persistenza?
Per Q1: Immagino che un oggetto _Entity Manager_ debba avere un sovraccarico minimo, ma sono ancora prurito di chiedere quanto overhead :) Wow, i thread diff che dipendono l'uno dall'altro è più complesso. Quindi è sicuro dire che dovresti avere 1 EM per discussione? Quindi assicurati di rilevare eventuali eccezioni poiché hai più thread che utilizzano la stessa tabella, giusto? – thirdy
Sì, poiché EM non è thread-safe, può essere utilizzato su più thread se creo un wrapper e includo metodi di salvataggio/aggiornamento 'sincronizzati' nel wrapper che chiamano internamente save/update di EM. Inoltre non cancello/chiudo mai EM? Penso che ci possano ancora essere problemi per la lettura e la scrittura simultanee. Potrebbe farmi sapere i vostri commenti su questo? – bluelurker