Você está na página 1de 77

1.1 Programao com MQSeries MQSeries aplicaes pode ser desenvolvido utilizando uma variedade de programao linguagens e estilos.

Programao procedural e orientada a objetos pode ser realizada utilizando Visual Basic, C, C + +, Java e COBOL. Microsoft Windows NT Tecnologia ActiveX / COM tambm suportado. No importa quo grande ou complexo de um aplicativo MQSeries seja, ele sempre tem que executar certas operaes comuns da mesma forma como qualquer outro MQSeries aplicao. Estes so os blocos de construo de qualquer aplicativo de mensagens e em suas mensagens simples tem que ser construdo, colocado sobre filas e ser consumido a partir das filas. Claro, haver sempre necessidade de ser um cdigo especial para verificar erros e excees, bem como o cdigo necessrio para interpretar as mensagens e ter a aes apropriadas com base no contedo da mensagem. Descritos abaixo so alguns dos padres de fluxo mais comuns que podem ser usadas em aplicaes MQSeries, e nos captulos seguintes vamos mostrar exemplos de como estes podem ser codificados usando diferentes APIs.

1.1.1 O que so padres? Os padres so tcnicas de programao que so usados para tratar projeto recorrente problemas que surgem em situaes de projeto especfico. De um modo geral, os padres de tentar apresentar solues para esses problemas recorrentes com base na experincia daqueles que se deparar com eles muitas vezes no passado. Este livro analisa a solicitao / resposta e publish / subscribe padres dentro do contexto da MQSeries mensagem orientada produtos middleware.

1.1.2 One-to-one fluxos de mensagens Um one-to-one ou ponto-a-ponto de aplicao (ver Figura 1-1) construdo em torno da conceito de filas de mensagens, remetentes e receptores. Cada mensagem dirigida a uma fila especfica, e um segundo programa recebe mensagens de que fila. Filas de manter todas as mensagens enviadas para eles at que as mensagens so ou consumidos ou at que as mensagens expirar.

Um-para-um sistema de mensagens tem as seguintes caractersticas: - Cada mensagem tem apenas um consumidor. - No h dependncias temporais entre um emissor e um consumidor de um mensagem. O consumidor pode receber a mensagem ou no estava funcionando quando o remetente colocar as mensagens na fila. - O consumidor mensagem pode, se necessrio, pode reconhecer a bem sucedida processamento de uma mensagem atravs do envio de uma resposta de volta para o remetente. - One-to-one de mensagens pode ser usado quando todas as mensagens que voc colocar em uma fila deve ser processado com sucesso por um consumidor.

Um um-para-um fluxo de mensagens, que no necessita de resposta muitas vezes referido como um enviar e esquecer padro.

1.1.3 One-to-many mensagem flui Um fluxo de mensagens de um-para-muitos (ver Figura 1-2) diferente da de um-paraum fluxo em que as mensagens so colocadas em uma fila, como antes, mas podem ser lidos a partir desse fila por vrios processos. Isso pode ser para fins de balanceamento de carga, ou, simplesmente, que a informao de mensagem tem de ser utilizada de diferentes maneiras atravs cada processo demorado ou de navegao. Novamente filas reter todas as mensagens enviado para eles at que as mensagens so ou consumidos ou at que as mensagens expirar.

Um-para-muitos mensagens tem as seguintes caractersticas: - Cada mensagem tem mais do que uma possvel aplicao que vai ler ou consumi-lo. - No h nenhuma dependncia de tempo entre um emissor e consumidores de um mensagem. Os consumidores podem obter as mensagens ou no eram execuo quando o remetente colocar as mensagens na fila. - Consumidores a mensagem pode, se necessrio, reconhecer o sucesso processamento de uma mensagem atravs do envio de uma resposta de volta para o remetente. One-to-many de mensagens pode ser usado quando todas as mensagens que voc colocar em uma fila deve ser processado com sucesso por vrios processos ou consumidores.

1.1.4 Many-to-one mensagem flui


A muitos-para-um aplicativo (veja a Figura 1-3) pode ser construda em torno do conceito de filas de mensagens, remetentes e receptores. Mensagens de vrios processos so dirigidas a uma nica fila especfica, e um novo programa recebe mensagens dessa fila. Filas de manter todas as mensagens enviadas para eles at que as mensagens so ou consumidos ou at que as mensagens expirar.

Muitos a um sistema de mensagens tem as seguintes caractersticas: - No h dependncias temporais entre os remetentes e um consumidor de um mensagem. O consumidor pode receber a mensagem ou no estava funcionando quando o remetente colocar as mensagens na fila. - A mensagem consumidor pode, se necessrio, pode reconhecer a bem sucedida processamento de uma mensagem atravs do envio de uma resposta de volta para o remetente. Many-to-one de mensagens pode ser usado quando as mensagens que voc colocar em uma simples fila de vrios processos esto a ser processado com sucesso por um consumidor.

1.1.5 publish / subscribe


A publicao / assinatura padro de mensagens construda em torno do conceito de tpicos. Em o padro publish / subscribe, mensagem de produo (envio de pedidos) aplicaes de transmitir mensagens por meio da publicao de um tpico. O mensagem de consumo (recepo) aplicaes subscrever tpicos para receber Mensagens publicadas para esses tpicos. Tpicos seguir uma estrutura hierrquica de rvore. Figura 1-4 ilustra uma hierarquia tema simples com o tema raiz sendo "NEWS". O tema NEWS contm trs tpicos filhos, chamados de "Atualidades", "Sports" e "Finanas". O tpico Sports, por sua vez tem dois tpicos em que, nomeadamente, "Baseball" e

"Futebol". O tema Finanas tem um subtema, chamado "stocks". Em a publicao / assinatura do modelo, os editores e assinantes podem ser dissociados.

Qualquer aplicativo pode publicar mensagens para um determinado tema, por exemplo, um aplicao de publicar o resultado de um jogo de beisebol ao tpico chamado de "Baseball". Qualquer aplicao por sua vez pode recuperar mensagens de um tpico, assinando o que tpico. Em publish / subscribe modelos, editores e assinantes podem ser adicionados dinamicamente, permitindo assim que o sistema para aumentar ou diminuir de forma dinmica. Cada aplicao que se inscreve em um tpico obtm sua prpria cpia das mensagens publicado a esse tpico. A publicao / assinatura do modelo facilitada por um software componente chamado Message Broker. A corretora mantm a mensagem assinaturas para a hierarquia tpico.

1.1.6 O pedido / resposta


O padro de pedido / resposta envolve dois processos: um consiste no envio de um mensagem e esperando uma resposta (em outras palavras, o envio de uma mensagem de solicitao) e o outro envia mensagens de resposta ao receber uma mensagem de solicitao. O fluxo de mensagens iniciado pelo sistema ou aplicao quando se envia o pedido mensagem e aguarda a mensagem de resposta. O lado respondendo consome a mensagem de solicitao, produz uma mensagem de resposta e envia de volta para o iniciando lado. O fluxo concluda quando o lado iniciando recebe a resposta mensagem. No modelo de pedido / resposta, existe um acoplamento mais perto dos sistemas, que requer a lgica da aplicao adicional para correlacionar entre a solicitao ea resposta mensagens e lgica adicional do lado pedindo para lidar com atraso e fracasso em receber uma mensagem de resposta. O padro de solicitao / resposta pode ser usado com qualquer one-to-one (ponto-a-ponto) ou publish / subscribe padres. Para facilitar a padro de solicitao / resposta, o MQSeries fornece um recurso para

identificar uma mensagem de solicitao e sua mensagem de resposta com o uso de uma identificao de correlao. O ID de correlao definido pelo o aplicativo de envio da mensagem de solicitao. O pedido de gerar o mensagem de resposta copia o ID de correlao da mensagem de solicitao para o mensagem de resposta enviada de volta para o aplicativo, que originalmente enviou o pedido mensagem. O aplicativo que enviou a mensagem de solicitao pode usar a correlao ID para mapear a mensagem de resposta mensagem de pedido que foi enviado anteriormente. Adicionalmente, voc tambm pode usar eficazmente as filas temporrias ou tpicos temporrios com a pedido / resposta padro.

1.1.7 One-way datagrama, ou enviar e esquecer padro


Neste padro o aplicativo de envio envia mensagens sem esperar qualquer responder a partir da aplicao de recepo. Com este padro, o aplicativo de envio totalmente dissociada da aplicao de recepo, permitindo um totalmente assncrono relao entre o sistema de envio e do sistema receptor. O envio sistema pode continuar o processamento, sem ser impedido pela disponibilidade do sistema de recepo. Com a capacidade de entrega garantida de mensagens MQSeries, o sistema de envio pode ter certeza de que as mensagens seriam entregues ao sistema de recepo. Em adotar esse padro, as regras de negcios de falha do aplicativo de recebimento deve ser mantido em mente. O one-way datagrama ou enviar e esquecer padro pode ser utilizado com tanto ponto-a-ponto e publish / subscribe padres. O send-and-forget padro implementado no um-para-um modelo colocando mensagens numa fila especfica. No caso do padro publish / subscribe, o send-and-forget padro implementado atravs da publicao de mensagens de um tpico especfico. Agora que discutimos esses padres de fluxo de mensagens comuns, vamos passar a discutir as muitas opes de programao disponveis e como cada um refere-se a esses padres. Ns mostramos como essas vrias opes so implementadas, juntamente com o exemplo de cdigo, sempre que necessrio. Apesar de cobrir alguns publish / subscribe padres em cada um dos seguintes captulos, altamente recomendado que voc siga isso lendo MQSeries Publish / Subscribe Applications, SG24-6282, que pode ser baixado a partir de: http://www.ibm.com/redbooks Este livro aborda e documenta completamente todas as etapas envolvidas na configurao do ferramentas de programao e codificao de um verdadeiro publish / subscribe aplicao em detalhe.

2 - Mensagens e as APIs
Neste captulo vamos discutir em termos gerais, as opes de programao que o programador da aplicao enfrenta ao decidir sobre o mais adequado rota programao de tomar. De um breve panorama das opes de idioma, para o modelos de programao, tentamos fazer o processo de escolher o caminho certo linguagem mais fcil e mais simples. Ns introduzimos as diferentes interfaces de programao suportadas pelo MQSeries para desenvolvimento de aplicaes, operao e gerenciamento do sistema.

2.1 Mensagens, filas e padres


Muito tem sido escrito sobre o MQSeries eo MQSeries programao sobre o perodo desde a sua introduo. Esses documentos fornecem a base para alguns excelente leitura de fundo para qualquer um usando este livro. Na verdade, como uma prrequisito que voc deve, como mencionado anteriormente, leia e certifique-se totalmente entender o livro An Introduction to Mensagens e Queuing, GC33-0805, que fornecido com o produto MQSeries. No entanto, neste captulo, uma breve cobrir os conceitos bsicos do que mensagens e como ele se encaixa.

2.1.1 Qual a mensagem?


Messaging quando os sistemas se comunicam entre si atravs de mensagens de transmitir a informao ao invs de se comunicar diretamente com o transporte mecanismos. MQSeries define quatro tipos de mensagens que podem ser utilizados: Datagram Request Reply Report Uma mensagem simples para o qual est prevista nenhuma resposta Uma mensagem para a qual esperada uma resposta A resposta a uma mensagem de solicitao Uma mensagem que descreve um evento como a ocorrncia de um erro

2.1.2 O que est na fila?


Queuing o mecanismo pelo qual as mensagens so guardadas at que um aplicativo ronto para process-los. Queuing permite: -Comunique-se entre os programas (que podem ser executados em cada diferente ambientes), sem ter que escrever o cdigo de comunicao. - Selecione a ordem em que um programa processa mensagens. - Equilibrar as cargas em um sistema organizando para mais de um programa para reparar uma fila, quando o nmero de mensagens excede um limiar. - Aumentar a disponibilidade de suas aplicaes, organizando uma alternativa sistema para atender as filas se o seu sistema primrio no est disponvel

2.1.3 O que o enfileiramento de mensagens?


Enfileiramento de mensagens tem sido utilizado em processamento de dados por muitos anos e o mais comumente usados hoje no correio electrnico. Sem filas, enviando um eletrnico mensagem em longas distncias exige cada n da rota a ser sempre disponvel para o encaminhamento de mensagens, com os destinatrios a serem registrados em e ciente do fato de que voc est tentando enviar uma mensagem. Em um sistema de filas, as mensagens so armazenadas em ns intermedirios at o sistema est pronto para transmiti-los. Ao seu destino final, que so armazenados em um caixa de correio eletrnico at que o destinatrio est pronto para l-los. Ainda assim, muitos transaes comerciais complexos so processados hoje, sem filas. Em um grande da rede, o sistema pode ser a manuteno de muitos milhares de ligaes numa pronto-a-usar o estado. Se uma parte do sistema sofre de um problema, muitas partes do sistema se tornar inutilizvel. Enfileiramento de mensagens podem ser consideradas como sendo de correio electrnico para programas. Numa ambiente de fila de mensagens, cada programa a partir do conjunto que compe um sute aplicativo foi projetado para executar uma funo bem definida, auto-suficiente em resposta a um pedido especfico. Para comunicar com outro programa, um programa deve colocar uma mensagem em uma fila predefinida. O outro programa recupera a mensagem da fila, e processa os pedidos e a informao contida na mensagem. Ento, o enfileiramento de mensagens um estilo de comunicao programa a programa.

2.2 Gerenciamento de transaes


Em um contexto humano, uma transao uma ao ou conjunto de aes, que leva colocar entre duas pessoas. Num contexto de computador, as operaes se referem a um grupo de atividades que podem precisar acessar vrios recursos e realizar algum tipo de operao e atualizaes sobre elas. Estes conjuntos de atividades deve ser concluda juntos para que se algum deles falhar, ento todo o conjunto teria de ser desfeita ou desistiu. As transaes tm quatro propriedades principais, chamadas as propriedades ACID. ACID est para Atomicidade, Consistncia, Isolamento e Durabilidade. Atomicity A transao deve executar completamente ou no. Todo o atividades na transao deve ser concluda com xito. Se qualquer falha para completar, a transao abortada e todo o atividades j executadas so revertidas. Se todas as atividades completar com sucesso, a transao est completa e tudo as operaes e atualizaes para os recursos esto comprometidos. Consistency Uma vez que a operao tenha sido executada, se se tiver sido concluda com xito ou no, os recursos subjacentes usado durante a transao deve ser consistente. Isolation A operao deve ser capaz de executar sem a interferncia de outros processos ou transaes. Qualquer estados intermedirios so transparente para outras operaes, de modo que vrias transaes pode ser executados em srie Durability Quaisquer alteraes feitas aos recursos subjacentes durante uma transao confirmada devem ser armazenados em um armazenamento de dados persistente e deve sobreviver a falhas de software ou hardware. No caso mais simples, toda a transao confirmada ou desistiu uma vez que acabado, mas em muitos casos voc pode querer sincronizar as alteraes de dados em outro Os pontos dentro da transao. Esses pontos so chamados syncpoints, eo perodo de processamento entre dois syncpoints chamada a unidade de trabalho. Unidades de trabalho pode conter uma ou vrias operaes diferentes. Coordenao Syncpoint o processo pelo qual as unidades de trabalho so ambos cometido ou recuou, mantendo assim a integridade dos dados. Isto d o programador de controle maior sobre a transao, tornando muito mais fcil durante qualquer processo de resoluo de problemas.

2.2.1 monofsica e de duas fases


As transaes podem ser locais para um nico gerenciador de recursos especficos ou podem envolver vrios gestores de recursos. Neste ltimo caso, um gerenciador de transaes necessrios para coordenar a operao nos diferentes gestores de recursos. Dentro de um escopo de transao local, um commit monofsica pode ser aplicada. A processo de confirmao de fase nica aquele em que o programa pode confirmar as alteraes sem coordenao de suas mudanas com outros gestores de recursos. Por outro lado, se as alteraes feitas para um recurso devem ser coordenados com atualizaes para outros gestores de recursos, por exemplo, com um banco de dados relacional como DB2, queremos que todos os recursos para ser confirmada ou desistiu juntos. Isso conhecido como uma confirmao de duas fases. Quando uma confirmao de duas fases necessrio, o gerenciador de transaes deve ser capaz de coordenar a transao com os diferentes gestores de recursos. A fim de fazer disso, o gerenciador de recursos deve ter uma interface de transao comum. O XA especificao define um conjunto de funes, que permite a coordenao entre diferentes gestores de recursos. O protocolo de confirmao de duas fases opera em duas fases diferentes para determinar se a transao deve ser confirmada ou revertida.

Na primeira fase, chamada de fase de preparao, o gerenciador de transaes avalia o status de cada um dos gestores de recursos envolvidos na transao. Todo o gestores de recursos deve estar pronto para confirmar a transao antes do gerenciador de transaes pode continuar com a prxima fase. Uma vez que os gerenciadores de transaes ter recebido uma resposta de todas as transaes gerentes, a segunda fase ou fase de consolidao conclui a transaco. Aqui o gerenciador de transaes instrui os gestores de recursos para cometer o transao se todos acordaram, ou reverter, se pelo menos um discorda. Reverso o lugar onde o gerenciador de transaes foi inseguro sobre o estado de qualquer um dos recursos participantes. A transao teria sido em um estado em dvida e, portanto, quaisquer alteraes que possam ter estado em vias de ser feito precisa ser resolvido por devolv-los ao seu estado original.

