JDBC / JPA / Hibernate: Sans
maîtrise la puissance n’est rien!
Brice LEPORINI
Indépendant
@blep
http://the-babel-tower.git...
Présentation
• JDBC: Interface d’échange avec les SGBD
• Hibernate: ORM, né en 2002 des frustrations des EJB2
entities
• J...
JPA: Recette de base
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
<persistence-unit name="te...
Pourquoi revenir dessus en
2014?
• Technologie largement utilisée dans les applications
Java
• Extrêmement rarement maîtri...
Cache L1
• Ou cache de session
• Scalabilité!
• Attention au cache obsolète entre les sessions:
• Sessions longues (batche...
N+1 @OneToOne
• Java ne permet pas de «proxifier» la valeur null
• Le choix de la propriété (ownership) de la relation est...
Interrogation
• Inline: Jamais (ou tests)
• Named Queries / Repo Spring Data: requêtes statiques
• API Criteria:
• Non typ...
Dimensionner un pool JDBC
• Quelles métriques?
• Ratio utilisateurs par connexion
• Ratio threads par connexion
• 42
• Que...
Dimensionner un pool JDBC
• Pas de recette miracle, dépend de l’application
• Tester l’application dans des conditions rep...
Sans maitrise 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://hibern...
Prochain SlideShare
Chargement dans…5
×

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

791 vues

Publié le

Présentation sur JDBC / JPA / Hibernate

Publié dans : Logiciels
0 commentaire
1 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
791
Sur SlideShare
0
Issues des intégrations
0
Intégrations
14
Actions
Partages
0
Téléchargements
15
Commentaires
0
J’aime
1
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

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

  1. 1. JDBC / JPA / Hibernate: Sans maîtrise la puissance n’est rien! Brice LEPORINI Indépendant @blep http://the-babel-tower.github.io/
  2. 2. 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.
  3. 3. 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(); •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
  4. 4. Pourquoi revenir dessus en 2014? • Technologie largement utilisée dans les applications Java • Extrêmement rarement maîtrisée...
  5. 5. 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 [ ..... ] .... ]
  6. 6. 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
  7. 7. 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
  8. 8. 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!
  9. 9. 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
  10. 10. Sans maitrise la puissance n’est rien!
  11. 11. 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

×