コード例 #1
0
  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();
    }
  }