package org.books.business; import org.books.dao.OrderDao; import org.books.domain.Address; import org.books.domain.LineItem; import org.books.domain.Order; import org.books.domain.PaymentInfo; import javax.annotation.Resource; import javax.ejb.EJB; import javax.ejb.Stateless; import javax.jms.*; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import java.util.List; @Stateless public class OrderManagerImpl implements OrderManager { @PersistenceContext(unitName = "bookstore") EntityManager entityManager; @Resource ConnectionFactory connectionFactory; @Resource(name = "OrderProcessor") Queue orderQueue; @EJB private OrderDao orderDao; @EJB private PriceCalculator priceCalculator; public void createOrder(List<LineItem> lineItems, Address address, PaymentInfo paymentInfo) throws Exception { double price = priceCalculator.getTotalPrice(lineItems, address, paymentInfo); Order order = new Order(); for (LineItem lineItem : lineItems) { order.getLineItems().add(lineItem); } order.setPrice(price); orderDao.addOrder(order); sendOrder(order.getId()); } public void sendOrder(long orderId) throws JMSException { Connection connection = null; Session session = null; try { connection = connectionFactory.createConnection(); connection.start(); // Create a Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); // Create a MessageProducer from the Session to the Topic or Queue MessageProducer producer = session.createProducer(orderQueue); producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT); // Create a message TextMessage message = session.createTextMessage(Long.toString(orderId)); // Tell the producer to send the message producer.send(message); } finally { // Clean up if (session != null) session.close(); if (connection != null) connection.close(); } } }