using nosql with ~jpa, eclipselink and java ee

19
Using NoSQL with ~JPA, EclipseLink and Java EE Reza Rahman Java EE/GlassFish Evangelist [email protected] @reza_rahman

Upload: reza-rahman

Post on 26-Jan-2015

121 views

Category:

Technology


0 download

DESCRIPTION

This session explores how NoSQL solutions like MongoDB, Cassandra, Neo4j, HBase and CouchDB can be used in a Java EE application with or without a JPA centric facade. Although the primary focus is on EclipseLink NoSQL, we will also cover Hibernate OGM, EasyCassandra, Morphia, etc as well as seeing how NoSQL can be used natively via basic CDI injection.

TRANSCRIPT

Page 1: Using NoSQL with ~JPA, EclipseLink and Java EE

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public1

Using NoSQL with ~JPA, EclipseLink and Java EEReza RahmanJava EE/GlassFish [email protected]@reza_rahman

Page 2: Using NoSQL with ~JPA, EclipseLink and Java EE

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public2Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public

Agenda NoSQL Landscape

Using NoSQL with ~JPA

Using NoSQL with CDI

Page 3: Using NoSQL with ~JPA, EclipseLink and Java EE

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public3

NoSQL Landscape

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

Wild, Wild West

Page 4: Using NoSQL with ~JPA, EclipseLink and Java EE

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public4

NoSQL LandscapeAdoption and Trends

Page 5: Using NoSQL with ~JPA, EclipseLink and Java EE

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public5

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

Page 6: Using NoSQL with ~JPA, EclipseLink and Java EE

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public6

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

Page 7: Using NoSQL with ~JPA, EclipseLink and Java EE

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public7

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”)

Page 8: Using NoSQL with ~JPA, EclipseLink and Java EE

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public8

JPA/EclipseLink NoSQL Demo

https://github.com/m-reza-rahman/jpa-nosql-demo

Page 9: Using NoSQL with ~JPA, EclipseLink and Java EE

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public9

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

Page 10: Using NoSQL with ~JPA, EclipseLink and Java EE

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public10

Similar NoSQL Solutions

PlayOrm– NoSQL centric JPA flavored annotations

– Focused on Play framework

– Cassandra, MongoDB, HBase

Mophia– Annotations mirror JPA

– MongoDB specific

Page 11: Using NoSQL with ~JPA, EclipseLink and Java EE

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public11

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

Page 12: Using NoSQL with ~JPA, EclipseLink and Java EE

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public12

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

Page 13: Using NoSQL with ~JPA, EclipseLink and Java EE

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public13

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

Page 14: Using NoSQL with ~JPA, EclipseLink and Java EE

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public14

CDI NoSQL Demo

https://github.com/m-reza-rahman/cdi-nosql-demo

Page 15: Using NoSQL with ~JPA, EclipseLink and Java EE

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public15

Java EE 8 Community Survey

https://java.net/downloads/javaee-spec/JavaEE8_Community_Survey_Results.pdf

https://blogs.oracle.com/ldemichiel/entry/results_from_the_java_ee

Page 16: Using NoSQL with ~JPA, EclipseLink and Java EE

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public16

NoSQL Survey Results

Page 17: Using NoSQL with ~JPA, EclipseLink and Java EE

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public17

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?

Page 18: Using NoSQL with ~JPA, EclipseLink and Java EE

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public18

Learn More

Considerations for Using NoSQL on Your Next Project– http://www.slideshare.net/VeryFatBoy/bcs-2013

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/

Page 19: Using NoSQL with ~JPA, EclipseLink and Java EE

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public19