public synchronized void start() throws JMSException {
    if (!running) {
      rate.reset();
      running = true;
      if (!connectionPerMessage) {
        connection = factory.createConnection();
        connection.start();
        session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        consumer = session.createConsumer(getConsumeDestination());
        producer = session.createProducer(getSendDestination());
        producer.setDeliveryMode(this.deliveryMode);
      }

      Thread t = new Thread(this);
      t.setName(name);
      t.start();
    }
  }