type=page
status=published
title=Design and Architecture of Duke's Bookstore
next=dukes-bookstore002.html
prev=dukes-bookstore.html
~~~~~~
Design and Architecture of Duke's Bookstore
===========================================

[[GLOAW]]

[[design-and-architecture-of-dukes-bookstore]]
Design and Architecture of Duke's Bookstore
-------------------------------------------

Duke's Bookstore is a simple web application that uses many features of
JavaServer Faces technology, in addition to other Java EE features:

* JavaServer Faces technology, as well as Contexts and Dependency
Injection for Java EE (CDI)

** A set of Facelets pages, along with a template, provides the user
interface to the application.

** CDI managed beans are associated with each of the Facelets pages.

** A custom image map component on the front page allows you to select a
book to enter the store. Each area of the map is represented by a
JavaServer Faces managed bean. Text hyperlinks are also provided for
accessibility.

** Action listeners are registered on the image map and the text links.
These listeners retrieve the ID value for the selected book and store it
in the session map so it can be retrieved by the managed bean for the
next page.

** The `h:dataTable` tag is used to render the book catalog and shopping
cart contents dynamically.

** A custom converter is registered on the credit card field on the
checkout page, `bookcashier.xhtml`, which also uses an `f:validateRegEx`
tag to ensure that the input is correctly formatted.

** A value-change listener is registered on the name field on
`bookcashier.xhtml`. This listener saves the name in a parameter so the
following page, `bookreceipt.xhtml`, can access it.
* Enterprise beans: Local, no-interface-view stateless session bean and
singleton bean
* A Java Persistence API entity

The packages of the Duke's Bookstore application, located in the
tut-install`/examples/case-studies/dukes-bookstore/src/main/java/javaeetutorial/dukesbookstore/`
directory, are as follows:

* `components`: Includes the custom UI component classes, `MapComponent`
and `AreaComponent`
* `converters`: Includes the custom converter class,
`CreditCardConverter`
* `ejb`: Includes two enterprise beans:

** A singleton bean, `ConfigBean`, that initializes the data in the
database

** A stateless session bean, `BookRequestBean`, that contains the
business logic to manage the entity
* `entity`: Includes the `Book` entity class
* `exceptions`: Includes three exception classes
* `listeners`: Includes the event handler and event listener classes
* `model`: Includes a model JavaBeans class
* `renderers`: Includes the custom renderers for the custom UI component
classes
* `web.managedbeans`: Includes the managed beans for the Facelets pages
* `web.messages`: Includes the resource bundle files for localized
messages


