package org.hibernate.auction.command; import org.hibernate.auction.model.*; import org.hibernate.auction.dao.*; import org.hibernate.auction.exceptions.*; import org.hibernate.auction.persistence.HibernateUtil; import org.hibernate.auction.user.UserSession; import java.math.BigDecimal; import java.util.Currency; /** * An example of the EJB command pattern. *

* Some parameters are passed in, the control logic is executed, the * result comes back. * * @author Christian Bauer */ public class BidForItemCommand implements Command { private Long userId; private Long itemId; private BigDecimal bidAmount; private Bid newBid; public BidForItemCommand(Long userId, Long itemId, BigDecimal bidAmount) { this.userId = userId; this.itemId = itemId; this.bidAmount = bidAmount; } public Bid getNewBid() { return newBid; } public void execute() throws CommandException { try { ItemDAO itemDAO = new ItemDAO(); UserDAO userDAO = new UserDAO(); MonetaryAmount newAmount = new MonetaryAmount(bidAmount, (Currency)UserSession.get("currency")); Bid currentMaxBid = itemDAO.getMaxBid(itemId); Bid currentMinBid = itemDAO.getMinBid(itemId); Item item = itemDAO.getItemById(itemId, true); newBid = item.placeBid(userDAO.getUserById(userId, false), newAmount, currentMaxBid, currentMinBid); HibernateUtil.commitTransaction(); } catch (InfrastructureException ex) { // Rethrow as a checked exception HibernateUtil.rollbackTransaction(); throw new CommandException(ex); } catch (BusinessException ex) { // Rethrow as a checked exception throw new CommandException(ex); } finally { HibernateUtil.closeSession(); } } }