Ich hab in meinem Projekt einige Entity-Klassen diese werden über eine "normale" Klasse ("dbApi") an den Rest des Projekts angebunden. Nun Frage ich mich wie ich in dieser normalen Klasse mit Entity Manager und der Entity-Manager-Factory umgehen soll.
Eigentlich reichen ja statische ("singleton") Attribute, also jeweils eine Instanz für alle Instanzen der "dbApi", oder? Oder mach ich mir da zu viele Gedanken und es gibt da eine "best practice"?
Nicht nur beim instanziieren bin ich mir unsicher sondern auch beim Freigeben (das verunsichert mich schon immer bei Java). Nach allem was ich weiß sollte man immer eine close()-Methode bereitstellen falls man intern irgendwelche Resourcen hält. In meinem Fall würde diese close-Methode sowolh die EM-Factory als auch den EM freigeben. Nur finde ih es irgendwie blöd dem Konsumenten der Klasse die Verantwortung über die Resourcenfreigabe zu geben - aber da gibts in Java keine richtige Alternative oder?
Um dem aus dem Weg zu gehen: wie schlimm wäre es immer nur lokale EM und EMF zu erzeugen - also in den Methoden, die sie benötigen, dann würden die Methoden am Ende auch die Resourcen freigeben, aber ist es ok eventuell "soviele" em und emf's zu erzeugen?
Edit: Achso ähnliche Fragen hätte ich auch für die EntityTransaction.
Edit: wie so oft gibts durch googeln manchmal mehr Fragen: wo ist der Unterschied zwischen:
und
und
public class Entity
...
@PersistenceUnit(unitName="PU")
emf = Persistence.createEntityManagerFactory("PU");
em = emf.createEntityManager();
...
[/code]
insbesondere der Unterschied der letzten beiden würde mich interessieren.
?
Eigentlich reichen ja statische ("singleton") Attribute, also jeweils eine Instanz für alle Instanzen der "dbApi", oder? Oder mach ich mir da zu viele Gedanken und es gibt da eine "best practice"?
Nicht nur beim instanziieren bin ich mir unsicher sondern auch beim Freigeben (das verunsichert mich schon immer bei Java). Nach allem was ich weiß sollte man immer eine close()-Methode bereitstellen falls man intern irgendwelche Resourcen hält. In meinem Fall würde diese close-Methode sowolh die EM-Factory als auch den EM freigeben. Nur finde ih es irgendwie blöd dem Konsumenten der Klasse die Verantwortung über die Resourcenfreigabe zu geben - aber da gibts in Java keine richtige Alternative oder?
Um dem aus dem Weg zu gehen: wie schlimm wäre es immer nur lokale EM und EMF zu erzeugen - also in den Methoden, die sie benötigen, dann würden die Methoden am Ende auch die Resourcen freigeben, aber ist es ok eventuell "soviele" em und emf's zu erzeugen?
Edit: Achso ähnliche Fragen hätte ich auch für die EntityTransaction.
Edit: wie so oft gibts durch googeln manchmal mehr Fragen: wo ist der Unterschied zwischen:
Code:
public class Entity
@PersistenceContext(uniitName="PU")
private EntityManager em;
und
Code:
public class Entity
...
emf = Persistence.createEntityManagerFactory("PU");
em = emf.createEntityManager();
...
und
public class Entity
...
@PersistenceUnit(unitName="PU")
emf = Persistence.createEntityManagerFactory("PU");
em = emf.createEntityManager();
...
[/code]
insbesondere der Unterschied der letzten beiden würde mich interessieren.
?
Zuletzt bearbeitet: