Escribiendo una aplicación simple para inyectar mensajes en una cola

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.

  1. ¿Puedo conectarme a la cola de Unix en el cuadro de Unix desde mi máquina con Windows?
  2. 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);
        }
    }   
}

preguntado el 16 de abril de 13 a las 08:04

1 Respuestas

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 or haz tu propia pregunta.