Creación de destinos en una aplicación JMS

En lugar de recuperar destinos como objetos administrados desde un espacio de nombres JNDI ( Java Naming and Directory Interface), una aplicación JMS puede utilizar una sesión para crear destinos dinámicamente en tiempo de ejecución. Una aplicación puede utilizar un identificador universal de recursos (URI) para identificar una cola o un tema de IBM® MQ y, opcionalmente, para especificar una o más propiedades de un objeto Queue o Topic.

Utilización de una sesión para crear objetos Queue

Para crear un objeto Queue, una aplicación puede utilizar el método createQueue() de un objeto Session, tal como se muestra en el ejemplo siguiente:
Session session;
.
Queue q1 = session.createQueue("Q1");
Este código crea un objeto Queue con los valores predeterminados para todas las propiedades. El objeto representa una cola IBM MQ denominada Q1 que pertenece al gestor de colas local. Esta cola puede ser una cola local, una cola de alias o una definición de cola remota.
El método createQueue() también acepta un URI de cola como parámetro. Un URI de cola es una serie que especifica el nombre de una cola IBM MQ y, opcionalmente, el nombre del gestor de colas propietario de la cola y una o más propiedades del objeto Queue. La sentencia siguiente contiene un ejemplo de un URI de cola:
Queue q2 = session.createQueue("queue://QM2/Q2?persistence=2&priority=5");
El objeto Queue creado por esta sentencia representa una cola IBM MQ denominada Q2 que es propiedad de un gestor de colas denominado QM2, y todos los mensajes enviados a este destino son persistentes y tienen una prioridad de 5. El gestor de colas identificado de esta manera puede ser el gestor de colas local o un gestor de colas remoto. Si es un gestor de colas remoto, IBM MQ debe estar configurado para que, cuando la aplicación envíe un mensaje a este destino, WebSphere MQ pueda direccionar el mensaje del gestor de colas local al gestor de colas QM2. Para obtener más información sobre los URI, consulte Identificadores uniformes de recursos (URI).

Observe que el parámetro en el método createQueue() contiene información específica del proveedor. Por consiguiente, si se utiliza el método createQueue() para crear un objeto Queue en lugar de recuperar un objeto Queue como un objeto administrado desde un espacio de nombres JNDI, resultado podría ser que la aplicación fuera menos portable.

Una aplicación puede crear un objeto TemporaryQueue utilizando el método createTemporaryQueue() de un objeto Session, tal como se muestra en el ejemplo siguiente:
TemporaryQueue q3 = session.createTemporaryQueue();
Aunque se utiliza una sesión para crear una cola temporal, el ámbito de una cola temporal es la conexión que se ha utilizado para crear la sesión. Cualquiera de las sesiones de la conexión puede crear productores y consumidores de mensajes para la cola temporal. La cola temporal permanece hasta que la conexión finalice o la aplicación suprima explícitamente la cola temporal utilizando el método TemporaryQueue.delete(), lo que suceda antes.

Cuando una aplicación crea una cola temporal, IBM MQ classes for JMS crea una cola dinámica en el gestor de colas al que está conectada la aplicación. La propiedad TEMPMODEL de la fábrica de conexiones especifica el nombre de la cola de modelos que se utiliza para crear la cola dinámica y la propiedad TEMPQPREFIX de la fábrica de conexiones especifica el prefijo que se utiliza para formar el nombre de la cola dinámica.

Utilización de una sesión para crear objetos Topic

Para crear un objeto Topic, una aplicación puede utilizar el método createTopic() de un objeto Session, tal como se muestra en el ejemplo siguiente:
Session session;
.
Topic t1 = session.createTopic("Sport/Football/Results");
Este código crea un objeto Topic con los valores predeterminados para todas las propiedades. El objeto representa un tema llamado Sport/Football/Results.
El método createTopic() también acepta un URI de tema como parámetro. Un URI de tema es una serie que especifica el nombre de un tema y, opcionalmente, una o más propiedades del objeto Topic. El código siguiente contiene un ejemplo de URI de tema:
String uri = "topic://Sport/Tennis/Results?persistence=1&priority=0";
Topic t2 = session.createTopic(uri);
El objeto Topic creado por este código representa un tema llamado Sport/Tennis/Results, y todos los mensajes enviados a este destino no son persistentes y tienen una prioridad de 0. Para obtener más información sobre los URI de tema, consulte Identificadores uniformes de recursos (URI).

