Hey,
We have a small EJB3 with a method based on timer that sends JMS messages as follows:
@Stateless() public class ScannerBean implements ScannerLocal { @Timeout public void sendMessages(Timer timer) { InitialContext ctx = new InitialContext(); queue = (Queue) ctx.lookup("queue/velo/TasksDefaultQueue"); QueueConnectionFactory factory = (QueueConnectionFactory) ctx.lookup("ConnectionFactory"); connection = factory.createQueueConnection(); session = connection.createQueueSession(false,QueueSession.AUTO_ACKNOWLEDGE); messageProducer = session.createProducer(queue); messageProducer.setDeliveryMode(DeliveryMode.NON_PERSISTENT); BytesMessage bytesMsg = session.createBytesMessage(); bytesMsg.setLongProperty("uniqueId", uniqueId); messageProducer.send(bytesMsg); } }
@MessageDriven(name="TaskExecuterMessageBean", activationConfig = { @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"), @ActivationConfigProperty(propertyName="destinationType", propertyValue="javax.jms.Queue"), @ActivationConfigProperty(propertyName="destination", propertyValue="queue/velo/TasksDefaultQueue") }) public class MDBTaskExecuter implements MessageListener { @EJB public SomeManager someManager; @Resource private MessageDrivenContext context; public void onMessage(Message msg) { long uniqueId = bm.getLongProperty("uniqueId"); try{ someManager.process(uniqueId); }catch(Exception e) { context.setRollbackOnly(); } } }