2.2.2 especificao XA
A especificao XA uma parte do XA Distributed Transaction Processing modelo de organizao do Open Group. A interface de XA um bidirecional interface, que consistem de um conjunto de tipo UNIX API. Junto com as funes que ele oferece, a especificao XA fornece uma base de dados de comutao estrutura que contm o nome do gerenciador de recursos, os ponteiros no nulos para o APIs do gerenciador de recursos, uma bandeira, e uma palavra da verso. Desta forma, os programas que utilizam as APIs do gerenciador de recursos acessar a funo atravs das indicaes fornecidas em esta estrutura ao invs de usar os nomes das funes reais, ou ter que ligar para o programa de servio que realmente contm as funes. Isto d um adicional nvel de portabilidade, uma vez que o gerente de recursos pode ser alterada sem o programador ter que recompilar a aplicao. Para obter informaes mais detalhadas sobre esta API, consulte a X / Open publicaes disponveis. As informaes podem ser encontradas em: http://www.opengroup.org

2.2.3 Transaes em MQSeries


No caso de um sistema de mensagens tais como MQSeries, gesto de transaces permite ao programador para assegurar que um conjunto de mensagens tenham sido enviados num tudo-ou-nada forma: se h um problema de fornecimento de qualquer uma das mensagens em uma transao, todo o conjunto de mensagens pode ser revertida e algum tipo de aes corretivas podem ser tomadas. Se as mensagens foram recuperados a partir de uma fila durante que a unidade de trabalho, essas mensagens so restaurados para a fila por MQSeries quando a transao ser revertida.

Em uma transao, se as mensagens so colocadas em uma fila, eles s so visveis para outras aplicaes depois de toda a transao foi confirmada. Da mesma forma, se dentro de mensagens de transaco so destrutivamente de uma fila, no esto ser excludo da fila at que a transao est realmente comprometida de modo que nenhum outro programa seria capaz de recuper-los, entretanto. Uma vez que as mensagens de uma unidade de trabalho so devolvidas fila quando uma devoluo ocorre, o programa de processamento dessas mensagens pode entrar em um loop infinito, processamento de uma mesma unidade de trabalho e outra vez e simplesmente encontrar o mesmo problema de cada vez. Para evitar essa situao, MQSeries mantm o controle do nmero de vezes que ele foi apoiada no atributo BackoutCount. Dessa forma, se a mensagem repetidamente faz com que a unidade de trabalho falhar, o valor deste atributo ser eventualmente exceder o valor no

BackoutThreshold, que definido quando a fila est definida. A aplicao pode decidir retirar a mensagem da unidade de trabalho e coloc-lo em outro fila, ou tomar alguma outra ao corretiva para que a unidade de trabalho pode comprometer a planejado. Podemos usar monofsico ou confirmao de duas fases em MQSeries, dependendo do requisitos da aplicao, o que significa que as funes do MQSeries filas pode ser introduzido dentro do escopo de uma unidade de trabalho, gerido pelo MQSeries ou outro gerenciadores de transaes, tais como CICS, IMS, Encina, Tuxedo e Top-End. Se a coordenao transao vai ser feita pelo MQSeries, unidades de trabalho pode ser local para o gerenciador de filas MQSeries ou global, envolvendo outros gestores de recursos, tais como bancos de dados relacionais.

2.3 Mensagem de agrupamento e segmentao


Agrupamento de mensagens um mecanismo que permite que o programador adicione um pouco de agrupamento lgica para as mensagens que esto sendo enviadas atravs de uma fila sem ter que introduzir essa lgica nas prprias mensagens. Desta forma, a aplicao processamento dessas mensagens pode se concentrar em dados reais a serem processados e deixar o grupo de gesto para MQSeries. Existem dois principais motivos para o uso de agrupamento: - As mensagens do grupo determinado devem ser processados na ordem correta. - Cada uma das mensagens de um grupo precisam ser tratados de forma relacionada.

Ordem lgica significa que as mensagens pertencentes a um grupo so lidos na sua corrigir a ordem, mesmo se alguma outra mensagem ou mensagens chegam para a fila no meio do grupo. Isto, claro, exige que o programa para identificar o grupo de mensagens que vai trabalhar com, o que feito dando o MQGET chamar a identificao do grupo de mensagens na estrutura MQMO. MQSeries tambm permite que o programa necessita para todo o grupo de estar disponveis antes de uma operao de obteno pode ser feito com a primeira mensagem da fila (o primeiro mensagem da fila deve estar presente para ser capaz de ver o grupo em tudo). Por Fazendo isso, o desenvolvedor do programa pode se concentrar na lgica de negcio e deixar o grupo ordenao manuseio para o gerenciador de filas.

Por outro lado, mesmo se a ordem do grupo no um problema, a identificao do grupo pode ser til em termos de manter juntos um grupo conceitual de informaes que seu sistema utiliza, para que as mensagens de um determinado grupo pode ser dado um especfico tratamento depois. MQSeries fornece um outro nvel de agrupamento de mensagens chamado de segmentao. O finalidade de segmentao dar ao programador a oportunidade para dividir um mensagem em vrios segmentos. Isto usado principalmente quando as mensagens so maiores do que o tamanho mximo configurvel de uma mensagem, quer no MQSeries configurao ou no prprio programa. Com a segmentao, mensagens grandes pode ser dividida em menores, de modo que as mensagens eles podem ser lidos a partir de fila nos buffers menores. Isto d o programador a oportunidade de trabalhar com pedaos mais manejveis de informao antes da mensagem inteira chegou. Se toda a mensagem tem que ser recebidos antes algum trabalho pode ser realizado sobre ele, voc pode usar um modelo transacional para que o mensagem pode ser comprometida depois que todas as peas esto disponveis na fila. O mesmo pode ser feito com o agrupamento. Um segmento de uma mensagem identificado pela a identificao de grupo, MsgSeqNumber e Deslocamento.

2.4 MQSeries interfaces de programao


Vamos agora passar para dar um breve resumo das principais caractersticas dos muitos opes de programao que um programador de aplicao MQSeries pode selecionar. Cada uma destas escolhas so descritos com mais detalhe na subsequente captulos.

2.4.1 MQI
O MQSeries Mensagem Queue Interface (MQI) extremamente rico interface de programao que permite o acesso do programador para todas as instalaes de a plataforma MQSeries mensagens, juntamente com um controle detalhado sobre as mensagens e a forma como eles se comportam. As chamadas MQI permitem que voc: - Ligao programas e desligue programas de, um gerenciador de filas - Objetos de abrir e fechar, como filas, gerenciadores de filas, name lists e processos - Coloque mensagens em filas - Obter (remove) mensagens de uma fila, ou procur-los (deixando-os na fila) - Informe-se sobre os atributos dos objetos do MQSeries, e definir algumas das atributos de filas

- Comprometer e fazer as mudanas feitas dentro de uma unidade de trabalho, em ambientes onde no h apoio syncpoint natural, por exemplo OS / 2 e UNIX sistemas - Coordenar fila atualizaes gerente e atualizaes feitas por outros recursos Gerentes. A API MQI proporciona estruturas de dados e de tipos para ser usada como a entrada e sada das chamadas.Ele tambm fornece um amplo conjunto de constantes nomeadas que podem ser usado para modificar as opes apresentadas nessas estruturas de dados. O MQI consistente em todas as plataformas suportadas para as aplicaes pode ser movido para um diferente plataforma sem modificaes no cdigo.

2.4.2 AMI
A interface de mensagem de Aplicao (AMI) fornece programadores com um muito interface simples que pode ser usado para trabalhar com objetos do gerenciador de filas. Com o AMI, o programador no precisa ter um conhecimento profundo de todos os MQI chamadas, mas pode se concentrar na lgica de negcio da aplicao. este significa menos erros de programao e uma maior flexibilidade para lidar com negcios e mudanas tecnolgicas. IAM reduz a quantidade de cdigo que necessrio para escrever um nova aplicao Principais caractersticas do IAM so: - Reduzida (aplicao) a sobrecarga de administrao - Funo mudou de aplicao para AMI - Suporte para diferentes modelos de programao de aplicativos - Cross-plataforma e linguagem mltipla (orientada a objeto e processuais) apoiar - Chamadas de API simples

2.4.3 C + +
A interface do C + + MQSeries uma extenso da API MQI. Ele d a programador de uma abordagem orientada a objetos para a interface de mensagens em MQSeries. O C + + MQI fornece todos os recursos disponveis na API MQI, tais como a obteno, colocando mensagens e navegao. Ele tambm permite que voc para saber e definir objeto opes. Alm disso, oferece os seguintes recursos: - Inicializao automtica de MQSeries estruturas de dados - Just-in-time conexo gerenciador de filas e filas de abertura - Fechamento fila implcita e gerenciador de filas desconexo

- Transmisso cabealho letra morta e recebimento - IMS transmisso cabealho Ponte e recibo - Transmisso de mensagem de cabealho de referncia e recebimento - Recebimento da mensagem gatilho - CICS transmisso cabealho Ponte e recibo - Transmisso cabealho trabalho e recebimento - Definio do canal do cliente

2.4.4 aulas de automao MQSeries para ActiveX


As aulas de automao MQSeries para ActiveX um conjunto de componentes ActiveX que fornecem aulas. As aulas de automao MQSeries para ActiveX se destinam para ser usado por designers e programadores que queiram desenvolver MQSeries aplicaes que so capazes de rodar na plataforma Windows. As aulas podem ento ser facilmente integrado em qualquer aplicao, porque os objetos do MQSeries que so necessria pode ser codificada de acordo com a sintaxe da linguagem nativa implementao. O projeto total da aplicao a mesma para qualquer MQSeries aplicao.

2.4.5 Java
As classes do MQSeries para Java (MQSeries base de Java) permite ao programador escrever um aplicativo ou applet em linguagem de programao Java para: - Ligue para MQSeries como um cliente MQSeries - Conectar-se diretamente a um servidor MQSeries MQSeries base de Java permite que os applets Java, aplicativos e servlets para emitir chamadas e consultas para o MQSeries. O programador pode escolher para se conectar diretamente para um servidor MQSeries ou para se conectar ao MQSeries como um cliente MQSeries. Este d acesso a aplicativos de mainframe e legados, normalmente atravs da Internet, sem necessariamente ter qualquer outro cdigo MQSeries na mquina do cliente. Alm disso, as aplicaes escritas usando as classes do MQSeries para Java pode perceber uma significativa reduo de custos em um ambiente onde um grande nmero de desktops precisam ser atualizados periodicamente com a verso mais recente do software. isto porque uma vez que o cdigo de byte inicialmente transferido para a mquina do usurio, o verso mais recente do software baixado automaticamente cada vez que o software posteriormente utilizado.

2.4.6 JMS
O Java Message Service, ou JMS a API padro para troca de mensagens na mesma forma que a API JDBC para bancos de dados. A Especificao JMS (1.0.2) foi desenvolvida pela Sun Microsystems com a participao activa da IBM e outros fornecedores de mensagens empresariais, fornecedores de processamento de transaes e Vendedores de RDBMS. JMS fornece um modelo comum para os programas Java para interagir com os sistemas de mensagens executar vrias operaes contra o messaging objetos de sistemas. As operaes mais comuns que um programa usa contra um O objetivo de sistemas de mensagens so criar mensagens, enviar mensagens, receber mensagens e ler mensagens do sistema de mensagens corporativas. JMS fornece uma maneira comum para programas que esto sendo desenvolvidos em Java para acessar estes sistemas de mensagens. Agora que ns cobrimos as vrias opes de alto nvel, passamos a discutir cada um por sua vez, junto com exemplos de programao reais.

PROGRAMAO COM MQI 3.1 Viso geral


O Message Queue Interface ou MQI uma interface de programao que d a programador acesso a todas as instalaes da plataforma de mensagens do MQSeries e d o controle completo e detalhado sobre as mensagens ea forma como eles fluxo. As chamadas MQI permitem que voc: -Ligao programas e desligue programas de, um gerenciador de filas - Objetos abrir e fechar (como filas, gerenciadores de filas, namelists e processos) - Coloque mensagens em filas - Recuperar mensagens de uma fila, ou procur-los (deixando-os na fila) - Informe-se sobre os atributos dos objetos do MQSeries, e definir algumas das atributos das filas - Comprometer e fazer as mudanas feitas dentro de uma unidade de trabalho, em ambientes onde no h apoio syncpoint natural, por exemplo, OS / 2 e UNIX sistemas

- Coordenar fila atualizaes gerente e atualizaes feitas por outros recursos Gerentes. O MQI fornece um conjunto de chamadas ou funes para executar essas operaes, juntamente com estruturas de dados e de tipos para ser usada como a entrada e sada de chamadas. Ele Tambm proporciona um grande conjunto de constantes nomeadas que podem ser usados para modificar o opes apresentadas nessas estruturas de dados. Estruturas de dados tambm pode ser inicializado com os valores padro fornecidos pela API na forma de constantes nomeadas. O MQI consistente em todas as plataformas suportadas para que os aplicativos podem ser movido para uma plataforma diferente sem alteraes de cdigo, embora isto possa exigem que o programador adicione um pouco de lgica para garantir a portabilidade. Por exemplo: #ifdef _OS2 OS/2 specific code #else generic code #endif MQI programas podem ser executados em um servidor ou ambiente cliente. Algumas restries se aplicam quando o programa est para ser usado num ambiente de cliente, uma vez que a ligao o gerenciador de filas no pode estar em modo de ligao. Alm disso, algumas variveis de ambiente so necessrios em uma configurao cliente para o aplicativo pode encontrar o servidor MQSeries. Por favor, consulte o MQSeries Clientes, GC33-1632, para obter informaes detalhadas sobre como configurar um ambiente de cliente.

3.2 Platforms and languages These are the platforms and languages supported by MQI: - For MQSeries for MVS/ESA: COBOL Assembler language C PL/I

-For MQSeries for AS/400: RPG COBOL C C++ -For MQSeries for AT&T GIS UNIX, MQSeries for Digital OpenVMS, MQSeries for SINIX and DC/OSx, and MQSeries for SunOS: COBOL C - For MQSeries for HP-UX and MQSeries for Sun Solaris: COBOL C C++ - For MQSeries for AIX, MQSeries for OS/2 Warp, and MQSeries for Windows NT: COBOL C C++ PL/I - For MQSeries for Tandem NonStop Kernel: COBOL C TAL - For MQSeries for Windows: C Visual Basic

3.3 Libraries and stub programs

These are the libraries and stub programs supported by MQI. MQSeries for AS/400 In MQSeries for AS/400, you must bind your ILE C/400 programs and RPG/400 static calls to the supplied AMQZSTUB service program. MQSeries for Windows In MQSeries for Windows, you must link your program to the MQI library files supplied for the environment in which you are running your application, in addition to those provided by the operating system: _ MQM16.LIB server for 16-bit C _ MQM.LIB server for 32-bit C _ MQM16.LIB server for 16-bit Visual Basic _ MQMSTD.LIB server for 32-bit Visual Basic MQSeries for Windows NT In MQSeries for Windows NT, you must link your program to the MQI library files supplied for the environment in which you are running your application, in addition to those provided by the operating system: _ MQM.LIB server for 32-bit C _ MQIC.LIB client for 16-bit C _ MQIC32.LIB client for 32-bit C _ MQMXA.LIB static XA interface for C _ MQMCICS.LIB CICS for Windows NT V2 exits for C _ MQMCICS4.LIB Transaction Server for Windows NT, V4 exits for C _ MQMZF.LIB installable services exits for C _ MQMCBB.LIB server for 32-bit IBM COBOL _ MQMCB32 server for 32-bit Micro Focus COBOL _ MQICCBB.LIB client for 32-bit IBM COBOL _ MQICCB32 client for 32-bit Micro Focus COBOL _ MQMENC.LIB dynamic XA interface in C for Encina _ MQMTUX.LIB dynamic XA interface in C for Tuxedo MQSeries for AIX In MQSeries for AIX, you must link your program to the MQI library files supplied for the environment in which you are running your application, in addition to those provided by the operating system.

In a non-threaded application, these are as follows: _ libmqm.a server for C _ libmqic.a client for C _ libmqmzf.a installable service exits for C _ libmqmxa.a XA interface for C _ libmqmcbrt.o MQSeries runtime library for Micro Focus COBOL support _ libmqmcb.a server for COBOL _ libmqicb.a client for COBOL In a threaded application, these are as follows: _ libmqm_r.a server for C _ libmqmzf_r.a installable service exits for C _ libmqmxa_r.a XA interface for C _ libmqmxa_r.a for Encina MQSeries for HP-UX In MQSeries for HP-UX, you must link your program to the MQI library files supplied for the environment in which you are running your application, in addition to those provided by the operating system. In a non-threaded application, these are as follows: _ libmqm.sl server for C _ libmqic.sl client for C _ libmqmzf.sl installable service exits for C _ libmqmxa.sl XA interface for C _ libmqmcbrt.o MQSeries runtime library for Micro Focus COBOL support _ libmqmcb.sl server for COBOL _ libmqicb.sl client for COBOL In a threaded application, these are as follows: _ libmqm_r.sl server for C _ libmqmzf_r.sl installable service exits for C _ libmqmxa_r.sl XA interface for C

MQSeries for Sun Solaris In MQSeries for Sun Solaris, you must link your program to the MQI library files supplied for the environment in which you are running your application in addition to those provided by the operating system. These are as follows: _ libmqm.so server for C _ libmqmzse.so for C _ libmqic.so client for C _ libmqmcs.so client for C _ libmqmzf.so installable service exits for C _ libmqmxa.a XA interface for C

3.4 modelo Architectural


Arquitetura MQI uma implementao simples e direta dos diferentes recursos disponveis no MQSeries. Os diferentes chamadas diretamente se referir a uma operao bsica MQSeries como obter mensagens de uma fila ou colocando mensagens para uma fila. Estas chamadas podem ser agrupados com base na sua funcionalidade como se segue: _ Connecting to and disconnecting from a queue manager: MQCONN, MQCONNX, and MQDISC _ Open and close an MQSeries object, such as a queue: MQOPEN and MQCLOSE _ Put one or multiple messages on a queue: MQPUT and MQPUT1 _ Browse or remove messages from a queue: MQGET _ Inquire about the attributes of an object: MQINQ _ Set some of the queue attributes at runtime: MQSET _ Manage local or distributed transactions: MQBEGIN, MQCMIT, and MQBACK

As diferentes opes e informaes bsicas necessrias para executar essas operaes pode ser fornecido utilizando as estruturas de dados e os tipos de dados elementares fornecidas pelos a API. Estas so as estruturas de dados MQI: - MQBO (Comece opes) Especifica opes para a chamada MQBEGIN (MQSeries Verso apenas 5 produtos). - MQCNO (opes Connect) Especifica opes para a chamada MQCONNX (MQSeries Verso apenas 5 produtos). - MQDH (cabealho Distribution) Descreve os dados que se encontram presentes em uma mensagem sobre uma fila de transmisso quando essa mensagem uma mensagem de distribuiolist (MQSeries Verso 5 produtos e MQSeries para AS/400 apenas). - MQGMO (Get opes de mensagem) Especifica opes para a chamada MQGET. - MQMD (descritor de mensagem) Fornece informaes de controle para a mensagem que voc est colocando em (usando MQPUT ou MQPUT1) ou obter a partir de (usando MQGET) uma fila. - MQMDE (extenso descritor Mensagem) Em conjunto com uma verso MQMD 1, este contm a mensagem e agrupados informaes segmentao que normalmente seriam realizadas na verso MQMD 2 (MQSeries Verso 5 produtos e MQSeries para AS/400 apenas). - MQOD (Object descritor) Identifica o objeto que voc deseja trabalhar com quando usar MQOPEN. - MQOR (registro Object) Identifica os destinos que voc deseja trabalhar em uma lista de distribuio (MQSeries Verso 5 produtos e MQSeries para AS/400 V4R2 apenas). - MQPMO (Coloque as opes de mensagem) Especifica opes para a MQPUT e MQPUT1 chamadas. - MQPMR (registro Put-mensagem) Contm informaes especficas relativas aos destinos individuais includas no uma lista de distribuio (MQSeries Verso 5 produtos e MQSeries para AS/400 S V4R2).

As seguintes estruturas so utilizadas para fins especiais: - MQDLH (cabealho Dead-carta) Define o formato do cabealho das mensagens de colocar na letra-morta (undelivered-message) fila (no suportado em MQSeries para Windows V2.0). - MQRMH (cabealho da mensagem de Referncia) Define o formato de uma mensagem de referncia (MQSeries Verso 5 produtos e MQSeries para AS/400 apenas). - MQTM (mensagem de disparo) Define o formato de uma mensagem de disparador. - MQTMC (mensagem de disparo) Define o formato de uma mensagem de disparo como um conjunto de campos de caracteres (MQSeries para AS/400 apenas). - MQTMC2 (mensagem de disparo) Define o formato de uma mensagem de disparo incluindo o nome do gerenciador de filas (MQSeries para MVS / ESA, o MQSeries em sistemas UNIX, o MQSeries para OS / 2 Deformar, e MQSeries para Windows NT apenas). - MQXP (bloco parmetro Exit) estrutura Usado para se comunicar com a sada API-crossing (MQSeries para MVS / ESA apenas). - MQXQH (cabealho fila de Transmisso) Define o formato do cabealho que adicionada s mensagens colocadas numa fila de transmisso. Para C e Visual Basic, MQI fornece os seguintes tipos de dados elementares: MQBYTE A single byte of data MQBYTEn A string of 16, 24, 32, or 64 bytes MQCHAR One single-byte character MQCHARn A string of 4, 8, 12, 16, 20, 28, 32, 48, 64, 128, or 256 single-byte characters MQHCONN A connection handle (this data is 32 bits long) MQHOBJ An object handle (this data is 32 bits long) MQLONG A 32-bit signed binary integer PMQLONG A pointer to data of type MQLONG

3.5 Programao com MQI

Conforme explicado nas sees anteriores, a MQI um conjunto de funes e tipos de dados que permitem ao programador enviar e receber mensagens. As diferentes funes aceitar entrada / sada de parmetros, de modo a ser compatvel entre todos os idiomas listados. Geralmente, um programa de aplica MQI um simples fluxo de operaes como demonstrado na Figura 3-1 na pgina 31. 1. O programa deve primeiro se conectar a um gerenciador de filas, usando o MQCONN chamar. 2. Uma vez que a conexo foi estabelecida com sucesso, um ou muitos objetos pode ser aberto usando a chamada MQOPEN. 3. Qualquer nmero de operaes, como obter ou colocar as operaes, pode ser realizada em cada objeto at que o objeto no mais necessrio. 4. Em seguida, o objeto pode ser fechado usando a chamada MQCLOSE. 5. A conexo do gerenciador de filas descartado usando a chamada MQDISC.

Primeiro, rever alguns dos elementos comuns de todas essas chamadas, ento vamos dar uma olhar para as chamadas necessrias para conectar e desconectar de um gerenciador de filas e como abrir e fechar os objetos do MQSeries Uma vez que tenhamos feito isso, ns revisamos as quatro operaes bsicas que podem ser realizada com o MQI: - Colocar mensagens em uma fila - Recebendo mensagens de uma fila - Vendo mensagens em uma fila - Indagando e definindo os atributos de objeto Qualquer nmero de operaes bsicas podem ser realizadas dentro das chamadas de abertura / fechamento.

Ns no ir proporcionar a especificao de cada chamada de funo detalhe, uma vez que este no o objetivo deste Redbook, mas voc pode consultar a programao de aplicativo Guia de referncia e de programao de aplicativo que vem com o MQSeries produto. Aqui vamos tentar apresentar uma breve descrio das possibilidades que voc tem com esta API para que voc possa descobrir se suas necessidades podem ser resolvidos com esta API e como.

3.5.1 Conceitos bsicos da API


Os conceitos bsicos da API MQI so discutidos nas sees seguintes. Parmetros comuns a todas as chamadas Existem dois tipos de parmetros comuns a todas as chamadas: - Handles Estes so devolvidos pela conexo do gerenciador de filas e chamadas de filas abertas e so utilizados como parmetros de entrada para as chamadas subseqentes. - cdigos de retorno Dois cdigos de retorno so comuns a todas as chamadas: um cdigo de concluso e uma cdigo de razo. - O cdigo de concluso especifica se a chamada foi concluda com xito (com um MQCC_OK) ou se ocorreu uma falha (com um MQCC_FAILED). Ele tambm pode retornar um estado intermedirio, MQCC_WARNING, indicando sucesso parcial.

- O cdigo de razo MQCC_NONE se o cdigo de concluso MQCC_OK. Se no, algum outro valor retornado explicar a causa do alerta ou insucesso relatado no cdigo de concluso.

Recuperando mensagens em ordem


Mensagens em uma fila podem ser verificados de forma fsica ou lgica. este ordenao aplica-se se existe um pedido de obter ou navegar feitas para a fila em que a mensagens so retidas. Ordenao fsica est relacionada com a forma, as mensagens so recebidas por fila. o primeira mensagem para chegar na fila a primeira mensagem a ser apresentada durante a obter ou procurar operao. Ordenamento fsico nos d uma FIFO (Firstin/First-out) ou FIFO na seqncia de prioridade das mensagens na fila. Se FIFO dentro ordenao prioridade usada, as mensagens com a maior prioridade aparece em primeiro lugar na fila, mesmo que chegar aps uma mensagem de prioridade mais baixo tem chegou. Isso pode fazer com que algumas mensagens sejam ignorados quando um programa est recebendo ou navegao mensagens em uma fila. Isso porque uma vez que uma mensagem com um menor Foi alcanado prioridade e uma outra mensagem com uma prioridade mais elevada exibida em fila, que mensagem colocada antes da mensagem atual (ponteiro) para que o aplicao no ser capaz de v-la at que a fila fechado e reaberto, ou um MQOGET emitido com a opo MQ00_BROWSE_FIRST. Por exemplo, vamos tomar a seguinte sequncia de mensagem enviada a uma ordem de prioridade fila: 1. Mensagem 1, a prioridade 1 2. Mensagem 2, a prioridade 2 3. Mensagem 3, a prioridade 1 Digamos que um aplicativo est navegando mensagens nessa fila. O programa v pela primeira vez as mensagens nesta ordem: 1. Mensagem 2, a prioridade 2 2. Mensagem 1, a prioridade 1 (o cursor browse est aqui) 3. Mensagem 3, a prioridade 1 Se o cursor browse do programa est apontando para uma mensagem quando uma mensagem 4 aparece com prioridade 2, ento a ordem da fila ser: 1. Mensagem 2, a prioridade 2 2. Mensagem 4, a prioridade 2

3. Mensagem 1, a prioridade 1 (o cursor browse est aqui) 4. Mensagem 3, a prioridade 1 Neste caso, o programa no capaz de ver a Mensagem 4 at que se abre a refila ou move o cursor de procura para o topo da fila utilizando o Opo MQOO_BROWSE_FIRST. A ordem lgica, por outro lado, est principalmente relacionado com agrupamento mensagem e segmentao. Neste caso, as mensagens so apresentadas na fila agrupados por GroupId e os grupos so ordenados de acordo com a posio fsica da primeira mensagem do grupo. Segmentos de mensagens possuem o mesmo comportamento. Por exemplo, vamos tomar a seguinte sequncia de mensagens enviadas para uma fila: 1. Mensagem 1 lgico (no ltima) do grupo 123 2. Mensagem 1 lgico (no ltima) do grupo 456 3. Mensagem lgico 2 (ltimo) do grupo 456 4. Mensagem lgico 2 (no ltima) do grupo de 123 5. Lgico mensagem 3 (ltima) do grupo 123 Essa mensagem ser exibida para a aplicao na seguinte seqncia: 1.Mensagem 1 lgico (no ltima) do grupo 123 2. Mensagem lgico 2 (no ltima) do grupo de 123 3. Lgico mensagem 3 (ltima) do grupo 123 4. Mensagem 1 lgico (no ltima) do grupo 456 5. Mensagem lgico 2 (ltimo) do grupo 456 Aqui, o mesmo problema explicado com a FIFO dentro de prioridade pode ser encontrada, desde que as partes de um grupo de mensagem pode chegar na fila aps o browse cursor tiver sido posicionada para a prxima mensagem de grupo.

3.5.2 Conexo com o gerenciador de filas


Para comear a trabalhar com o MQSeries utilizando esta interface, voc deve primeiro se conectar a um gerenciador de filas utilizando uma das duas chamadas de conexo disponveis: MQCONN e MQCONNX. A sintaxe seria como se segue: MQCONN (QMgrName, Hconn, CompCode, Reason) MQCONNX (QMgrName, ConnectOpts, Hconn, CompCode, Reason)

Como entrada para MQCONN devemos fornecer o nome do gerenciador de filas, ou um nulo comeando corda se queremos abrir a fila padro. Alm disso, o MQCONNX chamada permite especificar algumas opes em relao ao mtodo de ligao (se a conexo vinculativa ou no vinculativa). A sada dessas chamadas so: - Os cdigos de resultado (concluso e cdigo de razo). - Uma conexo de lidar com o gerenciador de filas. O alcance de uma chamada de conexo geralmente o fio que emite a chamada. Referir o guia de programao de aplicativos para obter informaes detalhadas sobre o escopo consideraes sobre cada plataforma. O fragmento de cdigo a seguir mostra como se conectar a um gerenciador de filas utilizando o C MQI:

3.5.3 - Abertura objetos do MQSeries


Existem quatro tipos de objetos do MQSeries que podem ser abertos: - fila - Namelists (em MQSeries para MVS / ESA) - definio do processo - gerenciador de filas Para abrir qualquer um desses objetos que usamos a chamada MQOPEN: MQOPEN (Hconn, ObjDesc, Options, Hobj, CompCode, Reason)

Esta chamada recebe: - Um identificador de conexo retornado por a chamada MQCONN. - A descrio do objeto que deseja abrir, na forma de um descritor de objeto (MQOD) estrutura. - Uma ou mais opes que controlam a ao da chamada. A sada para esta chamada: - Os cdigos de resultado (concluso e cdigo de razo). - Um identificador de objeto que representa o seu acesso ao objeto. - A estrutura do objeto-descriptor modificado, se o objeto foi aberta uma dinmica fila. Ns nos concentramos em como abrir um objeto de fila na prxima seo. para mais informaes sobre como abrir os outros tipos de objetos, consulte o Guia de Programao de Aplicativos.

Filas de abertura(Open Queues) No MQI, o nico tipo disponvel do recipiente mensagem uma fila. As filas podem ser quer para a sada ou as mensagens de entrada e aplicvel a todos os padres descritos nas Captulo 1, "Introduo e padres" na pgina 3. Existem trs tipos de fila a partir de uma perspectiva de programador:
_ Local queues _ Remote queues _ Dynamic queue

Filas locais e remotos representam filas reais definidos no gerenciador de filas a partir de uma perspectiva administrativa. Eles diferem principalmente na maneira como o nome do fila pode ser especificado no campo ObjectName da estrutura de dados MQOD. O nome de uma fila local o especificado no gerenciador de filas local. O nome de uma fila remota pode ser referido pelo nome da fila remota como conhecido pelo gerenciador de filas local, ou pelo nome da fila remota gerente. Se o nome do gerenciador de filas remoto usado, ento o Campo ObjectQMgrName deve especificar: - O nome da fila de transmisso, que tem o mesmo nome que o telecomando gerenciador de filas. - O nome de um objeto fila de alias que resolve a fila de transmisso que tem o mesmo nome do gerenciador de filas remoto.

O fragmento de cdigo a seguir mostra como abrir uma fila local ou remoto usando o local, nome do gerenciador de fila:

Filas dinmicos so criados sob demanda e so destrudos uma vez que eles no so mais em uso. Eles no so criados a nvel administrativo em MQSeries. para exemplo, eles podem ser utilizados em um cenrio de pedido / resposta, onde o solicitante especifica um "a resposta" fila. Para criar uma fila dinmica, usamos um modelo conhecido como uma fila modelo que criado administrativamente, junto com uma chamada MQOPEN. O nome do fila dinmica pode ser especificado no campo DynamicQName do MQOD estrutura. O nome pode ser especificada em trs maneiras: - Dar um nome completo, no mais do que 33 caracteres. - Dar um nome parcial, caso em que voc pode especificar determinados prefixos para o nome da fila de seguir por um asterisco (*). O gerenciador de filas, em seguida, gera um nome exclusivo usando o prefixo especificado. - Permitir que o gerenciador de filas para gerar um nome completo, especificando um asterisco (*) no primeiro caracter. Se a fila dinmica criada com xito, a estrutura do objeto-descritor retornou com o nome real da fila dinmica do campo de objecto. O fragmento de cdigo a seguir abre uma fila dinmica e, em seguida, imprime o seu nome:

Abrindo listas de distribuio As listas de distribuio permitem que voc coloque uma mensagem para vrias filas em um nico MQPUT ou MQPUT1 chamar. A fim de fazer isso, a lista de distribuio deve ser aberta usando a chamada MQOPEN com os seguintes parmetros de entrada: - Um identificador de conexo - Informaes genricas na estrutura descritor Objeto (MQOD) - A estrutura do descritor de objeto (MQOD) deve especificar MQOD_VERSION_2 no campo Verso e do nmero de estruturas a ficha objecto (que o mesmo que o nmero de filas que deseja abrir) deve ser especificado no Campo RecsPresent. - O nome de cada fila que voc deseja abrir, usando a estrutura de registro de objeto (MQOR). O resultado desta chamada : - Um identificador de objeto que representa o seu acesso lista de distribuio. - Um cdigo de realizao genrica. - A razo cdigo genrico. - Registros de resposta (estrutura MQRR), contendo os cdigos de resultado (concluso e razo de cdigo) para cada destino. Um registro MQOR deve ser fornecido para cada destino, como uma combinao de o nome da fila e nome do gerenciador de fila. O endereo dessa matriz de filas de destino pode ser especificado de duas maneiras: - Usando o campo ObjectRecOffset offset, dando o deslocamento do primeiro elemento na matriz a partir do incio da estrutura MQOD. Isto comum quando se utiliza COBOL, por exemplo:

- Usando o campo ObjectRecPtr ponteiro, dando o endereo da matriz de Registros MQOR. Esta a abordagem habitual em C, por exemplo

A estrutura MQRR contm a concluso e cdigo de razo para um determinado de destino na lista de distribuio. Se qualquer um dos destinos no conseguem abrir, este MQRR variedade nos permite reconhecer a fila com o problema e tomar algumas ao corretiva. Consulte o Exemplo 3-1.

Algumas outras opes disponveis quando abrir uma fila so considerados em sua contexto especfico nas seguintes sees.

3.5.4 Fechando o objeto MQSeries

Para fechar um MQSeries object usamos a chamada MQCLOSE. MQCLOSE (Hconn, Hobj, Options, CompCode, Reason) Esta chamada recebe a seguinte entrada: - Lidar com uma conexo. - O identificador do objeto que deseja fechar. - As opes mais prximos. O resultado desta chamada : - Os cdigos de resultado (concluso e cdigo de razo). - A ala do objeto, para repor o valor MQHO_UNUSABLE_HOBJ. A menos que voc est fechando uma fila dinmica permanente, as opes prximos sero MQCO_NONE. Normalmente uma fila dinmica excludo uma vez que o programa que criou o que chama de uma MQCLOSE para essa fila, mas no caso de filas dinmicas permanentes, eles pode ser retida pelo gerenciador de filas ou excludos, dependendo das opes utilizadas na chamada MQCLOSE.

recomendado que voc feche todos os objetos do MQSeries antes da aplicao acabamentos.

3.5.5 Desligar do gerenciador de filas


O ltimo passo em um programa MQSeries desconectar-se do gerenciador de filas. Isto pode ser feito com a chamada MQDISC. MQDISC (Hconn, CompCode, Reason)

Para esta chamada, voc deve fornecer o identificador de conexo para o gerenciador de filas. Depois a execuo desta chamada, o identificador de conexo ter um

3.5.6 Colocar mensagens em uma fila


Para colocar uma mensagem em uma fila a API MQI d ao programador duas opes: - Coloque vrias mensagens para uma fila j aberta. - Coloque uma nica mensagem para uma fila sem ter que abri-lo explicitamente. Para colocar vrias mensagens em uma fila podemos utilizar a chamada MQPUT: MQPUT (Hconn, Hobj, MsgDesc, PutMsgOpts, BufferLength, Buffer,CompCode, Reason) Esta chamada recebe: - Um identificador de conexo, como retornado pela chamada MQCONN (em CICS em MVS / ESA e AS/400 aplicaes, tambm pode ser o MQHC_DEF_HCONN constante). - Um identificador de fila, como retornado pela chamada MQOPEN. - A descrio da mensagem que voc quer colocar na fila, na forma de um descritor de mensagem. - Informaes de controle, na forma de uma opes de put-mensagem (MQPMO) estrutura. - O comprimento dos dados contidos na mensagem. - A mensagem em si.

O resultado desta chamada : - Os cdigos de resultado (concluso e cdigos de razo). - Atualizado descritor de mensagem e as opes se a chamada foi executado com sucesso. A fila deve ser aberto com a opo MQOO_OUTPUT, antes de qualquer nmero de chamadas para esta funo pode ser feita. O descritor de mensagem de actualizao ir ter a MsgId da mensagem, se a primeira estrutura solicitou que o gerenciador de filas gerar um valor nico para o mensagem. A estrutura opes retorna com o nome da fila e a fila gerente para que a mensagem foi enviada.

Colocar mensagens de fila mltipla de uma s vez

Voc tambm pode colocar mensagens para uma lista de distribuio. A mensagem enviada para todos os filas na lista de distribuio com uma nica MQPUT ou MQPUT1 chamada.Neste caso os parmetros de entrada de chamadas MQPUT esto: - Lidar com uma conexo. - Um identificador de objeto para a lista de distribuio aberto usando chamada MQOPEN, como mostrado anteriormente neste captulo. - A estrutura do descritor de mensagem (MQOD). - Informaes de controle geral. - Informaes de controle na forma de Put Mensagem Registros (MQPMR). - O comprimento dos dados contidos na mensagem. - A mensagem em si.

O resultado desta chamada : - Os cdigos de resultado (concluso e cdigos de razo). - Registros de resposta. A estrutura MQPMR d informaes especficas do destino para alguns campos que podem ser diferentes daqueles j na estrutura MQMD.

3.5.7 Recebendo mensagens de uma fila


Para obter mensagens de uma fila, podemos usar a chamada MQGET.

MQGET (Hconn, Hobj, MsgDesc, GetMsgOpts, BufferLength, Buffer,DataLength, CompCode, Reason) Os parmetros de entrada para este concurso so: - Lidar com uma conexo. - A pega fila. - A descrio da mensagem que queremos obter da fila na forma de um Estrutura MQMD. - Informaes de controle na forma de um GET Opes de Mensagens (MQGMO) estrutura. - O tamanho da memria intermdia, em que a mensagem vai ser armazenado. - O endereo do buffer. O resultado desta chamada : - Os cdigos de resultado (razo e cdigos de concluso). - A mensagem no buffer especificado, se a chamada for concluda com xito. - A estrutura de opes, modificada para mostrar o nome da fila a partir do qual a mensagem foi recuperada. - A estrutura do descritor de mensagem, com a informao de que a mensagem est recuperada. - O comprimento real da mensagem.

Recebendo uma mensagem especfica de uma fila


As mensagens tambm podem ser obtidas com base na sua descrio, conforme previsto no Estrutura MQMD. Os campos msgID CorrelId e pode ser usado para se referir a uma mensagem especfica, mas uma vez que pode ser definido pelo aplicativo que pode no ser nico. Nestes casos a primeira mensagem que corresponde a todos os critrios estabelecidos recuperado, e a chamada pode ser repetida para obter o resto das mensagens. Se a estrutura MQMD verso 2 usado, ento a GroupId, MsgSeqNumber, e Campos de deslocamento pode ser usado, tambm. Um valor no-match pode ser especificado em qualquer um desses campos para o campo no considerado enquanto procura um jogo. Utilizando a estrutura do MQMD verso 2, ele Tambm possvel declarar quais campos usar durante a varredura fila. O seguinte trecho de cdigo mostra como definir um CORRELID como a pesquisa de mensagens chave antes da chamada MQGET:

3.5.8 Tpicos avanados


As sees a seguir abordam navegao mensagens em uma fila e perguntando sobre e definindo os atributos de objeto. Vendo mensagens em uma fila Para procurar mensagens em uma fila, temos: - Chame MQOPEN para abrir a fila para navegar, especificando o Opo MQOO_BROWSE. - Chamada MQGET com a opo MQGMO_BROWSE_FIRST para recuperar o primeiro mensagem na fila. - Repetidamente chamar MQGET com a opo MQGMO_BROWSE_NEXT para a etapa atravs de muitas mensagens, definindo o nulo MsgId e CorrelId antes de qualquer novo MQGET chamar.

- Feche a fila usando a chamada MQCLOSE. Ao navegar mensagens, da mesma forma como quando recebendo mensagens de um fila, as mensagens so apresentadas em qualquer ordem fsica ou lgica

- Ou a opo MQGMO_BROWSE_NEXT MQGMO_BROWSE_FIRST ou. - A opo MQGMO_ACCEPT_TRUCATED_MSG. - Tamanho do buffer de zero (0). Devolve o tamanho da mensagem no parmetro DataLength. Indagando sobre a criao e atributos do objeto Para saber mais sobre os atributos de um objeto, podemos usar a chamada MQINQ. MQINQ (Hconn, Hobj, SelectorCount, Selectors, IntAttrCount, IntAttrs,CharAttrLength, CharAttrs, CompCode, Reason)

Como entrada para esta chamada, que deve fornecer: - Lidar com uma conexo. - Um identificador de objeto, conforme retornado pela chamada MQOPEN. O objecto pode ser aberta qualquer um dos possveis objetos especificados no 3.5.3, "Abrindo objetos do MQSeries" na pgina 35. - O nmero de seletores. - Uma matriz de seletores de atributos. Os seletores podem representar tanto um integer (MQIA_ *) ou personagem (MQCA_ *) atributos e podem ser especificadas em qualquer ordem. - O nmero de atributos inteiros sendo perguntou. - Uma matriz de variveis inteiras onde a chamada retorna os atributos inteiros especificada. - O comprimento do caracter atribui tampo. O tampo deve ser de pelo menos o soma do comprimento de todos os atributos de carter perguntou. - O buffer de caracteres onde a chamada coloca os valores dos atributos de caracteres perguntou. A sada para esta chamada : - Um conjunto de valores de atributo inteiros copiados para a matriz. - O buffer no qual os atributos de caracteres so retornados. - Os cdigos de resultado (concluso e cdigos de razo). Uma lista completa dos atributos selectores podem ser encontrados no Pedido Programao de Referncia.