Observe que el parámetro del método createTopic() contiene información específica del proveedor. Por consiguiente, si se utiliza el método createTopic() para crear un objeto Topic en lugar de recuperar un objeto Topic como un objeto administrado desde un espacio de nombres JNDI, el resultado podría ser que la aplicación fuera menos portable.

Una aplicación puede crear un objeto TemporaryTopic utilizando el método createTemporaryTopic() de un objeto Session, tal como se muestra en el ejemplo siguiente:
TemporaryTopic t3 = session.createTemporaryTopic();
Aunque se utiliza una sesión para crear un tema temporal, el ámbito de un tema temporal es la conexión que se ha utilizado para crear la sesión. Cualquiera de las sesiones de la conexión puede crear productores y consumidores de mensajes para el tema temporal. El tema temporal permanece hasta que la conexión finalice o la aplicación suprima explícitamente el tema temporal utilizando el método TemporaryTopic.delete(), lo que suceda antes.

Cuando una aplicación crea un tema temporal, IBM MQ classes for JMS crea un tema con un nombre que comienza con los caracteres TEMP/tempTopicPrefix, donde tempTopicPrefix es el valor de la propiedad TEMPTOPICPREFIX de la fábrica de conexiones.

Identificadores uniformes de recursos (URI)

Un URI de cola es una serie que especifica el nombre de una cola IBM MQ y, opcionalmente, el nombre del gestor de colas propietario de la cola y una o más propiedades del objeto Queue creado por la aplicación. Un URI de tema es una serie que especifica el nombre de un tema y, opcionalmente, una o más propiedades del objeto Topic creado por la aplicación.

Un URI de cola tiene el formato siguiente:
queue://[ qMgrName ]/qName [? propertyName1 = propertyValue1
& propertyName2 = propertyValue2
&...]
Un URI de tema tiene el formato siguiente:
topic://topicName [? propertyName1 = propertyValue1
& propertyName2 = propertyValue2
&...]
Las variables con formatos tienen los significados siguientes:
qMgrName
Nombre del gestor de colas que es propietario de la cola identificada por el URI.

El gestor de colas puede ser el gestor de colas local o un gestor de colas remoto. Si es un gestor de colas remoto, IBM MQ debe estar configurado para que, cuando una aplicación envíe un mensaje a la cola, WebSphere MQ pueda direccionar el mensaje desde el gestor de colas local al gestor de colas remoto.

Si no se especifica ningún nombre, se presupone que es el gestor de colas local.

qName
El nombre de la cola IBM MQ .

La cola puede ser una cola local, una cola alias o una definición de cola remota.

Para ver las reglas para crear nombres de cola, consulte Reglas para nombrar objetos de IBM MQ.

topicName
El nombre del tema.

Para ver las reglas para crear nombres de tema, consulte Reglas para nombrar objetos de IBM MQ. Evite utilizar los caracteres comodín +, #, * y ? en nombres de temas. Los nombres de tema que contengan esos caracteres pueden producir resultados inesperados cuando un usuario se suscribe al tema. Consulte Combinación de series de tema.

propertyName1, propertyName2, ...
Los nombres de las propiedades del objeto Queue o Topic creado por la aplicación. La Tabla 1 lista los nombres de propiedad válidos que se pueden utilizar en un URI.

Si no se especifica ninguna propiedad, el objeto Queue o Topic tiene los valores predeterminados para todas las propiedades.

