Your SlideShare is downloading. ×
EclipseLink: Beyond Relational and NoSQL to Polyglot and HTML5
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

EclipseLink: Beyond Relational and NoSQL to Polyglot and HTML5

2,275
views

Published on

The data access requirements of today's Java applications keep expanding and EclipseLink continues to evolve to address these requirements. In this session we'll look at the new features of …

The data access requirements of today's Java applications keep expanding and EclipseLink continues to evolve to address these requirements. In this session we'll look at the new features of EclipseLink that support the construction of modern Java applications interacting with HTML5 clients on the front end and both relational and NoSQL databases on the backend.

With EclipseLink NoSQL it is now easy to read, write, and query Java objects stored in NoSQL databases. But as Martin Fowler described in his blog posting entitled PolyglotPersistence, the persistence needs of applications are evolving from predominantly relational to a mixture of heterogeneous data sources. Fortunately, with EclipseLink it
is possible to mix entities sourced from many types of databases and to navigate relationships between entities persisted in different database technologies!

Technologies on the front end have also been changing and with EclipseLink JPA-RS developers can now expose JPA mapped objects over REST to web clients as either JSON or XML. EclipseLink JPA-RS makes the development of true HATEOS applications easy.

Published in: Technology

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
2,275
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
10
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. EclipseLink: Beyond Relational and NoSQL to Polyglot and HTML5 Shaun Smith shaun.smith@oraclecom 1 Gunnar Wagenknecht gunnar@wagenknecht.org Beyond Relational and NoSQL to Polyglot and HTML5 | © 2013 Oracle and AGETO; Licensed under a Creative Commons Attribution-Share Alike 3.0 Unported License
  • 2. About Us §  Shaun Smith –  Eclipse committer on EclipseLink and related projects –  Oracle TopLink Product Manager –  OO developer since 1987, so I’m old enough to know Smalltalk ;) §  Gunnar Wagenknecht –  CTO @ AGETO –  Committer and contributor @ Eclipse –  Java since 1999; Eclipse since 2001 2 Beyond Relational and NoSQL to Polyglot and HTML5 | © 2013 Oracle and AGETO; Licensed under a Creative Commons Attribution-Share Alike 3.0 Unported License
  • 3. Agenda—Database to Browser (and back again) Browser HTTP / REST Binding Persistence XML/JSON Java Database Persistence Relational/NoSQL Relational DB | NoSQL DB 3 Beyond Relational and NoSQL to Polyglot and HTML5 | © 2013 Oracle and AGETO; Licensed under a Creative Commons Attribution-Share Alike 3.0 Unported License
  • 4. Agenda Browser HTTP / REST Binding Persistence XML/JSON Java Database Persistence Relational/NoSQL Relational DB | NoSQL DB 4 Beyond Relational and NoSQL to Polyglot and HTML5 | © 2013 Oracle and AGETO; Licensed under a Creative Commons Attribution-Share Alike 3.0 Unported License
  • 5. NoSQL Databases §  EclipseLink is best known for relational persistence but… §  NoSQL database are increasingly popular §  No common definition (document, graph, columnar) –  Differing feature sets –  Some offer query language/API—some not §  No standards §  Every database offers a unique API –  Cost in terms of learning –  Zero portability across databases 5 Beyond Relational and NoSQL to Polyglot and HTML5 | © 2013 Oracle and AGETO; Licensed under a Creative Commons Attribution-Share Alike 3.0 Unported License
  • 6. EclipseLink NoSQL §  Support JPA-style access to NoSQL databases –  Leverage non-relational database support for JCA (and JDBC when available) §  Define annotations and XML to identify NoSQL stored entities (e.g., @NoSQL) §  Support JPQL subset for each –  Key principal: leverage what’s available §  Initial support for MongoDB and Oracle NoSQL. §  Support mixing relational and non-relational data in single composite persistence unit (“polyglot persistence”) 6 Beyond Relational and NoSQL to Polyglot and HTML5 | © 2013 Oracle and AGETO; Licensed under a Creative Commons Attribution-Share Alike 3.0 Unported License
  • 7. Applicability of JPA to NoSQL §  Core JPA concepts apply to NoSQL: –  Persistent Entities, Embeddables, ElementCollection, OneToOne, OneToMany, ManyToOne, Version, etc. §  Some concepts apply with some databases: –  JPQL, NamedNativeQuery §  Pure relational concepts don’t apply: –  CollectionTable, Column, SecondaryTable, SequenceGenerator, TableGenerator, etc. 7 Beyond Relational and NoSQL to Polyglot and HTML5 | © 2013 Oracle and AGETO; Licensed under a Creative Commons Attribution-Share Alike 3.0 Unported License
  • 8. Querying NoSQL with JPA §  Two kinds of queries –  JQPL—portable query language defined by the spec –  Native query—lets you leverage database specific features –  Dynamic or static @NamedQuery §  JPQL translated to underlying database query framework. 8 Beyond Relational and NoSQL to Polyglot and HTML5 | © 2013 Oracle and AGETO; Licensed under a Creative Commons Attribution-Share Alike 3.0 Unported License
  • 9. Example MongoDB Mapped Entity 9 Beyond Relational and NoSQL to Polyglot and HTML5 | © 2013 Oracle and AGETO; Licensed under a Creative Commons Attribution-Share Alike 3.0 Unported License
  • 10. MongoDB Query Examples §  JPQL    Select o from Order o where o.totalCost > 1000 Select o from Order o join o.orderLines l where l.cost > :cost §  Native Queries    query = em.createNativeQuery( "db.ORDER.findOne({"_id":"" + oid + ""})", Order.class); Order order = (Order) query.getSingleResult(); 10 Beyond Relational and NoSQL to Polyglot and HTML5 | © 2013 Oracle and AGETO; Licensed under a Creative Commons Attribution-Share Alike 3.0 Unported License
  • 11. Demo EclipseLink NoSQL 11 Beyond Relational and NoSQL to Polyglot and HTML5 | © 2013 Oracle and AGETO; Licensed under a Creative Commons Attribution-Share Alike 3.0 Unported License
  • 12. “…we are gearing up for a shift to polyglot persistence - where any decent sized enterprise will have a variety of different data storage technologies for different kinds of data…we'll be first asking how we want to manipulate the data and only then figuring out what technology is the best bet for it..” Martin Fowler ThoughtWorks 12 Beyond Relational and NoSQL to Polyglot and HTML5 | © 2013 Oracle and AGETO; Licensed under a Creative Commons Attribution-Share Alike 3.0 Unported License
  • 13. Composite Persistence Unit Composite PU Relational PU 13 NoSQL PU Beyond Relational and NoSQL to Polyglot and HTML5 | © 2013 Oracle and AGETO; Licensed under a Creative Commons Attribution-Share Alike 3.0 Unported License
  • 14. Demo Polyglot Persistence 14 Beyond Relational and NoSQL to Polyglot and HTML5 | © 2013 Oracle and AGETO; Licensed under a Creative Commons Attribution-Share Alike 3.0 Unported License
  • 15. Agenda Browser HTTP / REST Binding Persistence XML/JSON Java Database Persistence Relational/NoSQL Relational DB | NoSQL DB 15 Beyond Relational and NoSQL to Polyglot and HTML5 | © 2013 Oracle and AGETO; Licensed under a Creative Commons Attribution-Share Alike 3.0 Unported License
  • 16. Binding Persistence XML and JSON Binding §  EclipseLink implements –  JAXB for Java/XML binding—covert Java to/from XML –  Java/JSON binding—convert Java to/from JSON §  Currently no Java/JSON binding standard –  Java API for JSON Processing (JSR 535) is parsing, not binding §  EclipseLink interprets JAXB XML bindings for JSON –  Content-type selectable by setting property on Marshaller/Unmarshaller 16 Beyond Relational and NoSQL to Polyglot and HTML5 | © 2013 Oracle and AGETO; Licensed under a Creative Commons Attribution-Share Alike 3.0 Unported License
  • 17. XML and JSON from JAXB Mappings { "phone-numbers" : [ { "id" : 2, "num" : "512-555-9999", "type" : "mobile" } ], "address" : { "city" : "New York", "id" : 1, "street" : "Central Park East" }, "firstName" : "Woody", "id" : 1, "lastName" : “Allen" } 17 <?xml version="1.0" encoding="UTF-8"?> <customer> <phone-numbers> <phone-number> <id>2</id> <num>512-555-1234</num> <type>home</type> </phone-number> </phone-numbers> <address> <city>New York</city> <id>1</id> <street>Central Park East</street> </address> <firstName>Bill</firstName> <id>1</id> <lastName>Allen</lastName> </customer> Beyond Relational and NoSQL to Polyglot and HTML5 | © 2013 Oracle and AGETO; Licensed under a Creative Commons Attribution-Share Alike 3.0 Unported License
  • 18. Challenges – Binding JPA Entities to XML/JSON <?xml version="1.0" ?> <employee> <first>Mark</first> <last>Twain</last> <id>1</id> </employee> JAXB JPA •  Bidirectional/Cyclical Relationships •  Composite Keys/Embedded Key Classes •  Byte Code Weaving 18 Beyond Relational and NoSQL to Polyglot and HTML5 | © 2013 Oracle and AGETO; Licensed under a Creative Commons Attribution-Share Alike 3.0 Unported License
  • 19. Bidirectional Relationship @Entity public class Project{ ... @OneToMany(mappedBy=“project") private List<Employee> members; } @Entity public class Employee{ ... @ManyToOne private Project project; } 19 Beyond Relational and NoSQL to Polyglot and HTML5 | © 2013 Oracle and AGETO; Licensed under a Creative Commons Attribution-Share Alike 3.0 Unported License
  • 20. Bidirectional Relationships in JAXB §  JAXB specification does not support bidirectional relationships. One side must be marked @XmlTransient. §  But that loses the relationship! members Employee project 20 Project <?xml version="1.0" ?> <employee> <first>Mark</first> <last>Twain</last> <id>1</id> </employee> Marshall Unmarshall X Employee Project project Beyond Relational and NoSQL to Polyglot and HTML5 | © 2013 Oracle and AGETO; Licensed under a Creative Commons Attribution-Share Alike 3.0 Unported License
  • 21. EclipseLink XmlInverseReference 21 @Entity public class Project{ ... @OneToMany(mappedBy=“project") private List<Employee> members; } @Entity public class Employee{ ... @ManyToOne @XmlInverseReference(mappedBy=“members") private Project project; } Beyond Relational and NoSQL to Polyglot and HTML5 | © 2013 Oracle and AGETO; Licensed under a Creative Commons Attribution-Share Alike 3.0 Unported License
  • 22. EclipseLink XmlInverseReference §  EclipseLink restores relationships on unmarshall! members members Employee Project project Marshall 22 <?xml version="1.0" ?> <employee> <first>Mark</first> <last>Twain</last> <id>1</id> </employee> Employee Project project Unmarshall Beyond Relational and NoSQL to Polyglot and HTML5 | © 2013 Oracle and AGETO; Licensed under a Creative Commons Attribution-Share Alike 3.0 Unported License
  • 23. Demo JAXB/JPA Fidelity JSON Binding 23 Beyond Relational and NoSQL to Polyglot and HTML5 | © 2013 Oracle and AGETO; Licensed under a Creative Commons Attribution-Share Alike 3.0 Unported License
  • 24. Agenda Browser HTTP / REST Binding Persistence XML/JSON Java Database Persistence Relational/NoSQL Relational DB | NoSQL DB 24 Beyond Relational and NoSQL to Polyglot and HTML5 | © 2013 Oracle and AGETO; Licensed under a Creative Commons Attribution-Share Alike 3.0 Unported License
  • 25. JPA-RS Browser HTTP Binding Persistence XML/JSON JAX-RS / JPA-RS Java Database Persistence Relational/NoSQL Relational DB | NoSQL DB 25 Beyond Relational and NoSQL to Polyglot and HTML5 | © 2013 Oracle and AGETO; Licensed under a Creative Commons Attribution-Share Alike 3.0 Unported License
  • 26. JPA-RS GET http://.../persistence/Accounting/Invoice/... JAX-RS http://.../persistence/Accounting/Invoice/... JAX-RS mapped to JPA-RS service JPA-RS JPA-RS maps URI http://.../persistence/Accounting/ Accounting PU Invoice/... to Accounting PU and Invoice entityPU Contracting PU Human Resources ... JPA 26 Beyond Relational and NoSQL to Polyglot and HTML5 | © 2013 Oracle and AGETO; Licensed under a Creative Commons Attribution-Share Alike 3.0 Unported License
  • 27. JPA-RS Features §  Access relational data through REST with JSON or XML §  Provides REST operations for entities in persistence unit (GET, PUT, POST, DELETE) §  Automatic generation of XML and JSON bindings §  Supports invocation of named queries via HTTP §  Server Caching—EclipseLink clustered cache §  Dynamic Persistence also supported –  Entities defined via metadata—no Java classes required –  Enables persistence services for HTML 5/JavaScript applications 27 Beyond Relational and NoSQL to Polyglot and HTML5 | © 2013 Oracle and AGETO; Licensed under a Creative Commons Attribution-Share Alike 3.0 Unported License
  • 28. Resource Model & Links { "firstName": "Frank", "gender": "Male", "id": 1, "lastName": "Smith", "responsibilities": [], "salary": 1, "version": 13, "address": { "_link": { "href": "http://localhost:7001/employee.web-js/persistence/employee/entity/Address/18", "method": "GET", "rel": "self" } }, … 28 Beyond Relational and NoSQL to Polyglot and HTML5 | © 2013 Oracle and AGETO; Licensed under a Creative Commons Attribution-Share Alike 3.0 Unported License
  • 29. Demo EclipseLink JPA-RS 29 Beyond Relational and NoSQL to Polyglot and HTML5 | © 2013 Oracle and AGETO; Licensed under a Creative Commons Attribution-Share Alike 3.0 Unported License
  • 30. Releases & Roadmap 2010 EclipseLink 2.1 Helios •  Query Extensions •  TREAT AS •  FUNC •  Batch IN and EXISTS •  Attribute Group •  Load •  Fetch •  Copy •  Merge •  eclispelinkoxm.xml •  Dynamic MOXy 30 2011 2012 2013 EclipseLink 2.3 Indigo EclipseLink 2.4 Juno EclipseLink 2.5 Kepler •  Tenant Isolation •  JSON Binding •  JPA-RS •  Tenant Isolation •  Tenant per Table/Schema •  ALTER Schema •  NoSQL •  JPA 2.1 •  JPA-RS++ … •  SINGLE_TABLE •  Extensible •  External Metadata •  Multiple DBs •  Data Partitioning Beyond Relational and NoSQL to Polyglot and HTML5 | © 2013 Oracle and AGETO; Licensed under a Creative Commons Attribution-Share Alike 3.0 Unported License
  • 31. Summary §  Java is evolving—and EclipseLink is evolving too! –  JSON Binding –  JAXB/JPA Fidelity –  JPA-RS –  NoSQL –  Polyglot Persistence 31 Beyond Relational and NoSQL to Polyglot and HTML5 | © 2013 Oracle and AGETO; Licensed under a Creative Commons Attribution-Share Alike 3.0 Unported License
  • 32. 32 Beyond Relational and NoSQL to Polyglot and HTML5 | © 2013 Oracle and AGETO; Licensed under a Creative Commons Attribution-Share Alike 3.0 Unported License