public void run() throws Exception { EntityManagerFactory emf = PersistenceManager.getInstance().getEntityManagerFactory(); EntityManager em = emf.createEntityManager(); setupMessageListener(); ETask task; try { while (true) { ObjectMessage msg; TaskMessage tm; Message mm; System.out.println("Waiting for message..."); mm = receiver.receive(); System.out.println("Message received"); if (mm instanceof ObjectMessage) { msg = (ObjectMessage) mm; tm = (TaskMessage) msg.getObject(); try { task = (ETask) em.createNamedQuery("ETask.findById") .setParameter("id", tm.getTaskId()) .setHint("toplink.refresh", true) .getSingleResult(); if (!task.getStatus().equals(ETask.statusSysError)) { processTask(task, msg, em); } else { System.out.println("Task marked as broken, omitting."); } } catch (NoResultException e) { System.out.println("Task has been deleted"); } } mm.acknowledge(); } } finally { closeReceiver(); PersistenceManager.getInstance().closeEntityManagerFactory(); } }