# Bookmark EM Example

This example demonstrates how to use JPA in the backend with EntityManager instance injected from Java EE 6 container. The example is based on bookmark example from the RESTful Web Services book, which was inspired by the http://delicious.com/ web service.

A bookmark web application is presented that is capable of maintaining users and their bookmarks.

## Contents

The example consists of four web resources implemented by the following:

`com.sun.jersey.samples.bookmark_em.resources.UsersResource`
  The users resource that returns a list of users.
`com.sun.jersey.samples.bookmark_em.resources.UserResource`
  The user resource that has userid, username, e-mail and password.
`com.sun.jersey.samples.bookmark_em.resources.BookmarksResource`
  The bookmarks resource that returns a list of bookmarks for actual user resource.
`com.sun.jersey.samples.bookmark_em.resources.BookmarkResource`
  The bookmark resource that has a bookmark uri and a long and short description.

The mapping of the URI path space is presented in the following table:

URI path | Resource class | HTTP methods
--- | --- | ---
/users/ | UsersResource | GET
/users/{userid} | UserResource | GET, PUT (used also for creating new users), DELETE
/users/{userid}/bookmarks | BookmarksResource | GET, POST
/users/{userid}/bookmarks/{bmid} | BookmarkResource | GET, PUT, DELETE

## Running the Example

Bookmark example runs on Glassfish 3.1 application server (http://glassfish.java.net) and needs a running JavaDB (http://www.oracle.com/technetwork/java/javadb/overview/index.html) instance for underlying data (it comes along with GlassFish 3.1).

Presuming, you have installed Glassfish 3.1. `AS_HOME` variable should point to your glassfish installation directory.

#### Building And Starting The Bookmark Service

You then build and run the example by

    mvn package
    $AS_HOME/bin/asadmin start-domain
    $AS_HOME/bin/asadmin start-database
    $AS_HOME/bin/asadmin deploy target/bookmark-em.war

#### Test Client Running

    mvn test -DargLine="-Djersey.test.containerFactory=com.sun.jersey.test.framework.spi.container.external.ExternalTestContainerFactory -DenableLogging -Djersey.test.port=8080" -Ptest

## Links

http://java.net/projects/bpcatalog/sources/svn/content/trunk/ee5/docs/persistence/webonlyapp.html?raw=true