20
1 Copyright © 2011, Oracle and/or its affiliates. All rights reserved. Building HTML5 Applications with EclipseLink: JSON, JAX-RS, JPA & JavaScript Shaun Smith [email protected] @shaunMsmith Doug Clarke [email protected] @doug_clarke

Building HTML5 Applications with EclipseLink: JSON, JAX-RS ... · Building HTML5 Applications with EclipseLink: JSON, JAX-RS, JPA & JavaScript Shaun Smith [email protected] @

Embed Size (px)

Citation preview

1 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.

Building HTML5 Applications with EclipseLink:

JSON, JAX-RS, JPA & JavaScript

Shaun Smith

[email protected]

@shaunMsmith

Doug Clarke

[email protected]

@doug_clarke

2 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.

JAXB: Java Architecture for XML Binding

Java Persistence: The Problem Space

CUST

ID NAME C_RATING

Relational

Customer id: int

name: String

creditRating: int

Java

<customer id=“…”>

<name>…</name>

</customer>

XML

JPA: Java Persistence API

JPA

JAXB

{ id=“…”

name =“…”

}

JSON

“JSON-B”

3 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.

Software Evolution

• Computing architecture is constantly evolving:

Mainframe, client/server, web/thin client, mobile/apps, ...

• Current technologies with increasing adoption include:

– Cloud computing

– HTML 5

– NoSQL databases

• Java EE 7 is evolving to address many of these new

requirements

• EclipseLink JPA and JAXB are also evolving!

4 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.

New Features

• JSON Binding

• RESTful JPA – JPA RS

• Dynamic

– Configuration

– Provisioning

• NoSQL Database Support

• Tenant Isolation

5 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.

JSON Binding / EclipseLink “JSON-B”

• Provides Java/JSON binding similar to EclipseLink

JAXB’s Java/XML binding.

• Marshall Java domain model to and from JSON

• Currently no Java standard—EclipseLink interprets

JAXB XML bindings for JSON

• Content-type selectable by setting property on

Marshaller/Unmarshaller

6 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.

JAXB mapped Java

JSON

XML

XML and JSON from JAXB Mappings

7 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.

RESTful JPA

• Provides a service that exposes JPA mapped entities

over REST via JAX-RS

• HTTP message body either XML or JSON

• Client

– HTML 5 with JavaScript (primary focus)

– JavaFX

8 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.

JAX-RS with JPA—High Level Architecture

Java EE Server

JDBC HTTP/S

Client RDBMS

9 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.

JAX-RS with JPA Example – GET Invoice

public class InvoiceService {...

public Invoice read(int id) {

return null;

}

...

10 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.

JAX-RS with JPA Example – GET Invoice

@Stateless

public class InvoiceService {...

public Invoice read(int id) {

return entityManager.find(Invoice.class, id);

}

...

11 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.

JAX-RS with JPA Example – GET Invoice

@Path("/invoice")

@Stateless

public class InvoiceService {...

public Invoice read(int id) {

return entityManager.find(Invoice.class, id);

}

...

12 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.

JAX-RS with JPA Example – GET Invoice

@Path("/invoice")

@Stateless

public class InvoiceService {...

@GET

@Path("{id}")

public Invoice read(@PathParam("id") int id) {

return entityManager.find(Invoice.class, id);

}

...

13 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.

JAX-RS with JPA Example – GET Invoice

@Path("/invoice")

@Stateless

public class InvoiceService {...

@GET

@Path("{id}")

@Produces({"application/xml", "application/json"})

public Invoice read(@PathParam("id") int id) {

return entityManager.find(Invoice.class, id);

}

...

14 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.

JAX-RS with JPA Example – GET Invoice

@Path("/invoice")

@Stateless

public class InvoiceService {...

@GET

@Path("{id}")

@Produces({"application/xml", "application/json"})

public Invoice read(@PathParam("id") int id) {

return entityManager.find(Invoice.class, id);

}

... GET http://[machine]:[port]/[web-context]/invoice/4

15 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.

JAX-RS with JPA

JAX-RS

JPA

Invoice Bean Payment Bean Contract Bean

GET http://.../invoice/4

GET http://.../invoice/4 mapped to bean

Accounting PU Human Resources PU Contracting PU

Bean uses JPA

16 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.

JPA-RS

JPA-RS

JAX-RS

Accounting PU Human Resources PU Contracting PU

...

JPA

GET http://.../MyApp/Accounting/Invoice/...

JPA-RS maps URI http://.../MyApp/Accounting/Invoice/... to Accounting PU and Invoice entity

JAX-RS http://.../MyApp/Accounting/Invoice/... mapped to JPA-RS service

17 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.

REST Resource Mapping

• REST requires URIs for identifiable resources

• Resources not 1:1 with classes

– may be a graph of closely related objects

• Resources are connected via links

• Need a way to define Resource Model that can be

leveraged by JAXB/JSON Binding

19 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.

Resource Model

• Maps Java Object Model to REST Resources

Object Model

Resource

Model

20 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.

EclipseLink Resource Model

• In development

• Resources (sub-graphs of domain

graph) can be marshalled and

unmarshalled (and reconnected)

• Links are being automatically generated

– Currently requires use of JAXB annotations

• Future: simplify metadata declaration of

resources

21 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.

Summary

• Java is evolving—and EclipseLink is evolving too!

– JSON Binding

– JPA-RS

– REST Resource Mapping

– NoSQL

– Tenant Isolation

• EclipseLink is the center of innovation in Java persistence