Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Objektrelationales Mapping mit JPA

Ähnliche Präsentationen


Präsentation zum Thema: "Objektrelationales Mapping mit JPA"—  Präsentation transkript:

1 Objektrelationales Mapping mit JPA
Architektur Jonas Bandi Simon Martinelli

2 EJB Verwendung von JPA innerhalb EJB3
@PersistenceContext  EntityManager @PersistenceUnit  EntityManagerFactory public class EmployeeServiceBean implements EmployeeService { @PersistenceContext protected EntityManager em; ... }

3 EJB und EXTENDED Standardmässig ist der Persistence Context im Modus TRANSACTION In Stateful Session Beans ist es aber möglich diesen auf EXTENDED zu ändern public class EmployeeServiceBean implements EmployeeService { @PersistenceContext( type = PersistenceContextType.EXTENDED) protected EntityManager em; ... }

4 Data Access Object (DAO)
Problem You want to encapsulate data access and manipulation in a separate layer Solution Use a Data Access Object to encapsulate all access to the persistent store. The Data Access Object manages the connection with the data source to obtain and store data DAOs werden als einfache, zustandslose Klassen realisiert, die den Zugriff auf eine Datenquelle kapseln Ziele: Trennung von Business Logik und technischer Zugriffslogik Kapselung von Zugriff auf Datenbank oder Fremdsystem

5 DAO Klassendiagramm

6 DAO und JPA Häufig überflüssig dank EntityManager
GenericDAO public interface GenericDAO { <T extends BaseEntity> T create(T t); <T extends BaseEntity> T find(Class<T> type, Serializable id); <T extends BaseEntity> T update(T t); void delete(Object t); List findByNamedQuery(String queryName); List findByNamedQuery(String queryName, Map<String, Object> parameters); }

7 Transfer Object (TO) Problem You want to transfer multiple data elements over a tier Solution Use a Transfer Object to carry multiple data across a tier Daten werden in Datencontainern zusammengefasst und über Tier-Grenzen transportiert Das Konzept sollte generell zwischen den Schichten eingesetzt werden Ziel Verringerung der übertragenen Datenmenge

8 TO und JPA Mit Constructor Expressions existiert eine einfache Möglichkeit direkt aus den Resultaten Transfer Objects zu erzeugen. public class EmpMenu { public EmpMenu(String employeeName, String deptName) {...} } List result = em.createQuery( "SELECT NEW jpa.util.EmpMenu(e.name, e.department.name) " "FROM Project p JOIN p.employees e " + "where p.name = "ZLD").getResultList(); for (EmpMenu menu : result) { log.info(menu.employeeName + "," + menu.deptName); }

9 Schichtung und Verteilung
3rd Party Applikation XY Ausschliesslich TOs Client oder Webserver Applikationsserver DB Server Präsentations-schicht Fassade Service Business Datenzugriff Datenhaltung TOs und Entities

10 Client/Server Entities Ausschliesslich TOs

11 Batch Problematik Sequenzielle Verarbeitung von grossen Datenmengen
Verwendung von Cursors mit JPA nicht möglich Lösung Pagination Vorsicht Persistence Context kann gross werden und sollte regelmässig aufgeräumt werden (EntitManager.clear())

12 Clustering Zur Erhöhung der Verfügbarkeit und der Verbesserung der Performance werden Application Server häufig geclustert Problem Persistence Context auf mehreren Knoten vorhanden Synchronität mit Datenbank nicht gegeben Lösung Synchronisation (Providerabhängig) Referesh der Entitäten bei Bedarf


Herunterladen ppt "Objektrelationales Mapping mit JPA"

Ähnliche Präsentationen


Google-Anzeigen