Message message = routable.getMessage();
Message message = reference.getMessage();
   public Delivery handle(DeliveryObserver observer, Routable routable, Transaction tx)   {      // deliver the message on a different thread than the core thread that brought it here      Delivery delivery = null;      try      {         Message message = routable.getMessage();         try         {            message = JBossMessage.copy((javax.jms.Message)message);         }         catch(JMSException e)         {            // TODO - review this, http://jira.jboss.org/jira/browse/JBMESSAGING-132            String msg = "Cannot make a copy of the message";            log.error(msg, e);            throw new IllegalStateException(msg);         }         if (log.isTraceEnabled()) { log.trace("dereferenced message: " + message); }         boolean accept = this.accept(message);         if (!accept)         {            if (log.isTraceEnabled()) { log.trace("consumer DOES NOT accept the message"); }            return null;         }         if (routable.isRedelivered())         {            if (log.isTraceEnabled())            {               log.trace("Message is redelivered - setting jmsredelivered to true");            }            message.setRedelivered(true);         }                  delivery = new SimpleDelivery(observer, (MessageReference)routable);         deliveries.put(routable.getMessageID(), delivery);         synchronized (waiting)         {            if (started)            {               if (log.isTraceEnabled()) { log.trace("queueing message " + message + " for delivery"); }               threadPool.execute(new DeliveryRunnable(callbackHandler, message));            }            else            {               //The consumer is closed so we store the message for later               //See test ConnectionClosedTest.testCannotReceiveMessageOnClosedConnection               //for why we do this               if (log.isTraceEnabled()) { log.trace("Adding message " + message + " to the waiting list"); }               waiting.addLast(message);            }         }      }      catch(InterruptedException e)      {         log.warn("Interrupted asynchronous delivery", e);      }      return delivery;   }