Jersey 2 in GlassFish 4 - First Java EE 7 Implementation Now Integrated (TOTD #182)
Posted
by arungupta
on Oracle Blogs
See other posts from Oracle Blogs
or by arungupta
Published on Fri, 6 Jul 2012 06:00:00 +0000
Indexed on
2012/07/06
9:20 UTC
Read the original article
Hit count: 301
/General
The JAX-RS 2.0 specification released their Early Draft 3 recently. One of my earlier blogs explained as the features were first introduced in the very first draft of the JAX-RS 2.0 specification. Last week was another milestone when the first Java EE 7 specification implementation was added to GlassFish 4 builds.
Jakub blogged about Jersey 2 integration in GlassFish 4 builds. Most of the basic functionality is working but EJB, CDI, and Validation are still a TBD. Here is a simple Tip Of The Day (TOTD) sample to get you started with using that functionality.
- Create a Java EE 6-style Maven project
mvn archetype:generate -DarchetypeGroupId=org.codehaus.mojo.archetypes -DarchetypeArtifactId=webapp-javaee6 -DgroupId=example -DartifactId=jersey2-helloworld -DarchetypeVersion=1.5 -DinteractiveMode=false
Note, this is still a Java EE 6 archetype, at least for now.
- Open the project in NetBeans IDE as it makes it much easier to
edit/add the files. Add the following <respositories>
<repositories>
<repository>
<id>snapshot-repository.java.net</id>
<name>Java.net Snapshot Repository for Maven</name>
<url>https://maven.java.net/content/repositories/snapshots/</url>
<layout>default</layout>
</repository>
</repositories>
- Add the following <dependency>s
<dependency>
The complete list of Maven coordinates for Jersey2 are available here. An up-to-date status of Jersey 2 can always be obtained from here.
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>javax.ws.rs-api</artifactId>
<version>2.0-m09</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-client</artifactId>
<version>2.0-m05</version>
<scope>test</scope>
</dependency>
- Here is a simple resource class:
@Path("movies")
This resource publishes a list of movies and is accessible at "movies/list" path with HTTP GET. The project is using the standard JAX-RS APIs.
public class MoviesResource {
@GET
@Path("list")
public List<Movie> getMovies() {
List<Movie> movies = new ArrayList<Movie>();
movies.add(new Movie("Million Dollar Baby", "Hillary Swank"));
movies.add(new Movie("Toy Story", "Buzz Light Year"));
movies.add(new Movie("Hunger Games", "Jennifer Lawrence"));
return movies;
}
}
Of course, you need the trivial "Movie" and the "Application" class as well. They are available in the downloadable project anyway. - Build the project
mvn package
And deploy to GlassFish 4.0 promoted build 43 (download, unzip, and start as "bin/asadmin start-domain") as
asadmin deploy --force=true target/jersey2-helloworld.war
- Add a simple test case by right-clicking on the MoviesResource
class, select "Tools", "Create Tests", and take defaults.
Replace the function "testGetMovies" to
@Test
This test uses the newly defined JAX-RS 2 client APIs to access the RESTful resource.
public void testGetMovies() {
System.out.println("getMovies");
Client client = ClientFactory.newClient();
List<Movie> movieList = client.target("http://localhost:8080/jersey2-helloworld/webresources/movies/list")
.request()
.get(new GenericType<List<Movie>>() {});
assertEquals(3, movieList.size());
}
- Run the test by giving the command "mvn test" and see the
output as
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running example.MoviesResourceTest
getMovies
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.561 sec
Results :
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
GlassFish 4 contains Jersey 2 as the JAX-RS implementation. If
you want to use Jersey 1.1 functionality, then Martin's
blog provide more details on that. All JAX-RS 1.x
functionality will be supported using standard APIs anyway. This
workaround is only required if Jersey 1.x functionality needs to
be accessed.
The complete source code explained in this project can be downloaded
from here.
Here are some pointers to follow
- JAX-RS 2 Specification Early Draft 3
- Latest status on
specification (jax-rs-spec.java.net)
- Latest JAX-RS 2.0 Javadocs
- Latest status on Jersey (Reference Implementation of JAX-RS 2 - jersey.java.net)
- Latest Jersey API Javadocs
- Latest
GlassFish 4.0 Promoted Build
- Follow @gf_jersey
Provide feedback on Jersey 2 to [email protected]
and JAX-RS specification to [email protected].
© Oracle Blogs or respective owner