GlassFish Server Open Source Edition 3.1 - Jersey

Introduction

Jersey related features/tasks mostly associated with GlassFish.

Scope

Feature ID Priority Description Eng Response Owner(s) Estimate (Man Days) Source of Requirement Status / Comments
1 P2 Modularization of Jersey distribution Yes Jakub   Jersey community  
2 P3 Deployment of Jersey OSGi-war bundles Yes Jakub   Jersey community  
3 P3 GlassFish integration - samples embedded-glassfish:run Yes Pavel   Jersey community  
4 P2 Improved CDI and JAX-RS integration Yes Paul   JAX-RS specification  
5 P2 Improved JSON support using Jackson Yes Jakub   Jersey community  
6 P3 Jersey with JRebel Yes Pavel   Jersey community  
7 P2 Improved hypermedia support on client Yes Paul,Team   Jersey community Started
8 P2 Improved hypermedia support on server Yes Paul,Team   Jersey community Started
9 P2 DTrace probes   Team     Add support for Java EE API - javax.ws.*
10 P3 GlassFish integration - testing samples on embedded glassfish Yes Pavel   Jersey community  
11 P3 GlassFish integration - embedded glassfish in jersey test framework Yes Pavel   Jersey community  

Feature Overview

Jersey currently ships a jersey bundle to GF (in addition to other jars) containing a number of jersey modules. This will be changed so that each jersey module is shipped directly and aligns with OSGi support of Jersey in and outside of GlassFish.

Deployment of Jersey applications to GlassFish as an OSGI-bundle will enable multiple versions of Jersey to be installed in isolation. Currently many developers are having issues with running later versions of Jersey to that which is installed in GlassFish. The class loader delegation feature of GlassFish is not sufficient. This feature us not really Jersey specific but Jersey will provide input to requirements and will test deployments.

Jersey currently uses a very old version of the GlassFish embedded API. This needs to be updated to use the latest API for embedded tests and for use with the jersey test framework. Additionally we need to support maven target embedded-glassfish:run in webapp samples (and be sure that correct jersey version will be used) and test samples which use CDI, EJB and Managed beans on embedded glassfish.

Jersey needs to improve it's integration with CDI such that the optional aspects of the JAX-RS spec in this regard are investigated and implemented. Specifically this means providing bindings such @Inject works for JAX-RS/Jersey related injection points.

The JAXB JSON support in Jersey can work for simple cases but developers are struggling to understand the how the JSON relates to the classes and there are many edge cases that are hard to support because of the mismatch between the JSON data model and the XML infoset model that JAXB uses. Jackson is an excellent library that provides a clearer mapping from POJOs to JSON. Jersey is already depending on it for low-level support.

Jersey caches runtime information generated from Java reflection for performance reasons. This does not work so well when Jersey developers utilize JRebel for rapid development. A Jersey/JRebel plugin will solve this. Such a plugin was prototyped over a year ago. This is technically feasible and requires that JRebel cause Jersey to reload (a feature which Jersey already supports).

Hypermedia support for RESTful application is an important area that JAX-RS 1.x left for a future JAX-RS specification. Jersey can provide useful APIs on the client and server that can be input to a future JAX-RS specification. These APIs will be public thus it is important to get these APIs right before being shipped with a stable release of Jersey, hence why these features are closer to the end of the GlassFish 3.1 release schedule. These APIs will be shipped in the experimental area of Jersey and distributed with SNAPSHOTs before becoming part of the stable API.

Design Document

Milestone Schedule

Item # Date/Milestone Feature-ID Description QA/Docs Handover? Status / Comments
1. MS 2 6/21 1 Modularization of Jersey distribution No  
2. MS 2 6/21 2 Deployment of Jersey OSGi-war bundles No  
3. MS 2 6/21 3 Use the GlassFish 3 embedded API No  
4. MS 4 8/16 4 Improved CDI and JAX-RS integration No  
5. MS 4 8/16 5 Improved JSON support using Jackson No  
6. MS 4 8/16 6 Jersey with JRebel No  
7. MS 5 9/13 7 Improved hypermedia support on client No  
8. MS 5 9/13 8 Improved hypermedia support on server No  

Task List

Task Target Milestone Start End Date Owner(s) Feature ID Status / Comments
Modularization of Jersey distribution MS 2 6/21   6/21 See feature 1 Dependency on GlassFish OSGi
Deployment of Jersey OSGi-war bundles MS 2 6/21   6/21 See feature 2 Dependency on GlassFish OSGi
Use the GlassFish 3 embedded API MS 2 6/21   6/21 See feature 2 Dependency on GlassFish Embedded API
Improved CDI and JAX-RS integration investigation MS 2 6/21   6/21 See feature 4 Dependency on Weld
Improved CDI and JAX-RS integration MS 4 8/16   8/16 See feature 4 Dependency on Weld
Improved JSON support using Jackson MS 4 8/16   8/16 See feature 5 Dependency on Jackson
Jersey with JRebel MS 4 8/16   8/16 See feature 5 Dependency on JRebel
Improved hypermedia support on client MS 5 9/13   9/13 See feature 6 No current external dependency
Improved hypermedia support on server MS 5 9/13   9/13 See feature 7 Dependency on javax.el

Dev Tests

References

Email Alias