multitenancy avec jpa ou hibernate

12
Multitenancy avec CDI+JPA ou Spring+Hibernate Florian Beaufumé 06/2015

Upload: florian-beaufume

Post on 20-Jan-2017

142 views

Category:

Technology


4 download

TRANSCRIPT

Multitenancy avec CDI+JPAou Spring+Hibernate

Florian Beaufumé06/2015

Florian Beaufumé

• Architecte logiciel• Spécialisé en Java et web

• Freelance

[email protected]• www.adeliosys.fr• www.linkedin.com/in/fbeaufume

App 1

Base 1

App 2

Base 2

App

Base 1 Base 2

Single-tenant Multitenant

Multitenancy

• 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

Implémentation

1

2 3

4

• Plusieurs stratégies possibles

• Tests unitaires : mocking

• Tests d'intégration :• CDI+JPA : Arquillian• Spring+Hibernate : JTA avec Atomikos

Tests