Freitag, 16. September 2016

BedCon 2016 - JPA Best Practices

JPA Best Practices

- EntityManager immer nur im RequestScope laufen lassen ( also nicht per Session ).
Der EntityManager ist an eine Transaktion gebunden, Außerhalb von Requests können sonst Nebenläufigkeiten entstehen.

- EntityManager per @Inject reingeben statt @PersistenceManager . Bei @Inject muss der EntityManager von einer Factory erzeugt werden über @Produces im Request-Scope. Auf diese Art und Weise kann der EntityManager auch an anderen Stellen verwendet werden, so @PersistenceManager nicht erlaubt ist. Hier ist aber darauf zu achten, dass der EntityManager per se immer trasaktional arbeitet. Jede Attributänderung einer JSF ManagedBean wird direkt weggespeichert wenn diese Bean dann attached ist. Durch ein explizites Ausstellen (Modus Unsynchronized) der Transaktionalität beim Produzieren des EntityManagers in der Factory lässt sich das verhindern. Allerdings muss dann der EntityManager bei einer gewollten transaktionalen Verarbeitung wieder manuell an die Transaktion gebunden werden (entityManager.joinTransaction())

0 Kommentare:

Kommentar veröffentlichen