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();
 }
}
}