Your First Cup: An Introduction to the Java EE Platform


4.3 Modifying the Enterprise Bean

DukesBirthdayBean is a stateless session bean. Stateless session beans are enterprise beans that do not maintain a conversational state with a client. With stateless session beans, the client makes isolated requests that do not depend on any previous state or requests. If an application requires conversational state, use stateful session beans.

DukesBirthdayBean is a local enterprise bean that uses a no-interface view:

  • A local enterprise bean is visible only within the application in which it is deployed.

  • Enterprise beans with a no-interface view do not need a separate business interface that the enterprise bean class implements. The enterprise bean class is the only coding artifact needed to create a local, no-interface enterprise bean.

DukesBirthdayBean will be packaged within the same WAR file as the Facelets web front end.

4.3.1 Implement a Business Method to DukesBirthdayBean that Gets the Average Age Difference of firstcup-war Users

Add code to a business method to the DukesBirthdayBean session bean to call the findAverageAgeDifferenceOfAllFirstcupUsers named query in FirstcupUser that returns the average age difference of all users.

  1. Expand the Source Packages node, expand the firstcup.ejb node, then double-click the file to open it in the editor window.

  2. Find the business method called getAverageAgeDifference and add the following code in bold by copying and pasting:

        public Double getAverageAgeDifference() {
            Double avgAgeDiff = (Double) 
            logger.log(Level.INFO, "Average age difference is: {0}",  avgAgeDiff);
            return avgAgeDiff;

    The named query in FirstcupUser is called by using the EntityManager's createNamedQuery method. Because this query returns a single number, the getSingleResult method is called on the returned Query object. The query returns a Double.

  3. Right-click in the editor window and select Format.

4.3.2 Implement a Business Method for Calculating the Age Difference Between Duke and the User

Add code to a business method that calculates the difference in age in years between Duke and the user and creates a new FirstcupUser entity.

  1. Find the getAgeDifference business method and add the following code in bold:

        public int getAgeDifference(Date date) {
            int ageDifference;
            Calendar theirBirthday = new GregorianCalendar();
            Calendar dukesBirthday = new GregorianCalendar(1995, Calendar.MAY, 23);
            // Set the Calendar object to the passed-in Date
            // Subtract the user's age from Duke's age
            ageDifference = dukesBirthday.get(Calendar.YEAR)
                    - theirBirthday.get(Calendar.YEAR);
            logger.log(Level.INFO, "Raw ageDifference is: {0}",  ageDifference);
            // Check to see if Duke's birthday occurs before the user's. If so,
            // subtract one from the age difference
            if (dukesBirthday.before(theirBirthday) && (ageDifference> 0)) {
            // Create and store the user's birthday in the database
            FirstcupUser user = new FirstcupUser(date, ageDifference);
            logger.log(Level.INFO, "Final ageDifference is: {0}",  ageDifference);
            return ageDifference;

    This method creates the Calendar objects used to calculate the difference in age between the user and Duke and performs the actual calculation of the difference in age.

    Similar to the DukesAgeResource.getText code, getAgeDifference subtracts Duke's birthday year from the user's birthday year to get a raw age difference. If Duke's birthday falls before the user's, and the raw difference is more than 0, it subtracts one year from the age difference.

    A new FirstcupUser entity is created with the user's birthday and age difference, then stored in the Java DB database by calling the EntityManager's persist method.

    The final age difference is returned as an int.

  2. Right-click in the editor window and select Format.

  3. From the File menu, choose Save.