11
JDBC / JPA / Hibernate: Sans maîtrise la puissance n’est rien! Brice LEPORINI Indépendant @blep http://the-babel-tower.github.io/

JDBC / JPA / Hibernate: Sans maîtrise la puissance n’est rien!

Embed Size (px)

Citation preview

Page 1: JDBC / JPA / Hibernate: Sans maîtrise la puissance n’est rien!

JDBC / JPA / Hibernate: Sans

maîtrise la puissance n’est rien!

Brice LEPORINI

Indépendant

@blep

http://the-babel-tower.github.io/

Page 2: JDBC / JPA / Hibernate: Sans maîtrise la puissance n’est rien!

Présentation

• JDBC: Interface d’échange avec les SGBD

• Hibernate: ORM, né en 2002 des frustrations des EJB2

entities

• JPA: Spécification du JCP. Hibernate implémente JPA.

Page 3: JDBC / JPA / Hibernate: Sans maîtrise la puissance n’est rien!

JPA: Recette de base<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">

<persistence-unit name="testPu" transaction-type="RESOURCE_LOCAL">

<properties>

<property name="hibernate.dialect"

value="org.hibernate.dialect.H2Dialect"/>

<property name="hibernate.hbm2ddl.auto" value="create-drop"/>

<property name="hibernate.connection.url"

value="jdbc:h2:mem:test"/>

<property name="hibernate.connection.username" value="sa"/>

<property name="hibernate.connection.password" value=""/>

<property name="hibernate.connection.driver_class"

value="org.h2.Driver"/>

</properties>

</persistence-unit>

</persistence>

@Entity

@Getter @Setter

@EqualsAndHashCode(exclude = "id")

public class User{

@Id

private Long id;

@Column(unique = true,nullable = false)

private String name;

}

EntityManagerFactory emf =

Persistence.createEntityManagerFactory("testPu");

EntityManager em = emf.createEntityManager();

em.getTransaction().begin();

final User user = new User();

user.setName("balibalo");

•Verser 50g de configuration XML dans META-INF

•Délayer 40g d’annotation dans chaque POJO pour

le mappage

•Mettre une implémentation dans le Class Path

•Démarrer l’unité de persistance pour faire prendre le

tout

•C’est prêt!

1

2

3

Page 4: JDBC / JPA / Hibernate: Sans maîtrise la puissance n’est rien!

Pourquoi revenir dessus en

2014?

• Technologie largement utilisée dans les applications

Java

• Extrêmement rarement maîtrisée...

Page 5: JDBC / JPA / Hibernate: Sans maîtrise la puissance n’est rien!

Cache L1

• Ou cache de session

• Scalabilité!

• Attention au cache obsolète entre les sessions:

• Sessions longues (batches, Stateful)

• Transactions indépendantes:

Tx REQUIRED[ ... Tx REQUIRES_NEW [ ..... ] .... ]

Page 6: JDBC / JPA / Hibernate: Sans maîtrise la puissance n’est rien!

N+1 @OneToOne

• Java ne permet pas de «proxifier» la valeur null

• Le choix de la propriété (ownership) de la relation est

donc primordial

• Alternatives

• Fusion

• Héritage

•@Embeddable

Page 7: JDBC / JPA / Hibernate: Sans maîtrise la puissance n’est rien!

Interrogation

• Inline: Jamais (ou tests)

• Named Queries / Repo Spring Data: requêtes statiques

• API Criteria:

• Non typée: Jamais

• Meta-modèle: Requêtes construites dynamiquement

Page 8: JDBC / JPA / Hibernate: Sans maîtrise la puissance n’est rien!

Dimensionner un pool JDBC

• Quelles métriques?

• Ratio utilisateurs par connexion

• Ratio threads par connexion

• 42

• Quel est le délai acceptable pour obtenir une connexion?0 ms!

Page 9: JDBC / JPA / Hibernate: Sans maîtrise la puissance n’est rien!

Dimensionner un pool JDBC

• Pas de recette miracle, dépend de l’application

• Tester l’application dans des conditions représentatives

• Scruter les logs à la recherche de messages

d’assèchement

• Positionner un timeout faible et recenser les erreurs

• Initial = Idle = Max

Page 10: JDBC / JPA / Hibernate: Sans maîtrise la puissance n’est rien!

Sans maitrise la puissance

n’est rien!

Page 11: JDBC / JPA / Hibernate: Sans maîtrise la puissance n’est rien!

Références

• JSR 338: JavaTM Persistence 2.1:

https://jcp.org/en/jsr/detail?id=338

• Documentation Hibernate

http://hibernate.org/orm/documentation/

• Patrycja Wegrzynowicz: Performance Anti-Patterns in Hibernate:

https://parleys.com/play/514892290364bc17fc56c48b

• Ippon :Formation JPA Avancé / Hibernate

http://fr.slideshare.net/ippontech/jpa-avanc-hibernate