May 22, 2010, 11:40 a.m.
posted by hashspark
Exercise 15.1: EJB InterceptorsThis exercise implements the profiling interceptor shown in Chapter 15. The @javax.interceptor.Interceptors annotation is applied to the TravelAgent EJB's bookPassage( ) method to show method-level interception. Start Up JBossIf you already have JBoss running, there is no reason to restart it. Otherwise, start it up as instructed in Chapter 15. Initialize the DatabaseThe database tables will be created when Exercise 15.1 is deployed to JBoss. If you have problems running this example, shut down JBoss and run the clean.db Ant task. Build and Deploy the Example ProgramsPerform the following steps:
As in the exercises in earlier chapters of this workbook, titan.jar is rebuilt, copied to the JBoss deploy directory, and redeployed by the application server. Examine the CodeThis example extends the command-line-driven Titan Reservation console application in Exercise 11.4 in Workbook 9. The interceptor class we will apply to the TravelAgent EJB is an exact copy of the Profiler interceptor class described in Chapter 15 of the EJB book. We will not cover this code. The TRavelAgentBean class has been modified to apply the Profiler interceptor to the bookPassage( ) method:
package com.titan.travelagent;
import com.titan.processpayment.*;
import com.titan.domain.*;
import javax.ejb.*;
import javax.persistence.*;
import javax.annotation.EJB;
import java.util.Date;
@Stateful
public class TravelAgentBean implements TravelAgentRemote {
...
@Remove
@Interceptors(com.titan.interceptors.Profiler.class)
public TicketDO bookPassage(CreditCardDO card, double price)
throws IncompleteConversationalState {
if (customer == null || cruise == null || cabin == null)
{
throw new IncompleteConversationalState( );
}
try {
Reservation reservation = new Reservation(
customer, cruise, cabin, price, new Date( ));
entityManager.persist(reservation);
processPayment.byCredit(customer, card, price);
TicketDO ticket = new TicketDO(customer, cruise, cabin, price);
return ticket;
} catch(Exception e) {
throw new EJBException(e);
}
}
Run the ApplicationRun the TravelAgentShell application by invoking Shell.bat or the Shell.sh script at the command prompt. Remember to set your JBOSS_HOME and PATH environment variables. Interact with the Titan Cruises reservation system as you did in Exercise 11.4 in Workbook 9: > book 4444444444444444 11/1/06 550.0 Bill Burke has been booked for the Alaskan Cruise cruise on ship Queen Mary. Your accommodations include Queen Cabin 1 a 1 bed cabin on deck level 1. Total charge = 550.0 After you have booked a reservation, look at the JBoss console. You will see that the Profiler interceptor has timed the bookPassage( ) method and output it to the screen: 12:27:29,750 INFO [STDOUT] Method public com.titan.travelagent.TicketDO com.titan.travelagent.TravelAgentBean.bookPassa ge(com.titan.processpayment.CreditCardDO,double) throws com.titan.travelagent.IncompleteConversationalState took 16 (ms) |
- Comment