Demo Application Using JSF, JPA, CDI with Jetty

The previous version of the Knappsack Maven Archetypes included archetypes for creating projects using JSF, JPA, CDI and Bean Validation that can run in a servlet container such as Jetty or Tomcat. In order to put it through its paces I decided to create a little test social bookmarking application that lets users create accounts, and when logged in, add bookmarks and tag them. Users that are not logged in can view the bookmarks and filter them by user or tag, and the results are paginated.

The demo application is now included in the latest version of the Knappsack archetypes (1.0.5) which are in the central repository. The GAV information is :


Or you can just create a new application from the command line with :

mvn archetype:generate -DarchetypeGroupId=org.fluttercode.knappsack -DarchetypeArtifactId=jee6-servlet-demo-archetype -DinteractiveMode=false -DarchetypeVersion=1.0.5 -DgroupId=org.application -DartifactId=bookmarxrus -Dpackage=org.application 

This lets you create a new instance of the demo application from the archetype so you can play with it (and break it!).

Alternatively, if you just want to poke around, you can just download the projects maven source from here (Bookmarking Java EE 6 Servlet Demo) , unzip it and use mvn jetty:run to start the app with the embedded Jetty instance and go to http://localhost:8080/bookmarxrus/.

The demo comes with pre-built data and a list of users, tags and URLs to get started with.

Bookmark Application Screenshot

6 thoughts on “Demo Application Using JSF, JPA, CDI with Jetty

  1. Thank you for this application, it is much much better than any other tutorial – just run, play with and improve ; )

  2. Uros Majeric

    great. thanks 4 this demo app. works like a charm…

  3. Excellent example. Thank you.

    Could you please elaborate on the use of DataRepositoryProducer class. Specifically, I was under the impression that you can just use the @PersistenceContext annotation rather than having the creator methods (or is this needed because you are not running this in JBoss so need your own factory)?

    1. I use the producer so I can produce a conversation scoped entity managers. Otherwise you get a request scoped manager.