View Javadoc
1   package org.myorg.jpatickets.ejb;
2   
3   import java.util.ArrayList;
4   import java.util.List;
5   import java.util.Map;
6   
7   import javax.annotation.PostConstruct;
8   import javax.annotation.PreDestroy;
9   import javax.ejb.Stateless;
10  import javax.ejb.TransactionAttribute;
11  import javax.ejb.TransactionAttributeType;
12  import javax.persistence.EntityManager;
13  import javax.persistence.PersistenceContext;
14  
15  import org.myorg.jpatickets.bl.EventMgmt;
16  import org.myorg.jpatickets.bl.EventMgmtImpl;
17  import org.myorg.jpatickets.bl.UnavailableException;
18  import org.myorg.jpatickets.bo.Event;
19  import org.myorg.jpatickets.bo.Seat;
20  import org.myorg.jpatickets.bo.Ticket;
21  import org.myorg.jpatickets.bo.Venue;
22  import org.myorg.jpatickets.dao.EventMgmtDAO;
23  import org.myorg.jpatickets.dao.EventMgmtDAOImpl;
24  import org.myorg.jpatickets.dao.VenueDAOImpl;
25  import org.myorg.jpatickets.dto.EventDTO;
26  import org.slf4j.Logger;
27  import org.slf4j.LoggerFactory;
28  
29  @Stateless
30  public class EventMgmtEJB implements EventMgmtRemote {
31      private static final Logger logger = LoggerFactory.getLogger(EventMgmtEJB.class);
32      
33      //@PersistenceContext(unitName="jpatickets-labex")
34      private EntityManager em;
35      
36      private EventMgmtDAO edao;
37      private EventMgmt eventMgmt;
38      
39      @PostConstruct
40      public void init() {
41          logger.debug("*** EventMgmtEJB:init({}) ***", super.hashCode());
42          
43          edao = new EventMgmtDAOImpl();
44          ((EventMgmtDAOImpl)edao).setEntityManager(em);
45          VenueDAOImpl vdao = new VenueDAOImpl();
46              vdao.setEntityManager(em);
47          eventMgmt = new EventMgmtImpl();
48          ((EventMgmtImpl)eventMgmt).setEventDAO(edao);
49          ((EventMgmtImpl)eventMgmt).setVenueDAO(vdao);
50      }
51      
52      @PreDestroy
53      public void destroy() {
54          logger.debug("*** EventMgmtEJB:destroy({}) ***", super.hashCode()); 
55      }
56      
57  
58      @Override
59      @TransactionAttribute(TransactionAttributeType.REQUIRED)
60      public Event createEvent(Event event, Venue venue) throws UnavailableException {
61          return eventMgmt.createEvent(event, venue);
62      }
63      
64      @Override
65      @TransactionAttribute(TransactionAttributeType.SUPPORTS)
66      public Event getEvent(int id) {
67          logger.debug("getEvent({})", id);
68          return eventMgmt.getEvent(id);
69      }
70      
71      @Override
72      public Event getEventCleansed(int id) {
73          logger.debug("getCleansedEvent({})", id);
74          Event event = getEvent(id);
75          return toCleansed(event);
76      }
77      
78      private Event toCleansed(Event bo) {
79          Event pojo = new Event(bo.getId());
80          pojo.setName(bo.getName());
81          pojo.setStartTime(bo.getStartTime());
82          List<Ticket> tickets = new ArrayList<Ticket>(bo.getTickets().size());
83          for (Ticket t: bo.getTickets()) {
84              toCleansed(t, pojo);
85          }
86          pojo.setTickets(tickets);
87          return pojo;
88      }
89      
90      private Ticket toCleansed(Ticket bo, Event event) {
91          //example cleansing is stopping here for the example
92          Ticket pojo = new Ticket(event, bo.getSeat());
93          pojo.setPrice(bo.getPrice());
94          pojo.setSold(bo.isSold());
95          return pojo;
96      }
97      
98      @Override
99      public Event getEventTouchedSome(int id) {
100         logger.debug("getEventTouchedSome({})", id);
101         Event event = getEvent(id);
102         //touch the ticket collection to load tickets prior to marshaling back
103         event.getTickets().size();
104         return event;
105     }
106     
107     @Override
108     public Event getEventTouchedMore(int id) {
109         logger.debug("getEventTouchedMore({})", id);
110         Event event = getEvent(id);
111         //touch ticket collection and all seats to load both prior to marshaling back
112         event.getTickets().size();
113         event.getVenue().getName();
114         for (Ticket t: event.getTickets()) {
115             t.getSeat().getPosition();
116         }
117         return event;
118     }
119     
120     @Override
121     public Event getEventFetchedSome(int id) {
122         logger.debug("getEventFetchedSome({})", id);
123         Event event = eventMgmt.fetchEventTickets(id);
124         return event;
125     }
126     
127     @Override
128     public Event getEventFetchedMore(int id) {
129         logger.debug("getEventFetchedMore({})", id);
130         Event event = eventMgmt.fetchEventTicketsSeats(id);
131         return event;
132     }
133     
134     @Override
135     public EventDTO getEventLazyDTO(int id) {
136         logger.debug("getEventLazyDTO({})", id);
137         Event event = eventMgmt.getEvent(id);
138         return toEventDTO(event);
139     }
140     
141     private EventDTO toEventDTO(Event event) {
142         EventDTO dto = new EventDTO();
143         dto.setId(event.getId());
144         dto.setEventName(event.getName());
145         dto.setVenueName(event.getVenue().getName());
146         dto.setStartTime(event.getStartTime());
147         dto.setNumTickets(event.getTickets().size());
148         return dto;
149     }
150     
151     @Override
152     public EventDTO getEventFetchedDTO(int eventId) {
153         logger.debug("getEventFetchedDTO({})", eventId);
154         Map<String, Object> dtoData = edao.fetchEventDTOData(eventId);
155         return toEventDTO(dtoData);
156     }
157     
158     private EventDTO toEventDTO(Map<String, Object> dtoData) {
159         EventDTO dto = new EventDTO();
160         Event event = (Event) dtoData.get(EventMgmtDAO.EVENT);
161         String venueName = (String) dtoData.get(EventMgmtDAO.VENUE_NAME);
162         int numTickets = (Integer) dtoData.get(EventMgmtDAO.NUM_TICKETS);
163         dto.setId(event.getId());
164         dto.setEventName(event.getName());
165         dto.setStartTime(event.getStartTime());
166         dto.setVenueName(venueName);
167         dto.setNumTickets(numTickets);
168         return dto;
169     }
170     
171 }