Presentation JPA Multi-Tenancy & Extensibility
One of the major themes of Java EE 7 and JPA 2.1 is multi-tenancy and EclipseLink, the JPA 2.1 reference implementation, has blazed the trail by shipping support for both multi-tenancy and tenant specific extensions in the Eclipse Indigo release. EclipseLink multi-tenancy enables the use of a single persistence unit by multiple tenants while keeping their data isolated and secure.
Published on: 2011-12-20T07:30:21.000Z
Channel: Devoxx'11 (all)
Tags: JPA EclipseLink JPA2
Speakers:
Shaun Smith
Shaun Smith is co-lead of the Eclipse Dali Java Persistence API Tools Project, Ecosystem Development Lead for the Eclipse Java Persistence Platform (EclipeLink), a committer on the EMF Tools Teneo project, and a product manager for Oracle TopLink. He's been building systems using object-relational mapping technologies for a decade in both Java and Smalltalk in the energy, telecommunications, and banking industries. Prior to joining the TopLink team at Oracle, Shaun was a consultant specializing in application architecture and agile software development methods with a particular focus on developing enterprise applications using test driven design. He's a SpringOne alumni speaker and a frequent conference presenter having recently spoken at EclipseCon, EclipseWorld, The Server Side Symposium, JavaPolis, and JavaOne.
Slides:
Multi-Tenancy & Extensibility:
Multi-Tenancy & Extensibility:
Blazing the Trail to JPA 2.1 in EclipseLink
Shaun Smith Eclipse Commiter/Oracle TopLink shaun.smith@oracle.com @shaunMsmith
About Me
About Me
· From Toronto, Canada
· Product Manager at Oracle for TopLink · Object-Relational Mapping since '96! · Committer on various Eclipse projects including EclipseLink
2
Multitenancy
Multitenancy
Wikipedia http://en.wikipedia.org/wiki/Multitenancy · Multitenancy refers to a principle in software architecture where a single instance of the software runs on a server, serving multiple client organizations (tenants). · Multitenancy is contrasted with a multi-instance architecture where separate software instances (or hardware systems) are set up for different client organizations.
3
Application Dev and the Cloud
Application Dev and the Cloud
· Today
Single Tenant or non-Tenant Applications Dedicated application instance and database
· Future
Support multiple tenants Support extensibility (custom fields per tenant) Support various deployment architectures
· Dedicated or shared application instances · Dedicated or shared databases
4
So Many Clouds
So Many Clouds
· Infrastructure - IaaS
E.g. Amazon Web Services
· Platform PaaS
E.g. Oracle Public Cloud, Cloud Bees, Google App Engine
· Software SaaS
E.g. SalesForce.com, Google Mail
5
Java Persistence: The Problem Space
Java Persistence: The Problem Space
Customer id: int name: String creditRating: int
Java
JAXB/SDO
... ...
XML
JPA
DBWS
CUST ID NAME C_RATING
Relational
JPA: Java Persistence API JAXB: Java Architecture for XML Binding SDO: Service Data Objects
6
EclipseLink Project
EclipseLink Project
· Object-Relational: Java Persistence API (JPA)
JPA 1.0 part of EJB 3.0 standard (JSR 220) JPA 2.0 standardized in JSR 317 EclipseLink is JPA 2.0 Reference Implementation
· Object-XML: Java Architecture for XML Binding (JAXB)
JAXB 2.2 Certified Implementation
· Object-XML: Service Data Objects
SDO 2.1.1 standardized in JSR 235 EclipseLink is SDO 2.1.1 Reference Implementation
EclipseLink Project
EclipseLink Project
Java SE Java EE OSGi Spring ADF
JPA
MOXy
DBWS
Databases
XML Data
Legacy Systems
8
Multitenant Topologies
Multitenant Topologies
Application
Dedicated
T1
T2 T3
Shared
T1 T2 T3
Dedicated
Database
1 2 T2 3 T3 1 2 3
T1
T1
T2
T3
Shared
1 2 3 1 2 3
Note: Single application deployed to support various MT architectures
9
Multitenant: Dedicated Application Dedicated DB
Multitenant: Dedicated Application Dedicated DB
· Dedicated application Instance
Application instance per tenant
· unique container or application class-loader
1 2 3 T1 T2 T3
Caching supported
· Dedicated database
Unique tables (tablespace/schema/db) per tenant Tenant specific data source required
10
Multitenant: Shared App Dedicated DB
Multitenant: Shared App Dedicated DB
· Shared Application Instance
Application instances handle multiple tenants Caching must isolate by tenant
T1
T2 T3
1
2
3
· Dedicated Database
Common data source
· Unique schema/tablespace per tenant · Common schema with table per tenant · Proxy Authentication
Data source per tenant
11
Shared Database
Shared Database
· @Multitenant
Application's persistence layer manages access Row data includes tenant identifier values Queries augmented to limit results based on current tenant Database vendor independent
T1 T2 T3 1 2 3 T1 T2 T3
1 2 3
· @Multitenant(VPD)
Row data includes tenant identifier values Database provides client limited view of database tables
· Shared solution for all database clients · Native queries (SQL) supported
12
Multitenant Entity Strategies
Multitenant Entity Strategies
· GOAL: support storage of entities from multiple tenants in a single shared schema · @Multitenant Strategies
@Multitenant(SINGLE_TABLE) - default @Multitenant(VPD)
· SINGLE_TABLE + includeCriteria=false · SET_IDENTIFIER(property) & CLEAR_IDENTIFIER · DDL Gen of predicate function and ADD_POLICY
@Multitenant(TABLE_PER_TENANT)
13
In the beginning...
In the beginning...
· Application dedicated for single tenant · All rows available to all queries
@Entity public class Player { PLAYER ID 1 2 VERSION 1 3 F_NAME John Jane L_NAME Doe Doe LEAGUE HTHL OSL
14
DEMO--JPA No Tenancy
DEMO--JPA No Tenancy
Demo
Multitenant: SINGLE_TABLE
Multitenant: SINGLE_TABLE
· Simple configuration: Annotation or XML · Flexible tenant identifier support · EclipseLink augments generated SQL
@Entity @Multitenant @TenantDiscriminatorColumn(name="league-id", columnName="LEAGUE") public class Player { PLAYER ID 1 2 VERSION 1 3 F_NAME John Jane L_NAME Doe Doe LEAGUE HTHL OSL
16
Demo
DEMO--SINGLE TABLE Multitenancy
DEMO--SINGLE TABLE Multitenancy
Multitenant using Oracle VPD
Multitenant using Oracle VPD
· Leverage the Oracle Database
@Entity @Multitenant(VPD) @TenantDiscriminatorColumn(name="league-id", columnName="LEAGUE") public class Player {
PLAYER ID 1 2 VERSION 1 3 F_NAME John Jane L_NAME Doe Doe LEAGUE HTHL OSL
18
Multitenant: TENANT_PER_TABLE
Multitenant: TENANT_PER_TABLE
· Planned Feature
@Entity @Multitenant(TABLE_PER_TENANT) public class Player {
HTHL.PLAYER ID 1 VERSION 1 F_NAME John L_NAME Doe
OSL.PLAYER ID 2 VERSION 3 F_NAME Jane L_NAME Doe
19
Caching & Multitenancy
Caching & Multitenancy
· EntityManagerFactory/Tenant--Shared Cache
Tenant 1 / Thread 1 EntityManager Persistence Context Tenant 1 / Thread 2 EntityManager Tenant 2 Thread EntityManager Persistence Context
...
Persistence Context
Tenant 1-EntityManagerFactory Shared Cache
Tenant 2-EntityManagerFactory Shared Cache
20
Caching & Multitenancy
Caching & Multitenancy
· EntityManager/Tenant--Shared Cache Disabled
Tenant 1 / Thread 1 EntityManager Persistence Context Tenant 1 / Thread N EntityManager Tenant 2 / Thread 1 EntityManager Persistence Context
...
Persistence Context
Tenant 1-EntityManagerFactory
21
Caching & Multitenancy
Caching & Multitenancy
· EntityManagerFactory/Tenant--Shared Cache
Tenant 1 / Thread 1 EntityManager Persistence Context Tenant 1 / Thread 2 EntityManager Tenant 2 Thread EntityManager Persistence Context
...
Persistence Context
Tenant 1-EntityManagerFactory Shared Cache
Tenant 2-EntityManagerFactory Shared Cache
20
MySports Demo
MySports Demo
· Introduced in EclipseLink Indigo (2.3) · Features
@Multitenant
· EMF per tenant (shared cache enabled)
@VirtualAccessMethods (Extensions per Tenant) External Metadata Sources JSF, EJB, JPA Admin: JSF + JAX-RS + JPA
· Wiki
http://wiki.eclipse.org/EclipseLink/Examples/MySports
22
MySports Demo Model
MySports Demo Model
23
Demo
Multi-Tenancy at Runtime
Multi-Tenancy at Runtime
App
Session Scope league-id=1
App Services
JPA EMF
EntityManager EntityMar
<> <>
<>
SELECT * FROM MYS_PLAYER WHERE L_NAME = `Doe' AND LEAGUE = 1
Domain Model Extensions
Domain Model Extensions
Domain Model Extensions
Domain Model Extensions
· Storage and querying of extended properties
Application developer enables extensions in entity Schema created with extension columns/table(s) Application Admin stores extension definitions Application instances made aware of extension definitions Application users make use of extensions
Employee
id firstName lastName
extensions
*
name value
28
Map
Flex Extensions
Flex Extensions
@VirtualAccessMethods public class Player{ ... @Transient private Map attributes;
public T get(String attributeName) { return (T) this.attributes.get(attributeName); } public Object set(String attributeName, Object value) { return this.attributes.put(attributeName, value); }
PLAYER ID 1 2 F_NAME John Jane L_NAME Doe Smith FLEX_1 `R' `NONE' FLEX_2 '22'
Virtual Access Mappings
Virtual Access Mappings
MySports Architecture
MySports Architecture
Users
Admin
Create / Update / Remove Extension Definitions
JSF EJB/JPA EclipseLink
deploy
REST -> <- XML
Admin App JSF/JAX-RS/EJB/JPA EclipseLink
Metadata Repository
Demo
EclipseLink Roadmap
EclipseLink Roadmap
· Implement JPA 2.1 Multitenancy specification · Broaden Multitenancy support for other data storage architectures, e.g. Table per Tenant · Broaden Entity Extensions support for alternate metadata and extended data database architectures · Other EclipseLink Initiatives
JSON Binding--Java/JSON marshall/unmarshall JPA-RS: Expose JPA data services over REST (XML or JSON) Resource Mapping--Declarative REST Resource Model EclipseLink NoSQL--JPA for NoSQL Databases 33 Dynamic Persistence--100% metadata driven
Summary
Summary
· Starting thinking about SaaS/PaaS and your applications · Java EE 7 targeting Cloud deployment · JPA 2.1 to include multitenancy support · Download EclipseLink Indigo (2.3.1)
http://wiki.eclipse.org/EclipseLink/Examples/MySports http://wiki.eclipse.org/EclipseLink/Examples/JPA/Multitenan t/Tutorial
· Provide Feedback, Get Involved!
http://eclipse.org/eclipselink for user forums and lists