properties - ¿Cómo usar las propiedades JMS en la interfaz JMS de IBM MQ?
ibm-mq (2)
Según la especificación JMS 1.1 :
Un identificador es una secuencia de caracteres de longitud ilimitada que debe comenzar con un carácter de inicio de identificador de Java; todos los siguientes caracteres deben ser caracteres de parte del identificador de Java. Un carácter de inicio de identificador es cualquier carácter para el cual el método Character.isJavaIdentifierStart devuelve verdadero. Esto incluye ''_'' y ''$''. Un carácter de parte de identificador es cualquier carácter para el cual el método Character.isJavaIdentifierPart devuelve verdadero.
Seguir las pistas aquí nos lleva al Javadoc para el método Character.isJavaIdentifierPart que enumera los caracteres válidos para un identificador:
Un personaje puede ser parte de un identificador Java si cualquiera de los siguientes es verdadero:
* it is a letter * it is a currency symbol (such as ''$'') * it is a connecting punctuation character (such as ''_'') * it is a digit * it is a numeric letter (such as a Roman numeral character) * it is a combining mark * it is a non-spacing mark * isIdentifierIgnorable(codePoint) returns true for the character
Tenga en cuenta que el espacio en blanco se excluye específicamente del conjunto de caracteres identificadores válidos. El conjunto de los primeros caracteres válidos es un poco más restrictivo e incluye los siguientes caracteres:
* isLetter(ch) returns true * getType(ch) returns LETTER_NUMBER * ch is a currency symbol (such as "$") * ch is a connecting punctuation character (such as "_").
Use un identificador válido y vuelva a intentarlo. Por ejemplo:
message.setStringProperty("my.arbitrary.name", "value");
message.getStringProperty("my.arbitrary.name");
O posiblemente ...
message.setStringProperty("myArbitraryName", "value");
message.getStringProperty("myArbitraryName");
Por cierto, cambie a V7 en su primera oportunidad. No solo el soporte para propiedades es mucho mejor en general, sino que la capacidad de leer / escribir directamente en los encabezados MQMD se ha mejorado enormemente como se muestra en el ejemplo de IBM .
Estoy usando la interfaz MQ JMS con MQ 6.0.2.
Parece que solo las propiedades predefinidas son compatibles y no arbitrarias. por ejemplo, puedo obtener getJMSCorrelationID()
, getJMSPriority()
etc. Sin embargo, cuando establezco una propiedad arbitraria en el remitente:
message.setStringProperty("my arbitrary name", "value");
No puedo obtener la propiedad del mensaje en el receptor:
message.getStringProperty("my arbitrary name");
Simplemente obtengo null
.
¿Hay alguna manera de hacerlo como en cualquier implementación de JMS, o es una limitación MQ JMS?
Si tiene la instalación completa del cliente, puede ir a C:/Program Files/IBM/WebSphere MQ/tools/jms/samples/interactive/
o buscar /opt/mqm/samp
SampleProducerJava.java
.
Del programa Productor de muestra:
// Set custom properties
msg.setStringProperty("MyStringProperty", "My Year Of Birth");
msg.setIntProperty("MyIntProperty", 2007);
Y de la muestra Consumidor:
// Get values for custom properties, if available
String property1 = msg.getStringProperty("MyStringProperty");
// Get value for an int property, store the result in long to validate
// the get operation.
long property2 = ((long) Integer.MAX_VALUE) + 1;
property2 = msg.getIntProperty("MyIntProperty");
if ((property1 != null) && (property2 < Integer.MAX_VALUE)) {
System.out.println("[Message has my custom properties]");
Los nombres de propiedad siguen las reglas para nombres de variables Java y no pueden tener espacios en ellos.