Ich lerne JPA und habe eine Frage:Wann brauchen wir mehr als einen EntityManager?
In welchen Situationen brauchen wir mehr als eine EntityManager
in unserer Anwendung?
Die beiden Situationen, die ich kenne, sind wie folgt:
Wenn unsere Anwendung ist ein Multi-Threaded-Anwendung und mehr als ein Thread benötigt JPA Transaktion weil
EntityManager
ist nicht Thread-sicher und wir brauchen einEntityManager
pro Thread.Wenn eine der Thread mehrere gleichzeitige Transaktionen benötigt, brauchen wir mehr als eine
EntityManager
in diesem Thread, weil es eine Eins-zu-Eins-Beziehung zwischenEntityManager
undEntityTransaction
ist.
Q1. Gibt es noch andere Situationen, in denen wir mehr als eine EntityManager
benötigen?
Q2. Bis zu meinem Verständnis sollte es nur eine EntityManagerFactory
pro Persistenzeinheit geben. Hab ich recht? Wenn nicht, was sind dann die Situationen, in denen wir mehrere EntityManagerFactory
pro Persistenzeinheit benötigen?
Für Q1: Ich denke ein _Entity Manager_ Objekt sollte minimale Overhead haben, aber ich jucke immer noch fragen, wie viel Aufwand :) Wow, diese Diff-Threads, die voneinander abhängen, ist komplexer. Also ist es sicher zu sagen, dass Sie 1 EM pro Thread haben sollten? Dann stellen Sie sicher, dass Sie irgendwelche Ausnahmen abfangen, da Sie mehrere Threads mit der gleichen Tabelle haben, richtig? – thirdy
Ja, da EM nicht threadsicher ist, kann es über mehrere Threads hinweg verwendet werden, wenn ich einen Wrapper darum erstelle und 'synchronisierte' Speicher-/Aktualisierungsmethoden in den Wrapper einschließe, die intern das Speichern/Aktualisieren von EM aufrufen. Ich lösche auch niemals die EM? Ich denke, es kann immer noch Probleme beim gleichzeitigen Lesen und Schreiben geben. Könnten Sie mir bitte Ihre diesbezüglichen Kommentare mitteilen? – bluelurker