package org.jboss.seam.example.booking; import java.util.Date; import java.util.HashMap; import java.util.Map; import javax.annotation.PostConstruct; import javax.ejb.Lock; import javax.ejb.LockType; import javax.ejb.Singleton; import org.jboss.seam.Component; import org.jboss.seam.ScopeType; import org.jboss.seam.annotations.Name; import org.jboss.seam.annotations.Observer; import org.jboss.seam.annotations.Scope; import org.jboss.seam.annotations.intercept.BypassInterceptors; import org.jboss.seam.annotations.Startup; @BypassInterceptors @Scope(ScopeType.APPLICATION) @Singleton @Name("recentBookings") @Startup public class RecentBookingsAction { private Map<Long, Date> latestBookingsMap; @Observer("bookingConfirmed") @Lock(LockType.WRITE) public void onBookingConfirmed() { Booking booking = (Booking) Component.getInstance("booking"); latestBookingsMap.put(booking.getHotel().getId(), new Date()); } @Lock(LockType.READ) public Date getMostRecentBookingDate(Long hotelId) { return latestBookingsMap.get(hotelId); } @PostConstruct public void postConstruct() { latestBookingsMap = new HashMap<Long, Date>(); } }