Where the Rubber Meets the Road: Turn Leadership Communications Goals into Reality
Java Persistence - Standard meets Reality
-
Upload
open-knowledge-gmbh -
Category
Technology
-
view
1.185 -
download
1
Transcript of Java Persistence - Standard meets Reality
![Page 1: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/1.jpg)
Java PersistenceJava Persistence
Standard meets Reality
Arne Limburg // open knowledge GmbH
Standard meets Reality
Arne Limburg // open knowledge GmbH
![Page 2: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/2.jpg)
JPA 2.0
The technical objective of this work is
to provide an object/relational mapping facilityfor the Java application developer
using a Java domain model
to manage a relational database.Zitat: JPA Spezifikation, v 2.0
![Page 3: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/3.jpg)
AgendaAgenda
JPA CoreJPA Core
EE IntegrationEE Integration
Wolkige Zukunft?Wolkige Zukunft?
![Page 4: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/4.jpg)
Persistenz in Java EE
Am Anfang war dieJDBC-API…
Image: digitalart / FreeDigitalPhotos.net
![Page 5: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/5.jpg)
Persistenz in Java EE
Erster Versuch:- Bean-Managed PersistenceZweiter Versuch:- Container-Managed PersistenceParallel: JDO
Image: digitalart / FreeDigitalPhotos.net
![Page 6: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/6.jpg)
Persistenz in Java EE
Schon besser: CMP 2Open Source auf der Überholspur:
Castor, IBatis, Hibernate
Ein Neubeginn: JPA
Image: digitalart / FreeDigitalPhotos.net
![Page 7: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/7.jpg)
JPA aus 10.000 Metern
![Page 8: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/8.jpg)
Building Blocks
EntityManagerFactoryEntityManagerFactoryEntityManagerFactoryEntityManagerFactory
EntityManager
QueryQueryQueryQuery
EntityTra
nsaction
CriteriaQueryCriteriaQueryCriteriaQueryCriteriaQueryCacheCacheCacheCache
Entity
EntityListener
MappedSuperclass
Embeddable
![Page 9: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/9.jpg)
![Page 10: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/10.jpg)
Eine JPA Entität@Entity @Table (name = "TAB_USER")public class User {
@Id @Column(name = "USER_ID" )private int id ;…
}
![Page 11: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/11.jpg)
Ab JPA 2.1: Custom Converter@Entity @Table (name = "TAB_USER")public class User {
@Id @Column(name = "USER_ID" )private int id ;
@Convert (converter = MyConverter. class )private X509Certificate certificate ;…
}
![Page 12: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/12.jpg)
Image: scottchan / FreeDigitalPhotos.net
Beziehungen
Granularität
Vererbung
Herausforderungen
![Page 13: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/13.jpg)
Beziehungen – many-to-one@Entitypublic class User {
@ManyToOne@JoinColumn (name = "ROLE_ID" )private Role role ;…
}
![Page 14: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/14.jpg)
Beziehungen - Bidirektional@Entitypublic class Role {
@OneToMany(mappedBy = "role" )private List<User> users ;…
}
![Page 15: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/15.jpg)
Beziehungen – one-to-one@Entitypublic class User {
@OneToOne@JoinColumn (name = "ROLE_ID" )private Role role ;…
}
![Page 16: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/16.jpg)
Beziehungen – geteilte Id@Entitypublic class Role {
@Id@OneToOneprivate User user ;…
}
![Page 17: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/17.jpg)
Beziehungen – many-to-many@Entitypublic class User {
@ManyToMany@JoinTable (name = "TAB_USER_ROLES",
joinColumns = …,inverseJoinColumns = …)
private List<Role> roles ;…
}
![Page 18: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/18.jpg)
Beziehungen – owning side@Entitypublic class Role {
@ManyToMany(mappedBy = "roles" )private List<User> users ;…
}
![Page 19: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/19.jpg)
Image: scottchan / FreeDigitalPhotos.net
Beziehungen
Granularität
Vererbung
Herausforderungen
![Page 20: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/20.jpg)
Granularität - Embeddables@Entitypublic class User {
@Embedded @AttributeOverride (…)private Role role ;…
}
@Embeddablepublic class Role {
…}
![Page 21: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/21.jpg)
Granularität - ElementCollection@Entitypublic class User {
@ElementCollection@CollectionTable (name = "…",
joinColumns = …)private List<Role> roles ;…
}
![Page 22: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/22.jpg)
Granularität – Simple Values@Entitypublic class User {
@ElementCollection@CollectionTable (name = "…",
joinColumns = …)private List<String> roles ;…
}
![Page 23: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/23.jpg)
Image: scottchan / FreeDigitalPhotos.net
Beziehungen
Granularität
Vererbung
Herausforderungen
![Page 24: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/24.jpg)
Vererbung – Single Table@Entity@Inheritance (strategy = SINGLE_TABLE)@DiscriminatorColumn (name = "…")public class User {
…}@Entity@DiscriminatorValue ( "…")public class Admin extends User {
…}
![Page 25: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/25.jpg)
Vererbung – Table per Class@Entity@Inheritance (strategy = TABLE_PER_CLASS)public class User {
…}
@Entitypublic class Admin extends User {
…}
![Page 26: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/26.jpg)
Vererbung – Joined@Entity@Inheritance (strategy = JOINED)public class User {
…}
@Entitypublic class Admin extends User {
…}
![Page 27: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/27.jpg)
Vererbung – Secondary Table@Entity@Inheritance (strategy = JOINED)public class User {
…}
@Entity @SecondaryTable (name = "…")public class Admin extends User {
…}
![Page 28: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/28.jpg)
Vererbung – Mapped Superclass
@MappedSuperclasspublic class AbstractUser {
…}
![Page 29: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/29.jpg)
AgendaAgenda
JPA CoreJPA Core
EE IntegrationEE Integration
Wolkige Zukunft?Wolkige Zukunft?
![Page 30: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/30.jpg)
EE IntegrationEE Integration
Integration mit CDIIntegration mit CDI
Integration mit EJBIntegration mit EJB
Entity-LebenszyklusEntity-Lebenszyklus
![Page 31: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/31.jpg)
New
Managed Detached
Removed
entityManager.persistentityManager.merge
entityManager.remove
entityManager.detachentityManager.close
entityManager.mergeentityManager.findquery.getResultList()query.getSingleResult()
Entity-Lebenszyklus
![Page 32: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/32.jpg)
New
Managed
Removed
entityManager.persistentityManager.merge
entityManager.remove
entityManager.detachentityManager.close
entityManager.mergeentityManager.findquery.getResultList()query.getSingleResult()
Entity-Lebenszyklus
Detached
Achtung:
Lazy-Initialization nicht im Zustand „detached“
![Page 33: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/33.jpg)
Wann wird der EntityManagereigentlich geschlossen?
![Page 34: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/34.jpg)
Fragestellungen• EntityManager
– Container- vs. Application-Managed– Transactional vs. Extended
• Transaction– JTA vs. Resource Local– Synchronized vs. Unsynchronized
• Datasource– JNDI vs. local– JTA vs. Non-JTA
![Page 35: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/35.jpg)
Application-Managed
• Erzeugung via entityManagerFactory.createEntityManager(…)
• Transaktionsbehandlung (Manuell) – JTA entityManager.joinTransaction()
– RESOURCE_LOCAL entityManager.getTransaction().begin() entityManager.getTransaction().commit()
• Scope EXTENDED (Manuelle Verwaltung)
![Page 36: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/36.jpg)
Application-Managed
• Erzeugung via entityManagerFactory.createEntityManager(…)
• Transaktionsbehandlung (Manuell) – JTA entityManager.joinTransaction()
– RESOURCE_LOCAL entityManager.getTransaction().begin() entityManager.getTransaction().commit()
• Scope EXTENDED (Manuelle Verwaltung)
Nachteil:
Keine PerstenceContext-Propagation!
![Page 37: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/37.jpg)
EE IntegrationEE Integration
Integration mit CDIIntegration mit CDI
Integration mit EJBIntegration mit EJB
Entity-LebenszyklusEntity-Lebenszyklus
![Page 38: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/38.jpg)
EE IntegrationEE Integration
Integration mit EJBIntegration mit EJB
![Page 39: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/39.jpg)
@Statelesspublic class UserDaoEjb {
@PersistenceContextprivate EntityManager em;…
}
@Statelesspublic class UserDaoEjb {
@PersistenceContextprivate EntityManager em;…
public void businessMethod() {// EntityManager available
}}
Transaction-Scoped
![Page 40: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/40.jpg)
@Statelesspublic class UserDaoEjb {
@PersistenceContextprivate EntityManager em;…
}
@Statelesspublic class UserDaoEjb {
@PersistenceContextprivate EntityManager em;…
public void businessMethod() {// EntityManager available
}}
@Statelesspublic class UserDaoEjb {
@PersistenceContextprivate EntityManager em;…@TransactionAttribute ( NEVER)public void businessMethod() {
// EntityManager not available}
}
Transaction-Scoped
![Page 41: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/41.jpg)
Java-EE-5-Schichtenarchitektur
Transaktions-grenze
Vorsicht mit Lazy-Initialization
![Page 42: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/42.jpg)
@Statefulpublic class UserDaoEjb {
@PersistenceContext (type = EXTENDED)private EntityManager em;…
}
@Statefulpublic class UserDaoEjb {
@PersistenceContext (type = EXTENDED)private EntityManager em;…
public void businessMethod() {// EntityManager available
}}
Session-Scoped
![Page 43: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/43.jpg)
@Statefulpublic class UserDaoEjb {
@PersistenceContext (type = EXTENDED)private EntityManager em;…
}
@Statefulpublic class UserDaoEjb {
@PersistenceContext (type = EXTENDED)private EntityManager em;…
public void businessMethod() {// EntityManager available
}}
@Statefulpublic class UserDaoEjb {
@PersistenceContext (type = EXTENDED)private EntityManager em;…@TransactionAttribute ( NEVER)public void businessMethod() {
// EntityManager available}
}
Session-Scoped
![Page 44: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/44.jpg)
@Statefulpublic class UserDaoEjb {
@PersistenceContext (synchronization = UNSYNCHRONIZED)
private EntityManager em;…
}
@Statefulpublic class UserDaoEjb {
@PersistenceContext (synchronization = UNSYNCHRONIZED)
private EntityManager em;…public void businessMethod() {
// no flush after invocation}
}
Unsynchronized (ab JPA 2.1)
![Page 45: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/45.jpg)
@Statefulpublic class UserDaoEjb {
@PersistenceContext (synchronization = UNSYNCHRONIZED)
private EntityManager em;…
}
@Statefulpublic class UserDaoEjb {
@PersistenceContext (synchronization = UNSYNCHRONIZED)
private EntityManager em;…public void businessMethod() {
// no flush after invocation}
}
@Statefulpublic class UserDaoEjb {
@PersistenceContext (synchronization = UNSYNCHRONIZED)
private EntityManager em;…public void businessMethod() {
em.joinTransaction();// flush‘n‘commit after invocation
}}
Unsynchronized (ab JPA 2.1)
![Page 46: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/46.jpg)
Producer für CDI@Statelesspublic class UserServiceEjb {
@Produces @PersistenceContextprivate EntityManager em;…
}
public class UserDao {@Injectprivate EntityManager em;
}
![Page 47: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/47.jpg)
Fazit EJB-Integration
• Injection in Session Beans(stateful und stateless)
• Transaktionsgrenze– Methodenaufruf der Session Bean
(inklusive Transaction-Propagation)
• Scopes– Transaction (alle Session Beans)– Session (Stateful Session Beans)
![Page 48: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/48.jpg)
EE IntegrationEE Integration
Integration mit EJBIntegration mit EJB
![Page 49: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/49.jpg)
EE IntegrationEE Integration
Integration mit CDIIntegration mit CDI
![Page 50: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/50.jpg)
Integration mit CDI (ab JPA 2.1)
public class MyEntityListener {
@Inject @Currentprivate User user ;
@PrePersistpublic void setCreator(MyEntity e) {
e.setCreator( user );}
}
![Page 51: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/51.jpg)
Integration mit CDI (ab JPA 2.1)
public class MyEntityListener {
@Inject @Currentprivate User user ;
@PrePersistpublic void setCreator(MyEntity e) {
e.setCreator( user );}
}
Achtung:
Verhalten bei Zugriff auf andere Entitäten oder Verändern von Beziehungen ist nicht
standardisiert.
![Page 52: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/52.jpg)
Integration mit CDIaußerhalb des Standards
CDI bietet viele Scopes und ausgefeiltes
Lifecycle-Management!
Kann das nicht für den EntityManager genutzt werden?
![Page 53: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/53.jpg)
Request-Scoped EntityManager@ApplicationScopedpublic class MyPersistenceUnit {
@Produces@RequestScopedpublic EntityManager createEntityManager(
EntityManagerFactory factory) {return factory.createEntityManager();
}…
}
![Page 54: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/54.jpg)
Lifecycle-Management von CDI@ApplicationScopedpublic class MyPersistenceUnit {
…
public void closeEntityManager(@Disposes EntityManager entityManager) {
entityManager.close();}
}
![Page 55: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/55.jpg)
Schichtenarchitektur mit CDIEntityManagerlifecycle
Lazy-Initializationmöglich
![Page 56: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/56.jpg)
Schichtenarchitektur mit CDIEntityManagerlifecycle
Lazy-Initializationmöglich
Offen:
Transaktionsgrenze
![Page 57: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/57.jpg)
Transactional-Interceptor mit CDI@Transactional @Interceptorpublic class MyTransactionalInterceptor {
@Injectprivate EntityManager em;
…}
![Page 58: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/58.jpg)
Transactional-Interceptor mit CDI@InterceptorBindingpublic @interface Transactional {}
![Page 59: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/59.jpg)
Transactional-Interceptor mit CDI@Transactional @Interceptorpublic class MyTransactionalInterceptor {
@Injectprivate EntityManager em;
…}
![Page 60: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/60.jpg)
Transactional-Interceptor mit CDI…@AroundInvokepublic Object startTransaction(
InvocationContext context) throws … {em.getTransaction().begin();try {
return context.proceed();} finally {
em.getTransaction().commit();}
}
![Page 61: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/61.jpg)
Transactional-Interceptor mit CDI@ApplicationScopedpublic class MyUserDao {
@Injectprivate EntityManager em;
@Transactionalpublic void persist(User user) {
em.persist(user);}
}
![Page 62: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/62.jpg)
Weitere Scopes?@ApplicationScopedpublic class MyPersistenceUnit {
@Produces@RequestScopedpublic EntityManager createEntityManager(
EntityManagerFactory factory) {return factory.createEntityManager();
}…
}
![Page 63: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/63.jpg)
Conversation-Scope?@ApplicationScopedpublic class MyPersistenceUnit {
@Produces@ConversationScopedpublic EntityManager createEntityManager(
EntityManagerFactory factory) {return factory.createEntityManager();
}…
}
![Page 64: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/64.jpg)
Custom Scope@ApplicationScopedpublic class MyPersistenceUnit {
@Produces@MyCustomScopedpublic EntityManager createEntityManager(
EntityManagerFactory factory) {return factory.createEntityManager();
}…
}
![Page 65: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/65.jpg)
AgendaAgenda
JPA CoreJPA Core
EE IntegrationEE Integration
Wolkige Zukunft?Wolkige Zukunft?
![Page 66: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/66.jpg)
Wolkige Zukunft?Wolkige Zukunft?
JPA und NoSQLJPA und NoSQL
MandantenfähigkeitMandantenfähigkeit
![Page 67: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/67.jpg)
Wolkige Zukunft?Wolkige Zukunft?
MandantenfähigkeitMandantenfähigkeit
![Page 68: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/68.jpg)
Mandantenfähigkeit in JPA 2.1
• Ein Mandant pro Applikation• Drei Strategien des Datenzugriffs
– SEPARATE_DATABASE– SEPARATE_SCHEMA– SHARED_TABLE (mit @TenantId Spalte)
![Page 69: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/69.jpg)
Wolkige Zukunft?Wolkige Zukunft?
JPA und NoSQLJPA und NoSQL
MandantenfähigkeitMandantenfähigkeit
![Page 70: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/70.jpg)
Wolkige Zukunft?Wolkige Zukunft?
JPA und NoSQLJPA und NoSQL
![Page 71: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/71.jpg)
NoSQL – „Not only SQL“
• Nicht relational • Distributed• Big Data• Eventually Consistent
statt ACID• Map-Reduce statt SQL
![Page 72: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/72.jpg)
• Key-Value– SimpleDB, Infinispan, Coherence, …
• Wide-Column– BigTable, Cassandra, …
• Document-Databases– MongoDB, CouchDB, …
• Object-Databases• … (z.B. Graph-Databases)
Varianten
![Page 73: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/73.jpg)
Abfragemöglichkeiten
• Nach Primärschlüssel• SQL-like Abfragesprache (z.B.
SimpleDB)• Map-Reduce• …
Joins sind teuer!
![Page 74: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/74.jpg)
Wie passt das zu JPA?
![Page 75: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/75.jpg)
Fokus von JPA auf RDBMS
• Id-Generierungsstrategien• Joins• Subclassing• Polymorphie• Transaktionen
![Page 76: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/76.jpg)
Vision
• Trennung von– Mapping (@Entity, @Id)– Relationale Spezifika
(@Table, @Column)?
• Querying• Transaktions-Behandlung
![Page 77: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/77.jpg)
Stand der Dinge
Implementierungen • SimpleJPA (SimpleDB)• Datanucleus-appengine
(BigTable)• Hibernate-OGM
(Infinispan, MongoDB, …)
![Page 78: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/78.jpg)
Fazit
Cloud Computing in Java EE• in Java EE 7
– Mandantenfähigkeit– JSR 347: Data Grids for the Java Platform
• In Java EE 8???
![Page 79: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/79.jpg)
Fazit
Cloud Computing• in Java EE 7
– Mandantenfähigkeit– JSR 347: Data Grids for the Java Platform
• In Java EE 8???
JPA in der Cloud gibt es!
Der Weg von NoSQL in den JPA-Standard ist aber noch weit!
![Page 80: Java Persistence - Standard meets Reality](https://reader034.fdocuments.us/reader034/viewer/2022052619/554f75b3b4c9052a518b46e1/html5/thumbnails/80.jpg)
Vielen Dank für Ihre Zeit.
Kontakt:
open knowledge GmbHBismarckstr. 1326122 Oldenburg
ArneLimburg_openknowledge
Q&A