Using NoSQL with ~JPA, EclipseLink and Java EE

Using NoSQL with ~JPA,
EclipseLink and Java EE
Reza Rahman
Java EE/GlassFish Evangelist
[email protected]
@reza_rahman
1
Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Public
 NoSQL Landscape
Agenda
 Using NoSQL with ~JPA
 Using NoSQL with CDI
2
Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Public
NoSQL Landscape
Wild, Wild West
 Defined by non-conformance to established RDMS paradigm
– No SQL/queries, schemaless, weak referential integrity, no JOINs
 Scalability and cost major motivators (ACID vs. BASE)
– No transactions, eventual consistency, distributed nodes
– In the end, may complement and not replace relational databases…
 Extremely divergent, specialized products
 Some taxonomies
– Key/value, document, graph, columnar, etc
 MongoDB, Cassandra, Google BigTable, CouchDB, HBase, Redis,
Neo4j, Oracle NoSQL
3
Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Public
NoSQL Landscape
Adoption and Trends
4
Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Public
The Case for JPA
 There often is a domain model
 Some parts of JPA fit NoSQL quite well*
 Learning each diverging NoSQL product cumbersome, often
unnecessary
 Switching between NoSQL solutions difficult, particularly at various
stages of application development
 “Polyglot Persistence” difficult
 NoSQL APIs generally low level, verbose
5
Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Public
Applying JPA to NoSQL
 JPA domain model concepts apply well to NoSQL
– Entities, Embeddables, ElementCollection, OneToOne, OneToMany,
ManyToOne, Version
 Pure relational concepts may not apply well
– CollectionTable, Column, SecondaryTable,
SequenceGenerator, TableGenerator
 JPA queries can fit relatively well
– Basic finders (by identity, all)
– JPQL—portable query language defined by the spec
– Native query—lets you leverage database specific features
6
Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Public
EclipseLink NoSQL
 Support JPA style access to NoSQL databases
– Leverage non-relational database support for JCA
 Metadata to identify NoSQL entities (e.g., @NoSQL)
 Support JPQL subset for each
– Leverage what’s available
 Initial support for MongoDB and Oracle NoSQL
– More to come (Cassandra, HBase, CouchDB?)
 Support mixing relational and non-relational data in single composite
persistence unit (“polyglot persistence”)
7
Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Public
JPA/EclipseLink NoSQL Demo
https://github.com/m-reza-rahman/jpa-nosql-demo
8
Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Public
Other JPA/NoSQL Solutions
 Hibernate OGM
– Utilizes Hibernate codebase for NoSQL
– MongoDB, Neo4J, CouchDB, Infinispan, Ehcache
– Tries to provide as much of JPA as possible, including queries via
Hibernate Search/Lucene, relational mapping annotations
 DataNucleus
– Persistence layer behind Google App Engine (not JPA compliant)
– MongoDB, HBase, Neo4j
 Kundera
– Cassandra, MongoDB, HBase, Redis, Neo4j, Oracle NoSQL, CouchDB
 Easy-Cassandra
– Cassandra only
9
Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Public
Similar NoSQL Solutions
 PlayOrm
– NoSQL centric JPA flavored annotations
– Focused on Play framework
– Cassandra, MongoDB, HBase
 Mophia
– Annotations mirror JPA
– MongoDB specific
10
Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Public
CDI Overview
 Next-generation dependency injection for Java EE
 Synthesizes best ideas from Seam 2, Guice and Spring
 Many innovative features on its own right
 Focus on loose-coupling, Java-centric type-safety, annotations,
expressiveness and ease-of-use
 Large ecosystem rapidly evolving around CDI
11
Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Public
A Quick Look at CDI
 Basic dependency injection
– @Inject, @Qualifier, @Named, @Stereotype, @Alternative,
@Produces, @Disposes
 Context management
– @Dependent, @RequestScoped, @SessionScoped,
@ConversationScoped, @ApplicationScoped
 Lightweight Events
– Event, @Observes
 Interceptors/Decorators
– @Interceptor, @Decorator
 Portable Extensions SPI
12
Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Public
The Case for CDI
 “Hibernate OGM is not expected to be the Rosetta stone used to
interact with all NoSQL solutions in all use cases”
 No real domain model
 Advanced, highly specialized features
 Unsupported NoSQL solutions
 Existing NoSQL API knowledge
 Most NoSQL APIs POJO based, easy to integrate natively via CDI
13
Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Public
CDI NoSQL Demo
https://github.com/m-reza-rahman/cdi-nosql-demo
14
Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Public
Java EE 8 Community Survey
https://blogs.oracle.com/ldemichiel/entry/results_from_the_java_ee
https://java.net/downloads/javaee-spec/JavaEE8_Community_Survey_Results.pdf
15
Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Public
NoSQL Survey Results
16
Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Public
Summary
 NoSQL getting attention, but still immature and volatile
 Parts of JPA can apply well to NoSQL – many such initiatives including
from Oracle
 Most NoSQL APIs are good enough to integrate directly via CDI
 Too soon to standardize NoSQL in Java EE?
17
Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Public
Learn More
 EclipseLink NoSQL Examples
– http://wiki.eclipse.org/EclipseLink/Examples/JPA/NoSQL
 Hibernate OGM
– http://hibernate.org/ogm/
 DataNucleus
– http://www.datanucleus.org
 Kundera
– https://github.com/impetus-opensource/Kundera/
 Easy-Cassandra
– https://github.com/otaviojava/Easy-Cassandra
 Weld Docs
– http://docs.jboss.org/weld/reference/latest/en-US/html/
18
Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Public
19
Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Public