The Java EE 7 Tutorial
58.2 Main Interface
The main interface allows students and staff to check students in and out, and record when students are outside at the playground.
58.2.1 Java Persistence API Entities Used in the Main Interface
The entities used in the main interface encapsulate data stored and manipulated by Duke's Tutoring, and are located in the
dukestutoring.entity package in the
Person entity defines attributes common to students and guardians tracked by the application. These attributes are the person's name and contact information, including phone numbers and email address. The phone number and email address attributes have Bean Validation annotations to ensure that the submitted data is well-formed. The email attribute uses a custom validation class,
Person entity has two subclasses,
Guardian. For additional data common to all people, the
PersonDetails entity is used to store attributes like pictures and the person's birthday, which aren't included in the
Person entity for performance reasons.
Student entity stores attributes specific to the students who come to tutoring. This includes information like the student's grade level and school. The
Guardian entity's attributes are specific to the parents or guardians of a
Student. Students and guardians have a many-to-many relationship. That is, a student may have a one or more guardians, and a guardian may have one or more students.
Address entity represents a mailing address, and is associated with
Person entities. Addresses and people have a many-to-one relationship. That is, one person may have many addresses.
TutoringSession entity represents a particular day at the tutoring center. A particular tutoring session tracks which students attended that day, and which students went to the park. Associated with
TutoringSession is the
StatusEntry entity, which logs when a student's status changes. Students' status changes when they check in to a tutoring session, when they go to the park, and when they check out. The status entry allows the tutoring center staff to track exactly which students attended a tutoring session, when they checked in and out, which students went to the park while they were at the tutoring center, and when they went to and came back from the park.
For information on creating Java Persistence API entities, see Chapter 37, "Introduction to the Java Persistence API." For information on validating entity data, see Validating Persistent Fields and Properties and Chapter 22, "Bean Validation: Advanced Topics."
58.2.2 Enterprise Beans Used in the Main Interface
The enterprise beans used in the main interface provide the business logic for Duke's Tutoring, and are located in the
dukestutoring.ejb package in the
ConfigBean is singleton session bean used to create the default students when the application is initially deployed, and to create an automatic EJB timer that creates tutoring session entities every weekday.
RequestBean is a stateless session bean containing the business methods for the main interface. Students or staff can check students in and out and track when they go to and come back from the park. The bean also has business methods for retrieving lists of students. The business methods in
RequestBean use strongly-typed Criteria API queries to retrieve data from the database.
RequestBean also injects a CDI event instance,
StatusEvent. This event is fired from the business methods when the status of a student changes.
For information on creating and using enterprise beans, see Enterprise Beans. For information on creating strongly-typed Criteria API queries, see Chapter 40, "Using the Criteria API to Create Queries.". For information on CDI events, see Section 25.5, "Using Events in CDI Applications".
58.2.3 WebSocket Endpoint Used in the Main Interface
javaeetutorial.dukestutoring.web.websocket.StatusEndpoint class is a WebSocket server endpoint that returns students and their status to client endpoints. The
StatusEndpoint.updateStatus method is a CDI observer method for the
StatusEvent event. When a student's status changes in the main interface, a
StatusEvent is fired. The
updateStatus obverver method is called by the container, and pushes out the status change to all the client endpoints registered with
58.2.4 Facelets Files Used in the Main Interface
The Duke's Tutoring application uses Facelets to display the user interface, and makes extensive use of the templating features of Facelets. Facelets is the default display technology for JavaServer Faces, and consists of XHTML files located in the tut-install
The following Facelets files are used in the main interface:
Template file for the main interface
Error file if something goes wrong
Landing page for the main interface
Page showing who is currently at the park
Page showing who is currently in today's tutoring session
Page showing the detailed status entry log for today's session
A composite component for a table displaying all active students
A composite component for a table displaying all students in today's session
A composite component for a table displaying all students currently at the park
XHTML fragment for the main interface's navigation bar
XHTML fragment for the main interface's footer
For information on using Facelets, see Chapter 8, "Introduction to Facelets.".
58.2.5 Helper Classes Used in the Main Interface
The following helper classes, found in the
dukestutoring.util package, are used in the main interface:
A class that provides a method to strip the unnecessary time data from
A custom Bean Validation annotation class for validating email addresses in the
An enumerated type defining the different statuses that a student can have. Possible values are
StatusTypeis used throughout the application, including in the
StatusEntryentity, and throughout the main interface.
StatusTypealso defines a
toStringmethod that returns a localized translation of the status based on the locale.
The following helper classes, found in the
dukestutoring.web.util package, are used in the JavaServer Faces application:
A parent class to
GuardianConverterthat defines a cache to store the entity classes when converting the entities for use in JavaServer Faces user-interface components. The cache helps increase performance. The cache is stored in the JavaServer Faces context.
A JavaServer Faces converter for the
Studententity class. This class contains methods to convert
Studentinstances to strings and back again, so they can be used in the user-interface components of the application.
StudentConverter, this class is a converter for the
58.2.6 Properties Files
The strings used in the main interface are encapsulated into resource bundles to allow the display of localized strings in multiple locales. Each of the properties files has locale-specific files appended with locale codes, containing the translated strings for each locale. For example,
Messages_es.properties contains the localized strings for Spanish locales.
dukestutoring.util package in the
dukes-tutoring-common project has the following resource bundle:
Strings for each of the status types defined in the
StatusTypeenumerated type for the default locale. Each supported locale has a property file of the form
.propertiescontaining the localized strings. For example, the strings for Spanish-speaking locales are located in
dukes-tutoring-war project has the following resource bundles:
Strings for the default locale used by the Bean Validation runtime to display validation messages. This file must be named
ValidationMessages.propertiesand located in the default package as required by the Bean Validation specification. Each supported locale has a property file of the form
.propertiescontaining the localized strings. For example, the strings for German-speaking locales are located in
Strings for the default locale for the main and administration Facelets interface. Each supported locale has a property file of the form
.propertiescontaining the localized strings. For example, the strings for simplified Chinese-speaking locales are located in
For information on localizing web applications, see Registering Application Messages.
58.2.7 Deployment Descriptors Used in Duke's Tutoring
The following deployment descriptors in the
dukes-tutoring-war project are used in Duke's Tutoring:
An empty deployment descriptor file used to enable the CDI runtime
The JavaServer Faces configuration file
The GlassFish-specific configuration file
The web application configuration file
The following deployment descriptor in the
dukes-tutoring-common project is used in Duke's Tutoring:
The Java Persistence API configuration file
No enterprise bean deployment descriptor is used in Duke's Tutoring. Annotations in the enterprise bean class files are used for the configuration of enterprise beans in this application.