JMS performance

Tengo algunos problemas para comprender JMS desde una perspectiva de rendimiento. Tenemos este código muy sencillo en nuestra aplicación:

QueueConnection connection = null;
QueueSession session = null;
QueueSender sender = null;
TextMessage msg = null;

try {
  // The JNDIHelper uses InitialContext to look up things
  QueueConnectionFactory qcf = JNDIHelper.lookupFactory();
  Queue destQueue = JNDIHelper.lookupQueue();

  // These objects are created for every message, which is quite slow
  connection = qcf.createQueueConnection();
  session = connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
  sender = session.createSender(destQueue);

  // This is the actual message
  msg = session.createTextMessage(xmlMsg);
  sender.setTimeToLive(0);
  sender.send(msg);
} 
finally {

  // Close all objects again
  JMSUtilities.safeClose(sender);
  JMSUtilities.safeClose(session);
  JMSUtilities.safeClose(connection);
}

El código es correcto, pero probablemente algunos de los artefactos anteriores podrían reutilizarse para varios mensajes. Estas son nuestras configuraciones:

Utilizamos Oracle Weblogic 10.3.3Weblogic se conecta a IBM MQ 7.0 (el problema también aparece con 6.0) para JMS La lógica anterior se ejecuta mediante un solo subproceso en un servidor de fondo. Sería sencillo mantener algunos objetos QueueConnection, QueueSession, QueueSender) en la memoria ya que no hay concurrencia involucrada.Mis pregunta ¿Qué tipos de objetos se pueden compartir entre varios mensajes? (por supuesto, incluiríamos la recuperación de errores, la restauración de esos objetos compartidos)Cuáles son las mejores prácticas para mejorar el rendimiento?

Respuestas a la pregunta(3)

Su respuesta a la pregunta