package org.books.business; import org.books.domain.Order; import javax.annotation.Resource; import javax.ejb.*; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageListener; import javax.jms.TextMessage; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; @MessageDriven public class OrderProcessor implements MessageListener { @PersistenceContext(unitName = "bookstore") EntityManager entityManager; @Resource private TimerService timerService; public void onMessage(Message message) { try { String id = ((TextMessage) message).getText(); Order order = entityManager.find(Order.class, Long.parseLong(id)); order.setStatus(Order.Status.InProgress); //timerService.createTimer(500, id); // 20100102, jb: Timer works, but embedded container is not shut down properly } catch (JMSException e) { throw new EJBException(e); } } @Timeout public void closeOrder(Timer timer) throws EJBException { String msg = (String) timer.getInfo(); Order order = entityManager.find(Order.class, Long.parseLong(msg)); order.setStatus(Order.Status.Closed); } }