As redes sociais estão em toda parte hoje em dia – seja para
conectar-se com amigos ou para permanecer informado e informar outros
sobre tópicos de interesse mútuo. Além disso, mostram-se úteis inclusive no ambiente empresarial. Algumas organizações estão começando a implementar aplicativos de redes sociais internos e já é possível utilizar produtos específicos para a configuração em escala empresarial.
Neste artigo vamos mostrar como é
rápido e fácil habilitar aplicativos WebSphere MQ para usar software de
redes sociais, enviar informações sobre problemas
e status para uma ampla audiência de administradores de sistemas e
usuários finais, e até mesmo para outros aplicativos e itens de
middleware.
Usaremos o WebSphere MQ e a API do
Twitter com tecnologia JEE (beans simples acionados por mensagem)
voltados para o runtime do WebSphere Application Server Community
Edition como referência em um sistema de mensagens empresariais.
Os três exemplos deste
artigo usam o Twitter, mas qualquer site de redes sociais com uma API
pode ser usado. Os três exemplos envolvendo MQ e Twitter são:
- Uma fila simples, da qual mensagens de texto são recuperadas e publicadas diretamente no Twitter
- Eventos de gerenciador de fila, como a criação ou a exclusão de uma fila
- Um exemplo de publicação/assinatura usando o WebSphere MQ File Transfer Edition (doravante designado como WebSphere MQ FTE)
Outra abordagem é usar um aplicativo Java autônomo com um
ouvinte de mensagens. As listagens de código a seguir são trechos
extraídos de um arquivo zip que contém todos os arquivos de origem
necessários para executar o exemplo. Faça download do arquivo zip e comece seus testes.
API do Twitter
Muitas bibliotecas Java fornecem uma interface com a API do Twitter. Os
exemplos deste artigo usam as bibliotecas HTTP Apache Commons para se
comunicar com ela. A API do Twitter é uma especificação bem documentada – para obter mais informações, consulte o Wiki da API do Twitter.
A Listagem 1 mostra o método Java usado para tuitar uma determinada
mensagem. A classe Java completa pode ser consultada no arquivo zip
disponível para download.
Listagem 1. TwitterPlugin.java: método sendNotification()
<strong>public void sendNotification(String message) {<br /><br /> if(message.length() > 140) {<br /> System.err.println("Message will be truncated from: "<br /> + message + " to: " + message.substring(0, 140));<br /> }<br /><br /> PostMethod post = null;<br /> try {<br /> HttpClient client = new HttpClient();<br /> client.getParams().setAuthenticationPreemptive(true);<br /> client.getState().setCredentials(new AuthScope("twitter.com", 80, "realm"),<br /> new UsernamePasswordCredentials(getUsername(), getPassword())); <br /> post = new PostMethod("http://twitter.com/statuses/update.xml");<br /> post.setQueryString(URIUtil.encodeQuery("status="+message));<br /> post.setDoAuthentication( true );<br /><br /> // execute the GET<br /> int status = client.executeMethod( post );<br /> // print the status and response<br /> System.out.println("Status: " + status);<br /><br /> } catch (URIException e ) {<br /> System.err.println(e.getMessage());<br /> } catch (HttpException e) {<br /> System.err.println(e.getMessage());<br /> } catch (IOException e) {<br /> System.err.println(e.getMessage());<br /> } finally {<br /> // release any connection resources used by the method<br /> if(post != null) {<br /> post.releaseConnection();<br /> }<br /> }<br />} <br /></strong>MDB de mensagem de texto simples
Usando mensagens de texto simples, é possível transformar rapidamente
mensagens do MQ em Tweets. Este exemplo usa uma fila padrão do MQ. Para
acionar o exemplo, você pode usar qualquer aplicativo que coloque uma
mensagem de texto na fila, como o exemplo amqsput incluído com o
WebSphere MQ. Aqui está o código MDB:
Listagem 2. SimpleMQEJB.java: método onMessage()
<strong>public void onMessage(Message message) {<br /><br /> if(message instanceof TextMessage) {<br /> try {<br /> /* Put your twitter username and password here */<br /> TwitterPlugin tp = new TwitterPlugin("YOUR_TWITTER_USERNAME",<br /> "YOUR_TWITTER_PASSWORD");<br /> String output = ((TextMessage) message).getText();<br /> tp.sendNotification(output);<br /> } catch(JMSException e) {<br /> e.printStackTrace();<br /> } <br /> } else {<br /> System.err.println("This application requires" +<br /> " a message in TextMessage format");<br /> }<br />}</strong>O código é simples: O conteúdo da Mensagem do MQ é extraído, truncado
para 140 caracteres e postado usando o código TwitterPlugin.java. A
Figura 1 mostra um exemplo de saída em minha conta do Twitter mq_tweet:
Figura 1. Mensagem de texto simples como um tweet

MDB de mensagem de evento do MQ
O WebSphere MQ fornece informações sobre erros, avisos e outras ações significativas em um gerenciador de fila por meio do MQ Events Messaging. Quando é configurado para fazer isso, o WebSphere MQ coloca uma mensagem em uma fila específica, a partir da qual um aplicativo pode subsequentemente extrair a mensagem e executar ações baseadas no seu conteúdo.
Caso necessite conhecer mais conteúdo sobre os tipos de eventos do WebSphere MQ, consulte o tópico Event monitoring no centro de informações do WebSphere MQ. Para habilitar mensagens de evento para um gerenciador de fila do MQ, siga as instruções fornecidas em Controlling configuration, command, and logger events.
A Listagem 3 mostra outro MDB, desta vez configurado para ler da fila SISTEM.ADMIN.CONFIG.EVENT. Esse MDB recebe a mensagem e, usando lógica simples, decide qual mensagem enviar para o Twitter:
Listagem 3. MQEventMDB.java: método onMessage()
public void onMessage(Message msg) { if(msg == null)return; if (msg instanceof TextMessage) { TextMessage txtMsg = (TextMessage) msg; try { System.out.println("Received TextMessage: " + txtMsg.getText()); } catch (JMSException e) { e.printStackTrace(); } } if (msg instanceof BytesMessage) { JMSBytesMessage bytesMsg = (JMSBytesMessage) msg; int bodySize; try { bodySize = (int) bytesMsg.getBodyLength(); byte[] data = new byte[bodySize]; bytesMsg.readBytes(data); ByteArrayInputStream bais = new ByteArrayInputStream(data); DataInput dataInput = new DataInputStream(bais); PCFMessage response = new PCFMessage(dataInput); int reason = response.getReason(); int type = response.getIntParameterValue(MQConstants.MQIACF_OBJECT_TYPE); if(type == MQConstants.MQOT_Q) { publishQueueEvent(response, null); } else { System.out.println("Object Type received: " + reason); } } catch (Exception e) { e.printStackTrace(); } } } <br />|-------10--------20--------30--------40--------50--------60--------70--------80--------9|<br />|-------- XML error: The previous line is longer than the max of 90 characters ---------|Como as mensagens de Evento do MQ são publicadas em formato PCF, é
necessário converter o objeto JMSBytesMessage em um objeto PCFMessage.
Essa conversão é feita lendo os bytes da mensagem de entrada e criando
um objeto DataInput para ser passado ao construtor do PCFMessage. A
Figura 2 é um exemplo da saída gerada quando uma fila é criada:
Figura 2. Mensagem de evento de criação de fila como um tweet

MDB de Mensagem de Transferência do WebSphere MQ FTE
O WebSphere MQ FTE é uma nova edição de WebSphere MQ que gerencia
transferências de arquivos seguras e confiáveis e publica mensagens que
fornecem um log de auditoria das transferências.
Para obter informações
sobre o esquema XML dessas mensagens de auditoria, consulte o tópico Message formats
no centro de informações do WebSphere MQ FTE. Usando uma combinação de
um MDB e algum código JAXB, é possível habilitar a geração de tweets
sobre o início e o término de transferências de arquivos e até incluir
algumas marcações de hash dentro dos metadados de uma transferência.
A Listagem 4 é o MDB específico do WebSphere MQ FTE. Em vez de se
conectar a uma fila, você está se conectando a um tópico do FTE. Os
metadados associados à transferência do arquivo são anexados à mensagem
de status caso o nome dos metadados comece com a palavra Twitter. Por
exemplo, Twitter.tag=SimpleTweet resulta na anexação de #SimpleTweet à mensagem enviada:
Listagem 4. MQEventMDB.java: método onMessage()
public void onMessage(Message message) {<br /><br /> if(message instanceof TextMessage) { <br /> try {<br /> TwitterPlugin tp = new TwitterPlugin("YOUR_USERNAME", "YOUR_PASSWORD");<br /> String output = ((TextMessage) message).getText();<br /> String notification = null; <br /> if(output.contains("TransferLog.xsd")) {<br /><br /> if(output.contains("started")) {<br /> Transaction transaction = generateTransaction(output);<br /> String transferName = getJobName(transaction);<br /> String twitterTags = getTwitterTags(transaction);<br /> notification = "Transfer started: " + transferName;<br /> if(notification.length() "<" (140 - twitterTags.length())) {<br /> notification = notification + " #ftetweet" + " " + twitterTags;<br /> }<br /> } else if(output.contains("completed")) {<br /> Transaction transaction = generateTransaction(output);<br /> String transferName = getJobName(transaction);<br /> String twitterTags = getTwitterTags(transaction);<br /> String transferFailed = "";<br /> if(transaction.getStatus().getResultCode() != 0) {<br /> transferFailed = " Transfer Failed (RC=" + <br /> transaction.getStatus().getResultCode()+")";<br /> }<br /><br /> notification = "Transfer complete: " + transferName + transferFailed;<br /> if(notification.length() "<" (140 - twitterTags.length())) {<br /> notification = notification + " #ftetweet" +<br /> " " + twitterTags;<br /> }<br /> }<br /> }<br /> if(notification != null) {<br /> tp.sendNotification(notification);<br /> }<br /> } catch (Exception e) {<br /> e.printStackTrace();<br /> }<br /> } else {<br /> System.err.println("This application requires a message in TextMessage format");<br /> }<br />}As Figuras 3 e 4 a seguir mostram os tweets gerados pelo início e pelo término de uma transferência de arquivo:
Figura 3. Início da transferência de arquivo do WebSphere MQ FTE

Figura 4. Conclusão da transferência de arquivo do WebSphere MQ FTE

Conclusão
Fica claro como a conexão de gerenciadores de fila do
WebSphere MQ ou aplicativos WebSphere MQ ao Twitter é simples e
altamente eficaz para transmitir mensagens de status às partes
interessadas. Uma implementação de software livre em estilo Twitter,
chamada StatusNet (anteriormente
conhecida como Laconica), pode ser implementada dentro da empresa e usa
exatamente a mesma API do Twitter, permitindo às empresas configurar e
implementar rapidamente uma infraestrutura de redes sociais.
É fácil
substituir Twitter por Status.net e começar a publicar informações
sobre o trabalho da empresa sem se preocupar com a possibilidade de que
informações confidenciais ou reservadas sejam publicadas em domínio
público.
Continue aproveitando os benefícios do WebSphere MQ através da página de recursos, além de conferir o trial da última versão.
*
artigo publicado originalmente em IBM developerWorks, por Rich Cumbers
Rich Cumbers é Software Developer na equipe do
WebSphere MQ File Transfer Edition (FTE) do IBM Hursley Software Lab no
Reino Unido. Durante quatro anos, trabalhou para a IBM no WebSphere MQ
e no WebSphere MQ FTE. Sua carreira até o momento abrangeu a maioria
das disciplinas de desenvolvimento de software, incluindo
desenvolvimento, testes e desempenho. Você pode entrar em contato com
Rich pelo e-mail rich.cumbers@uk.ibm.com.







