The Book entity, located in the dukesbookstore.entity package,
encapsulates the book data stored by Duke’s Bookstore.
The Book entity defines attributes used in the example:
A book ID
The author’s first name
The author’s surname
Whether the book is on sale
The publication year
A description of the book
The number of copies in the inventory
The Book entity also defines a simple named query, findBooks.
Enterprise Beans Used in Duke’s Bookstore
Two enterprise beans located in the dukesbookstore.ejb package provide
the business logic for Duke’s Bookstore.
BookRequestBean is a stateful session bean that contains the
business methods for the application. The methods create, retrieve, and
purchase books, and update the inventory for a book. To retrieve the
books, the getBooks method calls the findBooks named query defined
in the Book entity.
ConfigBean is a singleton session bean used to create the books in
the catalog when the application is initially deployed. It calls the
createBook method defined in BookRequestBean.
Facelets Pages and Managed Beans Used in Duke’s Bookstore
The Duke’s Bookstore application uses Facelets and its templating
features to display the user interface. The Facelets pages interact with
a set of CDI managed beans that act as backing beans, providing the
underlying properties and methods for the user interface. The front page
also interacts with the custom components used by the application.
The application uses the following Facelets pages, which are located in
bookstoreTemplate.xhtml: The template file, which specifies a header
used on every page as well as the style sheet used by all the pages. The
template also retrieves the language set in the web browser.
Uses the LocaleBean managed bean.
index.xhtml: Landing page, which lays out the custom map and area
components using managed beans configured in the faces-config.xml file
and allows the user to select a book and advance to the
bookstore.xhtml: Page that allows the user to obtain details on the
selected book or the featured book, to add either book to the shopping
cart, and to advance to the bookcatalog.xhtml page.
Uses the BookstoreBean managed bean.
bookdetails.xhtml: Page that shows details on a book selected from
bookstore.xhtml or other pages and allows the user to add the book to
the cart and/or advance to the bookcatalog.xhtml page.
Uses the BookDetailsBean managed bean.
bookcatalog.xhtml: Page that displays the books in the catalog and
allows the user to add books to the shopping cart, view the details for
any book, view the shopping cart, empty the shopping cart, or purchase
the books in the shopping cart.
Uses the BookstoreBean, CatalogBean, and ShoppingCart managed
bookshowcart.xhtml: Page that displays the contents of the shopping
cart and allows the user to remove items, view the details for an item,
empty the shopping cart, purchase the books in the shopping cart, or
return to the catalog.
Uses the ShowCartBean and ShoppingCart managed beans.
bookcashier.xhtml: Page that allows the user to purchase books,
specify a shipping option, subscribe to newsletters, or join the Duke
Fan Club with a purchase over a certain amount.
Uses the CashierBean and ShoppingCart managed beans.
bookreceipt.xhtml: Page that confirms the user’s purchase and allows
the user to return to the catalog page to continue shopping.
Uses the CashierBean managed bean.
bookordererror.xhtml: Page rendered by CashierBean if the
bookstore has no more copies of a book that was ordered.
The application uses the following managed beans, which are located in
AbstractBean: Contains utility methods called by other managed
BookDetailsBean: Backing bean for the bookdetails.xhtml page.
Specifies the name details.
BookstoreBean: Backing bean for the bookstore.xhtml page.
Specifies the name store.
CashierBean: Backing bean for the bookcashier.xhtml and
CatalogBean: Backing bean for the bookcatalog.xhtml page.
Specifies the name catalog.
LocaleBean: Managed bean that retrieves the current locale; used on
ShoppingCart: Backing bean used by the bookcashier.xhtml,
bookcatalog.xhtml, and bookshowcart.xhtml pages. Specifies the name
ShoppingCartItem: Contains methods called by ShoppingCart,
CatalogBean, and ShowCartBean.
ShowCartBean: Backing bean for the bookshowcart.xhtml page.
Specifies the name showcart.
Custom Components and Other Custom Objects Used in Duke’s Bookstore
The map and area custom components for Duke’s Bookstore, along with
associated renderer, listener, and model classes, are defined in the
following packages in the
The strings used in the Duke’s Bookstore application are encapsulated
into resource bundles to allow the display of localized strings in
multiple locales. The properties files, located in the
directory, consist of a default file containing English strings and
three additional files for other locales. The files are as follows:
Messages.properties: Default file, containing English strings
Messages_de.properties: File containing German strings
This configuration means that in the Facelets pages, messages are
retrieved using the prefix bundle with the key found in the
Messages_`locale.properties` file, as in the following example from
the index.xhtml page: