Escribiendo una aplicación simple para inyectar mensajes en una cola
Frecuentes
Visto 13,556 equipos
1
Estoy tratando de escribir un programa Java simple para inyectar un mensaje MQ en una cola. No tengo mucha experiencia escribiendo en colas MQ usando Java y tengo un par de preguntas.
- ¿Puedo conectarme a la cola de Unix en el cuadro de Unix desde mi máquina con Windows?
- Cuando intento ejecutar la aplicación, obtengo un .... java.lang.UnsatisfiedLinkError: no mqjbnd05 in java.library.path
Por los sonidos de lo que pude encontrar en google, me falta algún tipo de recurso. Estoy pensando que recibo este error, posiblemente porque no puedo conectarme a la cola desde Windows.
Cualquier buen ejemplo de cómo lograr lo que estoy haciendo o ayudar sería apreciado.
public class MQInject {
private MQQueueManager _queueManager = null;
private Hashtable params = null;
public int port = 1414;
public static final String hostname = "UQMYPOSIS1";
public static final String channel = "MQTX1012.MQTX1013";
public static final String qManager = "MQTX1013";
public static final String outputQName = "IIS.TLOG.5";
public MQInject(){
super();
}
public void init(){
//Set MQ connection credentials to MQ Envorinment.
MQEnvironment.hostname = hostname;
MQEnvironment.channel = channel;
MQEnvironment.port = port;
//MQEnvironment.userID = "";
//QEnvironment.password = password;
//set transport properties.
MQEnvironment.properties.put(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES_CLIENT);
try {
//initialize MQ manager.
_queueManager = new MQQueueManager(qManager);
} catch (MQException e) {
e.printStackTrace();
}
}
public static void main(String[] args)
{
MQInject write = new MQInject();
try
{
write.selectQMgr();
write.write();
}
catch (IllegalArgumentException e)
{
System.out.println("Usage: java MQWrite <-h host> <-p port> <-c channel> <-m QueueManagerName> <-q QueueName>");
System.exit(1);
}
catch (MQException e)
{
System.out.println(e);
System.exit(1);
}
}
private void selectQMgr() throws MQException
{
_queueManager = new MQQueueManager(qManager);
}
private void write() throws MQException{
String line;
int lineNum=0;
int openOptions = MQC.MQOO_OUTPUT + MQC.MQOO_FAIL_IF_QUIESCING;
try {
MQQueue queue = _queueManager.accessQueue( outputQName,
openOptions,
null, // default q manager
null, // no dynamic q name
null ); // no alternate user id
DataInputStream input = new DataInputStream(System.in);
System.out.println("MQWrite v1.0 connected");
System.out.println("and ready for input, terminate with ^Z\n\n");
// Define a simple MQ message, and write some text in UTF format..
MQMessage sendmsg = new MQMessage();
sendmsg.format = MQC.MQFMT_STRING;
sendmsg.feedback = MQC.MQFB_NONE;
sendmsg.messageType = MQC.MQMT_DATAGRAM;
sendmsg.replyToQueueName = "ROGER.QUEUE";
sendmsg.replyToQueueManagerName = qManager;
MQPutMessageOptions pmo = new MQPutMessageOptions(); // accept the defaults, same
// as MQPMO_DEFAULT constant
while ((line = input.readLine()) != null){
sendmsg.clearMessage();
sendmsg.messageId = MQC.MQMI_NONE;
sendmsg.correlationId = MQC.MQCI_NONE;
sendmsg.writeString(line);
// put the message on the queue
queue.put(sendmsg, pmo);
System.out.println(++lineNum + ": " + line);
}
queue.close();
_queueManager.disconnect();
}catch (com.ibm.mq.MQException mqex){
System.out.println(mqex);
}
catch (java.io.IOException ioex){
System.out.println("An MQ IO error occurred : " + ioex);
}
}
}
1 Respuestas
1
Para su primera pregunta, sí, puede tener un administrador de colas ejecutándose en un host UNIX al que accede un cliente que se ejecuta en un host Windows.
Para su segunda pregunta, la biblioteca mqjbnd05 solo se usa para conectarse al administrador de colas en modo vinculante (es decir, cuando el administrador de colas y el programa que accede a las colas están en el mismo host) y no forma parte de la instalación del cliente MQ. Ver http://www-01.ibm.com/support/docview.wss?uid=swg21158430 para más detalles. Mirando a través de su código puedo ver que el init()
la función es especificar MQC.TRANSPORT_MQSERIES_CLIENT
aunque no puedo ver que el init()
se está llamando a la función. También podría valer la pena verificar si mqjbnd05 está especificado en la ruta de la biblioteca y, de ser así, eliminarlo.
Si bien probablemente no esté relacionado con el error que está recibiendo, otra cosa que podría valer la pena verificar es que el canal MQTX1012.MQTX1013
es un canal de conexión del servidor en lugar de un canal emisor o receptor.
Respondido 19 Abr '13, 13:04
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas java ibm-mq or haz tu propia pregunta.