propertyValue1, propertyValue2, ...
Los valores de las propiedades del objeto Queue o Topic creado por la aplicación. La Tabla 1 lista los valores de propiedad válidos que se pueden utilizar en un URI.
Los corchetes ([]) denotan un componente opcional, y los puntos suspensivos (...) significan que la lista de pares nombre-valor de la propiedad, si está presente, puede contener uno o más pares nombre-valor.
La Tabla 1 lista los nombres de propiedad válidos y los valores válidos que se pueden utilizar en los URI de cola y tema. Aunque la herramienta de administración de IBM MQ JMS utiliza constantes simbólicas para los valores de las propiedades, los URI no pueden contener constantes simbólicas.
Tabla 1. Nombres de propiedad y valores válidos para utilizar en los URI de cola y de tema
Nombre de propiedad Descripción Valores válidos
CCSID Cómo se representan los datos de caracteres en el cuerpo de un mensaje cuando IBM MQ classes for JMS reenvía el mensaje al destino
  • Cualquier identificador de juego de caracteres codificado soportado por IBM MQ.
codificación Cómo se representan los datos numéricos en el cuerpo de un mensaje cuando IBM MQ classes for JMS reenvía el mensaje al destino
  • Cualquier valor válido para el campo Codificación en un descriptor de mensaje IBM MQ .
caducidad Tiempo de vida de los mensajes enviados al destino
  • -2 - Tal como se ha especificado en la llamada send() o, en ausencia de esto, el tiempo de vida predeterminado del productor de mensajes.
  • 0 - Un mensaje enviado al destino no caduca nunca
  • Un entero positivo que especifica el tiempo de vida en milisegundos.
multicast Valor de multidifusión para un tema cuando se utiliza una conexión en tiempo real con un intermediario La lista siguiente contiene los valores válidos. Asociado con cada valor está el valor correspondiente de la propiedad MULTICAST tal como se utiliza en la herramienta de administración de IBM MQ JMS . Para obtener una descripción de la propiedad MULTICAST y sus valores válidos, consulte Propiedades de objetos IBM MQ classes for JMS.
  • -1 - ASCF
  • 0 - DISABLED
  • 3 - NOTR
  • 5 - RELIABLE
  • 7 - ENABLED
persistence La persistencia de los mensajes enviados al destino
  • -2 - Tal como se ha especificado en la llamada send() o si no se ha especificado en la llamada send(), la persistencia predeterminada del productor de mensajes.
  • --1 - Según lo especificado por el atributo DefPersistence de la IBM MQ cola o tema.
  • 1 - No persistente
  • 2 - Persistente
  • 3-Equivalente al valor HIGH para la propiedad PERSISTENCE tal como se utiliza en la herramienta de administración de IBM MQ JMS . Para una explicación de este valor, véase Mensajes persistentes JMS.
priority La prioridad de los mensajes enviados al destino
  • -2 - Tal como se ha especificado en la llamada send() o si no se ha especificado en la llamada send(), la prioridad predeterminada del productor de mensajes.
  • --1 - Según lo especificado por el atributo DefPriority de la IBM MQ cola o tema.
  • Un entero comprendido dentro del rango 0-9 que especifica la prioridad de los mensajes enviados al destino.
targetClient Si los mensajes enviados al destino contienen una cabecera MQRFH2
  • 0 - Los mensajes contienen una cabecera MQRFH2.
  • 1 - Los mensajes no contienen una cabecera MQRFH2.
Por ejemplo, el URI siguiente identifica una cola IBM MQ denominada Q1 que es propiedad del gestor de colas local. Un objeto Queue creado con este URI tiene todas sus propiedades establecidas en los valores predeterminados.
queue:///Q1
El URI siguiente identifica una cola IBM MQ denominada Q2 que es propiedad de un gestor de colas denominado QM2. Todos los mensajes enviados a este destino tienen una prioridad de 6. Las propiedades restantes del objeto Queue creadas utilizando este URI tienen sus valores predeterminados.
queue://QM2/Q2?priority=6
El siguiente URI identifica un tema titulado Sport/Athletics/Results. Todos los mensajes enviados a este destino son no persistentes y tienen una prioridad de 0. Las propiedades restantes del objeto de tema creado utilizando este URI tienen sus valores predeterminados.
topic://Sport/Athletics/Results?persistence=1&priority=0