No caso dos atributos de caracteres, o tampo resultante preenchida com os atributos valores, um aps o outro, com um comprimento fixo. Se o valor real de qualquer destas atributos menor do que o comprimento fixo do atributo, o resto do espao preenchido com espaos em branco. Se qualquer um dos atributos requeridos para o objecto (neste caso, um fila) faz no aplicvel a esse tipo de fila, o espao preenchido com um asterisco (*). Exemplo 3-6 mostra como obter informaes sobre os atributos de uma fila:

Definindo atributos de objeto Somente os objetos da fila aceitar uma operao de conjunto. Para definir atributos de uma fila que usamos a chamada MQSET. MQSET (Hconn, Hobj, SelectorCount, Selectors, IntAttrCount, IntAttrs,CharAttrLength, CharAttrs, CompCode, Reason)

Os parmetros para essa chamada so os mesmos daqueles da chamada MQINQ. Todos eles so parmetros de entrada, exceto o cdigo de concluso e cdigo de razo. Estes so os atributos que podem ser definidos usando a chamada MQSET: _ InhibitGet (but not for remote queues) _ DistList _ InhibitPut _ TriggerControl _ TriggerType _ TriggerDepth _ TriggerMsgPriority _ TriggerData Example 3-7 shows how to inhibit put operations on a queue:

3.6 Transaces em MQI


Unidades locais ou globais de trabalho pode ser iniciado usando a API MQI. uma vez comeou, qualquer unidade de trabalho concludo usando chamadas MQCMIT ou MQBACK. MQCMIT (Hconn, CompCode, Reason) MQBACK (Hconn, CompCode, Reason) A unidade local de trabalho iniciado quando MQPMO_SYNCPOINT ou MQGMO_SYNCPOINT est codificada numa chamada MQPUT e um ou MQGET MQBEGIN chamada no foi feita, como se segue:

Uma unidade global de trabalho comea quando uma chamada feita MQBEGIN. Se uma unidade local de trabalho j foi iniciado, a chamada MQBEGIN falha com um MQRC_UOW_IN_PROGRESS razo.

3.7 Mensagem agrupamento em MQI (Message grouping in MQI)


Conforme explicado no Captulo 2, "Mensagens e as APIs", na pgina 11, mensagem agrupamento permite adicionar alguma lgica de agrupamento para as mensagens sem ter que codificar toda essa lgica para a aplicao. O agrupamento administrado pela fila gerente, e fornece recursos bsicos, tais como pedidos e concluso do grupo controlar. A identificao do grupo introduzido na estrutura do descritor de mensagem (MQMD) enviada juntamente com a mensagem, quando se utiliza um MQPUT ou MQPUT1 chamada. Cada mensagem no grupo deve ter a bandeira MQMF_MSG_IN_GROUP mas o ltimo, que tem uma bandeira MQMF_LAST_MSG_IN_GROUP vez. o ordem das mensagens no grupo armazenado no campo da MsgSeqNumber Estrutura MQMD, que gerado automaticamente pelo gerenciador de filas. O fragmento de cdigo a seguir mostra como enviar trs mensagens como parte de um grupo de mensagens:

3.8 Explorando os padres (3.8 Exploring the patterns)

Nesta seo, vamos explorar os padres apresentados no Captulo 2, "Mensagens e as APIs "na pgina 11 usando o C ANSI implementao da API MQI em um Ambiente Microsoft Windows. Todos estes exemplos podem ser modificados para trabalhar com qualquer outra plataforma e linguagem disponvel. O cdigo completo para estes exemplos podem ser encontrados nos materiais adicionais que pode ser baixado do site da IBM Redbooks.

3.8.1 A um-para-um, ou de ponto a ponto padro


Tal como explicado no Captulo 1, "Introduction and padres" na pgina 3, a um-paraum ou um padro de programao ponto-a-ponto pode ser usado para enviar um e esquecer cenrio, bem como um cenrio de pedido / resposta, ou qualquer combinao desses.

A seguir, apresentamos um exemplo simples de cada um deles. Os dados de mensagem utilizados nestes exemplos no tem qualquer lgica comercial, mas o exemplo pode ser facilmente modificado para ser aplicado numa situao real. Enviar e esquecer (Send-and-forget) Este exemplo simples do padro send-and-forget contm dois programas. o primeiro um age como o remetente da mensagem, enquanto o segundo atua como a mensagem consumidor. Sem resposta ou reconhecimento est prevista para o remetente e nada enviado de volta pelo consumidor. O programa transmissor mostrado no Exemplo 3-8 segue o fluxo lgico a seguir: -Conectar a um gerenciador de filas - Abra a fila de PTP.QUEUE.LOCAL para a sada - Prepara-se uma mensagem a ser enviada - Envie a mensagem para a fila aberto - Fechar a fila - Desconectar-se do gerenciador de filas

O pedido / resposta (Request/reply)


Assim como no-e-esquea de envio de amostra padro, este pedido / resposta de amostra contm dois programas. A primeira envia uma mensagem de pedido para uma fila (o PTP.QUEUE.LOCAL fila), e espera por uma resposta em outra fila (o Fila PTP.REPLY.QUEUE.LOCAL). O segundo programa atua como replier e ele comea a ler mensagens de uma fila (fila PTP.QUEUE.LOCAL). Sempre que uma mensagem colocada na fila, ele envia uma resposta genrica ao Fila PTP.REPLY.QUEUE.LOCAL.

3.8.2 A publicao / assinatura padro(The publish/subscribe pattern)


O padro de publicao / assinatura tem dois componentes principais, conforme explicado no 1.1.5, "Publish / subscribe" na pgina 7. - O editor: Este componente o que realmente publica os tpicos o fluxo de corretor. - O assinante: Este componente representa um cliente do editor ou Publishers. Ele se inscreve para um ou vrios tpicos, e aguarda qualquer publicao sobre estes temas a serem enviados a ele pelo corretor. Vamos explorar esses dois componentes com um exemplo simples, onde uma editora programa publica alguns dados em um determinado tpico e qualquer nmero de assinantes receber os dados e mostr-la na sada padro. Editor (Publisher) O programa editora aqui apresentado est dividido em trs funes: - A funo BuildMQRFHeader Esta funo constri uma estrutura de dados MQRFH e acrescenta o exigido valor / par no final dessa estrutura.

- A funo PutPublication Esta funo responsvel por enviar os comandos reais publicao para o corretor usando a fila de fluxo. - A funo principal Esta funo constri a mensagem publicao e envia-lo para o fluxo fila. Exemplo 3-12 apresenta a funo BuildMQRHeader descrito acima. Este cdigo foi tomada a partir das amostras C que vm com o Publish / Subscribe SupportPac.

Assinante (Subscriber)

O programa assinante aqui apresentado basicamente dividido em quatro funes: - A funo BuildMQRFHeader Esta funo constri uma estrutura de dados MQRFH e acrescenta o exigido valor / par no final dessa estrutura. - A funo CheckForResponse Esta funo aguarda um reconhecimento de assinatura do corretor, e que valida a inscrio foi aceita com sucesso. - A funo PubSubCommand Esta funo cria e envia um comando publish / subscribe para o corretor e verifica a resposta corretor utilizando a funo CheckForResponse. - A funo principal Esta funo proporciona dois comportamentos possveis, dependendo do nmero de parmetros utilizados ao chamar este programa: - Se dois parmetros so especificados, o primeiro parmetro tomado como o cliente fila onde o corretor ir enviar as publicaes para o cliente, e o segundo parmetro utilizado como o CorrelationID usado para identificar o publicao deste cliente especfico. A principal funo registra o cliente com o tema e comea um loop infinito ficando publicaes. - Se um terceiro parmetro for especificado, a funo principal de-registra o cliente do tema e acabamentos. A funo CheckResponse usa a funo PrintNameValueString, que basicamente imprime os pares nome / valor para a tela. Esta funo no mostrado aqui, mas est disponvel nos materiais adicionais que podem ser baixados da Web site da IBM Redbooks. Exemplo 3-15 mostra a funo BuildMQRHeader descrito acima. Este cdigo foi tomada a partir das amostras C que vm com o Publish / Subscribe SupportPac.