Frage

Ich habe gerade begonnen, meinen homegrown Persistenz-Framework zu JPA migrieren.

Da die Persistenz-Frameworks eine Menge der Sanitär verstecken, ich bin daran interessiert zu wissen, ob nicht EntityManagers Schließen einer Ressource Leck schaffen wird, oder wenn die Gerüste sammeln und schließen Sie sie für mich.

ich an allen Orten der Absicht, sie zu schließen, aber ich?

Im Moment TopLink verwenden, nur weil es mit NetBeans funktioniert einfach, aber ich bin glücklich, andere PPV-Anbieter zu untersuchen.

War es hilfreich?

Lösung

Es hängt davon ab, wie Sie es erhalten.

Wenn Sie es mit erstellt EntityManagerFactory Sie es schließen müssen, egal welche Rahmen Sie verwenden.

Wenn Sie es unter Verwendung Dependency Injection (zB mit EJB und @PersistenceContext Anmerkung) Sie sollten es nicht von Hand schließen (AFAIK es wird Runtime verursachen).

Andere Tipps

Sie sollten.

Frameworks haben keine Ahnung, wie Sie die EM verwenden wollen, so können sie es nicht schließen (außer, auch sein mag, auf die abschließende Überarbeitung, die nicht garantiert ist). Ja, nicht schließen sie eine Ressource Leck verursachen würde.

Die Idee das gleiche wie „immer in der Nähe java.sql.Connection“ ist (trotz einiger Datenquellen-Einstellungen automatisch durch Inaktivität schließen) oder „immer in der Nähe Sitzung Ruhezustand“.

Außerdem, wenn Sie planen, portablen Code zu schreiben, sollten Sie nicht auf spezifische JPA-Provider vertrauen „ist intelligent.“ - andere versagen die EM in der Zeit schließen

mit EntityManager Anmerkung in meinem Repository

Ich habe @PersistenceContext erhalten. Ich kann sehen, dass, nachdem die connectionpools seine maxPoolSize erreicht er nicht gereinigt bekommt.

Allerdings, wenn ich EntityManager erstellen mit EntityManagerFactory und Call entitymanager.close() dann werden Verbindungen bis gereinigt zu werden. Ich verwende c3p0 als Connection Bibliothek.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top