Ich arbeite an einer Anwendung, die einige Datenbankoperationen ausführen muss.Wie erstellt man eine threadsichere EntityManagerFactory?
I erzeugt eine statische Variable für EntityManagerFactory und initialisiert es in der Methode, die von der Anwendung
if (emf == null){
emf = Persistence.createEntityManagerFactory("example");
}
try {
em = emf.createEntityManager();
} catch (Exception ex) {
logger.error(ex.getMessage());
}
ist dieser Faden sicher aufgerufen wird? Wenn ich die EntityManagerFactory in einem synchronisierten Block erstelle, wird die Anzahl der wartenden Threads erhöht und die Anwendung stürzt ab.
Ich schaute in der Dokumentation, um zu sehen, ob die Persistence.createEntityManagerFactory threadsicher ist, ohne Erfolg.
Bitte weisen Sie mich auf die richtigen Ressourcen.
Ich habe das schon mal gemacht. Aber einige Leute finden, dass es nicht eine gute Übung ist, in den statischen Blöcken zu initialisieren. Ist das richtig? –
@Vanchinathan Das ist wirklich ein typischer Ansatz, wenn Sie nicht in einer verwalteten Umgebung sind und ich sehe nichts falsch daran. Nun, wenn Sie einige Argumente dagegen vorbringen, könnten wir sie diskutieren, aber bis dahin halte ich diese Empfehlung aufrecht. –
Das einzige Argument, das ich immer bekomme, ist Code in den statischen Blöcken, der das Testen behindert. Wir folgen Test Driven Entwicklung streng. Also brauche ich etwas, das auch einfacher zu testen ist. –