Download - Multitenancy avec JPA ou Hibernate
Florian Beaufumé
• Architecte logiciel• Spécialisé en Java et web
• Freelance
• [email protected]• www.adeliosys.fr• www.linkedin.com/in/fbeaufume
• Types :• Database-per-tenant• Schema-per-tenant• Shared tables
• Datasource-per-tenant
• Bénéfices :• Opérations simplifiées (mise à jour, monitoring, etc.)• Optimisation des ressources• Fonctionnalités cross-tenant (tableau de bord, délégation,
etc.)
Isolation
Multitenancy
• Supporter "database-per-tenant" et "schema-per-tenant"
• Supporter les opérations cross-tenant
• Supporter des données communes en plus de données spécifiques
• Etre implémentable via JPA ou Hibernate et plus si affinités
Objectifs
Existant
CDI Spring
JPA Hibernate
SpécificationJava EE Produit
Injection de dépendance
Mapping objet relationnel Implémente
• JPA 2.1 (c.a.d Java EE 7) :• Multitenancy prévue puis abandonnée
• CDI :• Pas de fonctionnalités dédiées, utilisé pour DI et cycle de
vie des composants
Existant
• Hibernate :• 4.3 :
• Supporte "database-per-tenant" et "schema-per-tenant"• Mais une seule current session par session factory et par
contexte• Le cache L2 est "tenant aware", mais pas les stats de SF
• 5.0 :• Ajout du support de "shared tables"
• Spring :• Pas de fonctionnalités dédiées, utilisé pour DI et cycle de
vie des composants• Même modèle de current session qu'Hibernate
Existant
Données communes Données spécifiques
Table APPUSER (schéma commun)Table ITEM (schéma tenant1)
Table ITEM (schéma tenant2)
Implémentation
MyApp-Common-DS MyApp-Specific-Tenant1-DSMyApp-Specific-Tenant2-DS
Base
Data
sourc
es
• Implémentation CDI+JPA :• http://localhost:8080/multitenant-jpa/
• Implémentation Spring+Hibernate :• http://localhost:8080/multitenant-hibernate/
• Implémentation CDI+Jongo :• http://localhost:8080/multitenant-jongo/
Démonstration