Category Archives: JSR 311

About the JSR-311 effort

Restlet 1.1 M3 released

It’s just over a month since 1.1 M2 and we have again made tremendous
progress towards our final release.

Main changes:

  • Licensing scheme changed to CDDL 1.0 or LGPL 2.1 or LGPL 3.0
  • New JAX-RS extension implementing the draft JSR-311
  • New OAuth extension as a pluggable authentication scheme
  • New XDB extension providing integration with Oracle embedded JVM
  • SSL support much improved with access to new attributes
  • XmlRepresentation refactored to support SAX and DOM sources
  • Major TransformRepresentation refactoring (config, reuse, SAX)
  • Reference class now enforces the usage of valid URI characters
  • Grizzly HTTP server now support chunked encoding of responses

 

Restlet

Updated dependencies:

  • Spring to version 2.5.2
  • db4o to version 7.2 (adds transparent update)
  • JavaMail to version 1.4.1
  • JAF to version 1.1.1

Direct contributors:

  • Adam Rosien (OAuth)
  • Avi Flax
  • Bruno Harbulot
  • Chuck Mortimore
  • Dan Diephouse
  • Jeroen Goubert
  • Joe Nellis
  • Kevin Conaway
  • Marc Portier
  • Marcelo Ochoa (XDB)
  • Paul J. Lucas
  • Peter Neubauer
  • Rhett Sutphin
  • Rob Heittman
  • Stephan Koops (JAX-RS)
  • Steve Loughran
  • Yuri de Wit

Changes log:
http://www.restlet.org/documentation/1.1/changes

Download links:
http://www.restlet.org/downloads/1.1/restlet-1.1m3.zip
http://www.restlet.org/downloads/1.1/restlet-1.1m3.exe

Maven repositories:
http://maven.restlet.org is updated on the 1st and 15th of each month
http://maven.noelios.com is updated daily with new artifacts

Restlet API and JSR-311 API

Alexis Moussine-Pouchkine, a Java architect at Sun and a fellow at the OSSGTP (Open Source Get Together Paris), from Sun, has a nice post about the launch of Restlet 1.0.

He underlines some good synergy between the Restlet project and the Glassfish project led by Sun, in term of licensing and partnership with the Grizzly NIO framework led by Jean-Fran├žois Arcand.

He also draws a flattering parallel between Restlet and Hibernate projects, especially in the light of the JSR-311 effort to standardize a high-level, annotation-centric API for RESTful Web Services.

As an active member of the expert group for this JSR, I would like to mention that the Restlet API is only one source of inspiration but not a proposal. The initial API proposition was actually made by Sun, based on its SWDP prototype. There were also previous annotation-based initiatives made by third parties.

Actually, as underlined in this previous post, both APIs will end-up being complementary rather than competitors. To clarify the scopes of those various efforts, I have drawn some illustrations based on two axis:

  • the level of abstraction regarding the REST/HTTP semantics, from raw HTTP headers to high-level representation negotiation.
  • the processing flow abstraction, from the raw network socket to the JSR-311 resources context.

Here is the expected positioning of the JSR-311 as implemented over the Servlet AP. Note that the gap between the Servlet API and the JSR-311 will have to be filled by an adapter:

Now, here is the expected positioning of the JSR-311 API as implemented over the Restlet API:

Finally, we also plan to submit a Restlet API 2.0 to the JCP, probably in 2008. The best parallel is between the Restlet API and the Servlet API that we clearly aim to replace in the long term, as an API giving full control on the container and its connectors, fully leveraging NIO API and asynchronous request processing, while providing full support for all REST/HTTP semantics from the ground up. The API also has a unique ability to support client-side applications, without requiring direct usage of APIs such as JDK’s HttpURLConnection or Apache HTTP Client.

[Update 1] The JAX-RS extension for Restlet has been added to release 1.1 M3. See the announcement and the documentation about the extension.

[Update 2] Marc Hadley, JSR-311 spec lead, has blogged about the Restlet implementation of JAX-RS.

JSR 311 approved for development

As reported by Eduardo Pelegri-Llopart, the JSR 311 was approved by the JCP Executive Committee for development. The results of the vote are also available here. Following a request from Apache, the name of the JSR is now “Java API for RESTful Web Services”.

You can check a comprehensive list of posts following the initial announce on my updated blog post. There is a clear interest from the community for such an API. Some voiced concerns about the JCP process, others about the idea of starting with a higher level API before providing a solid lower level API as a foundation. Some don’t want annotations to abstract the supposed complexity of HTTP when others are afraid that the API won’t be simple enough.

In general, people seem to be positive and supportive of the initiative. The expert group now has an important task in its hands. I hope we will be able to work as closely as possible with the rest of the community to gain a constant feed-back and produce a great and widely accepted API!

New JSR to define a high-level REST API for Java

As the Java community is increasingly using REST to develop their Web applications, Sun Microsystems is proposing to specify a high-level REST API for Java. If accepted for development by the JCP Executive Comitee, this JSR#311 will formalize as a set of Java 5 annotations to facilitate the exposition of Java objects as REST resources.

These annotations will provide a high-level REST API that will be supported by lower-level APIs.

The JSR expert group will be led by Marc Hadley and Paul Sandoz from Sun. Marc is the author of WADL (Web Application Description Language), a RESTful alternative to WSDL. As the lead of the Restlet project, I was invited to be part of the initial expert group for this JSR. I am looking forward to work with other experts and with anyone interested to see a better support for REST in Java.

There is one related effort named JRA (Java REST Annotations) that I am aware of. That will be one source of inspiration. Personnally, I’m hoping it will promote a deeper mapping to REST, covering the following requirements:

  • Doesn”t impose any constraint on resource URIs structure.
  • Support dynamic URIs based on the URI Template draft.
  • Support all HTTP methods as well as extensions like in WebDAV.
  • Support all media types and not just XML.
  • Support multiple representations of the same resource.
  • Fully embrace the resource-oriented design paradigm.

[Update 1] Another related effort I would like to mention is Sommer, led by Henry Story, which provides a mapping (via annotations) between Java objects and RDF graphs. RDF means Resource Description Framework and is the core specification of the Semantic Web. It formally describes resources (in the REST sense), their URIs and their relationships.

[Update 2] A related thread was started in the REST discussion list.

[Update 3] More links about the announce:

[Update 4] Interesting insights from Andrew S. Townley (anterior to JSR announcement)

[Update 5] The JAX-RS extension for Restlet has been added to release 1.1 M3. See the announcement and the documentation about the extension.