Enterprise Java Development@TOPIC@

Chapter 100. Transactions

100.1. Transaction Examples
100.2. Transaction ACID Properties
100.3. EJB Transaction Scenarios
100.3.1. Scenario: Multiple DB Updates
100.3.2. Scenario: Update Multiple Databases
100.3.3. Scenario: Coordinate JMS with Database Transaction
100.4. Transaction Terms
100.5. JTA and JTS Specifications
100.5.1. Java Transaction API (JTA)
100.5.2. Java Transaction API (JTA) and Java Transaction Service (JTS)
100.6. EJB Transactions
100.6.1. Container-Managed Transactions
100.6.2. Bean-Managed Transactions
100.7. Summary

Unit of work that accesses one more more resources (usually databases)

EJB is primarily a transaction framework/platform for application code

Figure 100.4. Container-Managed Transactions

Container-Managed Transactions
@Stateless

@TransactionManagement(TransactionManagementType.CONTAINER)
public class HotelMgmtEJB implements HotelMgmtRemote, HotelMgmtLocal {
...
    @PersistenceContext(unitName="ejbjpa-hotel")
    private EntityManager em;
    private HotelDAO dao;                                                                                                                                                                                                                                                                                                                                   
    private HotelMgmt hotelMgmt;
     
    @PostConstruct
    public void init() {
        dao = new JPAHotelDAO();
        ((JPAHotelDAO)dao).setEntityManager(em);
        hotelMgmt = new HotelMgmtImpl();
        ((HotelMgmtImpl)hotelMgmt).setHotelDao(dao);
    }
    @Override
    @TransactionAttribute(TransactionAttributeType.SUPPORTS)
    public Room getRoom(int number) {
        return hotelMgmt.getRoom(number);
    }
    
    @Override
    @TransactionAttribute(TransactionAttributeType.REQUIRED)    
    public Guest checkIn(Guest guest, Room room) throws RoomUnavailableExcepton {
        return hotelMgmt.checkIn(guest, room);
    }