6

Ist eine Verbindung nur an den Verbindungspool in einer JPA-Anwendung zurückgegeben, wenn ichWann wird eine Verbindung zum Verbindungspool in einer JPA-Anwendung zurückgegeben?

entityManager.close(); 

nennen?

Kann die Verbindung, die den EntityManger unterstützt, während ihres Lebenszyklus geändert werden?

Dank im Voraus mojoo

+2

Ich fand diese Beschreibung der Verbindung freisetzenden Strategien mit Hibernate: http://docs.jboss.org/hibernate/stable/core.old/reference/en/html/transactions-connection-release.html – GlenPeterson

Antwort

4

Die PPV-Spezifikation definiert nicht, solche Dinge und sein bis hin zur Implementierung Verbindungen zu verwalten. Wenn eine Transaktion aktiv ist, können Sie davon ausgehen, dass die Verbindung aus offensichtlichen Gründen bis zur Festschreibung identisch ist. Sobald der TXN endet, kann er zurückgegeben werden, oder er kann abhängig von der Implementierung gehalten werden (und Sie erwähnen Ihre nicht)

2

Dies hängt von der JPA-Implementierung und Konfiguration ab.

In EclipseLink wird eine Verbindung standardmäßig nur für die Dauer einer aktiven (schmutzigen) Transaktion gehalten. von der ersten Modifikation oder Sperre bis zum Festschreiben oder Zurücksetzen. Bei nicht transaktionalen Abfragen wird eine Verbindung auf Anforderung erfasst und nach der Ausführung der Abfrage zurückgegeben. Dies ermöglicht eine maximale Nutzung des Verbindungs-Poolings. Normalerweise macht em.close() also nichts.

Sie können dies mit der Persistenzeinheit-Eigenschaft "eclipselink.jdbc.exclusive-connection.mode" konfigurieren. "Immer" hält eine Verbindung für das Leben des EntityManager.

Sie können auch verschiedene Verbindungspools für Transaktionen im Vergleich zu nichttransaktionalen Lesevorgängen verwenden. Dies ist bei JTA nützlich, da Sie eine Nicht-JTA-DataSource für Lesevorgänge verwenden können.

Verwandte Themen