gwt cdi jaxrs_hbraun

27
GWT, CDI & JAX-RS “A match made in heaven” Heiko Braun <[email protected] >

Upload: hbraun

Post on 03-Sep-2014

3.447 views

Category:

Technology


0 download

DESCRIPTION

Every non-trivial GWT application requires integration with the server side. While GWT itself ships with the integration capabilities (i.e GWT RPC) it doesn't go beyond that. Developers have to decide how to build the backend to their GWT applications. While freedom of choice is a good thing, it doesn’t always lead to a good decision. In this session we’ll look at two options, JSR-299 [1] and JSR-311 [2], both part of the EE6 specification and see how they interplay with GWT. We'll discuss the use cases and justifications for each technology see how they are applied in practice by looking at some code examples.[1] JSR-299: Java Contexts and Dependency Injection for the Java EE platform (CDI) is the new Java standard for dependency injection and contextual lifecycle management.[2] JSR-311: A that specification defines a set of Java APIs for the development of Web services built according to the Representational State Transfer[1] (REST) architectural style.

TRANSCRIPT

Page 1: Gwt cdi jaxrs_hbraun

GWT, CDI & JAX-RS“A match made in heaven”

Heiko Braun <[email protected]>

Page 2: Gwt cdi jaxrs_hbraun

About me

• Heiko Braun

• Senior Software Engineer JBoss / Red Hat

• 4 years JBoss, 12 years industry

• Focus on SOA, BPM, GWT

• Contributor: JBossWS, jBPM, Riftsaw, Errai, SAM, Savarra

> http://jboss.org

Page 3: Gwt cdi jaxrs_hbraun

Topics

• GWT ecosystem

• Integrating with CDI

• When to use JAX-RPC

Page 4: Gwt cdi jaxrs_hbraun

GWT ecosystem

Page 5: Gwt cdi jaxrs_hbraun

GWT: Strong client side

• GWT SDK: Tools & API to build Ajax clients & frameworks

• Integration capabilities:- GWT RPC- XHR (Request Builder)

• Data formats: JSON, XML

• Rich set of widget libraries: - Mosaic, Smart GWT, etc

Page 6: Gwt cdi jaxrs_hbraun

GWT: Weak server side

• Service implementation choice:- rely on GWT RPC- or handle the low level protocol manually

• Existing domain & component model?- Adapters, DTO’s, parallel hierarchy, etc- TX, Security, etc

• A lot of boilerplate needs to be written

Page 7: Gwt cdi jaxrs_hbraun

Backend implementation options

Page 8: Gwt cdi jaxrs_hbraun

Java EE choices

• CDI: Context and dependency injection for the EE platform(http://jcp.org/en/jsr/summary?id=299)

• Java API for RESTful web services(http://jcp.org/en/jsr/detail?id=311)

• Both part of EE 6

Page 9: Gwt cdi jaxrs_hbraun

Relation to Errai

• CDI integration build on Errai(http://jboss.org/errai)

• Integration is actually an extension to Errai and vice versa

• Knowledge about Errai Message Bus helpful,but not mandatory

Page 10: Gwt cdi jaxrs_hbraun

GWT & CDI

Page 11: Gwt cdi jaxrs_hbraun

GWT & CDI goals

• Similar to GWT-RPC:

• re-use domain model

• transparent wire protocol (serialization)

• In addition to GWT-RPC:

• Bypass the servlet tier (merely transport)

• Deep integration with EE component model

• Richer programming model & reduction of boiler plate

Page 12: Gwt cdi jaxrs_hbraun

CDI Concepts

• Portable Extensions

• Integration point when container bootstraps

• Create beans, annotation processing, meta data modifications

• Scope & Lifecycle

• ApplicationScoped, RequestScoped, ConversationScoped

• Bean context & reference

• Lookup and instance (reference) creation

12

Page 13: Gwt cdi jaxrs_hbraun

GWT & CDI Samples

Page 14: Gwt cdi jaxrs_hbraun

Using Pub/Sub

• Most low level use cases(Errai Bus, Pub/Sub)

• Similar to MessageDriven Bean(actual maps to it)

• Service implementation fully managed by CDI container

• Message Bus instance injected

CDI Component

GWT Client

14

Page 15: Gwt cdi jaxrs_hbraun

Exposing RPC endpoints

• Exposes a typed interface

• Similar to EJB Session beans(maps to it)

• RPC style, type safe client API

CDI Component

Remote interface

GWT Client

15

Page 16: Gwt cdi jaxrs_hbraun

Working with CDI events

• Bi-directional event exchange

• Discriminate on:- Event Type- Qualifier Annotations

• Exposes high level CDI client API

• Integrate with default and custom CDI events

CDI Component

GWT Client

16

Page 17: Gwt cdi jaxrs_hbraun

When to integrate with CDI

• Benefits of Java EE 6 and GWT as an alternative view layer technology

• Concise Java component model

• Tool chain: GWT, EJB, CDI, JPA, JCA, JMS

17

Page 18: Gwt cdi jaxrs_hbraun

GWT & JAX-RPC

Page 19: Gwt cdi jaxrs_hbraun

GWT & JAX-RPC goals

• RESTful web services:- RESTful API: open to non-java clients- Intermediaries: proxies, gateways, firewalls- [...] (See other Jazoon talks on this topic)

• Expose low level protocol with a decent API

• Directly expose XML, HTML from other resources- BIRT reporting (mashup, iframe)- Use of XML documents

• Integrate with XHR (RequestBuilder)

• Reuse domain model (serialization)

Page 20: Gwt cdi jaxrs_hbraun

JAX-RPC Concepts@Path("/customerservice/")@Produces("application/xml")public class CustomerService {

@GET @Path("/customers/{id}") @Produces("application/json") public Customer getCustomer(@PathParam("id") String id) { ...... }

@PUT @Path("/customers/{id}") @Consumes("application/xml") public Response updateCustomer(@PathParam("id") Long id, Customer customer) { ...... }

@POST @Path("/customers") public Response addCustomer(Customer customer) { ...... }

@DELETE @Path("/customers/{id}/") public Response deleteCustomer(@PathParam("id") String id) { ...... }}

Page 21: Gwt cdi jaxrs_hbraun

GWT & JAX-RPC samples

Page 22: Gwt cdi jaxrs_hbraun

Request a JAX-RPC resource

GWT Client

Server Resource

Page 23: Gwt cdi jaxrs_hbraun

Conclusion

• CDI integration probably most reasonable choice for within EE 6 environments

• Integration & boilerplate missing: Errai [1] to the rescue

• JAX-RPC is more open, but very low level. Still better then writing your own servlet code

• Remember: You can mix and match JAX-RPC and CDI within the same components (at least on JBoss 6)

[1] http://anonsvn.jboss.org/repos/errai/projects/weld-integration/trunk/

Page 24: Gwt cdi jaxrs_hbraun

Q&A

> http://jboss.org/errai> http://errai-blog.blogspot.com/

Page 25: Gwt cdi jaxrs_hbraun

Appendix A: Errai Message Bus

Page 26: Gwt cdi jaxrs_hbraun

Errai Basics• Backbone to application

design

• Federated architecture

• Asynchronous & bi-directional

• Supports POJO serialization

• Common shared API

• Supports OpenHUB spec

• HTTP + NIO

Page 27: Gwt cdi jaxrs_hbraun

Errai API

Publisher

Subscriber