<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8571396175573944921</id><updated>2011-12-23T03:24:45.257-08:00</updated><category term='Red Hat'/><category term='webMethods'/><category term='Certificação'/><category term='Messaging'/><category term='ESB'/><category term='BizTalk'/><category term='CORBA'/><category term='Java 7'/><category term='AquaLogic'/><category term='CICS'/><category term='EII'/><category term='Governança'/><category term='Progress'/><category term='Oracle'/><category term='SOA'/><category term='Middleware'/><category term='RPM'/><category term='Azure'/><category term='JBoss ESB'/><category term='Guvnor'/><category term='BEA'/><category term='SAP'/><category term='JNDI'/><category term='Drools'/><category term='RUP'/><category term='BTM'/><category term='InfiniBand'/><category term='EDA'/><category term='Eventos'/><category term='Quick Tip'/><category term='EAI'/><category term='AMQP'/><category term='EUP'/><category term='Tuxedo'/><category term='Cloud'/><category term='Sites'/><category term='JBoss Portal'/><category term='JBoss'/><category term='Savvion'/><category term='XSLT'/><category term='BTA'/><category term='Portal'/><category term='Web Services'/><category term='C/C++'/><category term='Others'/><category term='jBPM'/><category term='BPM'/><category term='BAM'/><category term='Rules'/><category term='CEP'/><category term='Coherence'/><category term='UDDI'/><category term='BRMS'/><category term='Actional'/><category term='Java'/><category term='TDC 2010'/><category term='BPEL'/><category term='SLA'/><category term='Reuso'/><category term='Engineerd Systems'/><category term='Exalogic'/><category term='JDK'/><category term='VAS'/><category term='COBOL'/><category term='Agile'/><category term='Sonic'/><category term='RiftSaw'/><category term='RoR'/><category term='BPA'/><category term='SDP'/><category term='Processo'/><category term='CMMI'/><category term='.NET'/><category term='Overloard'/><title type='text'>Ricardo Ferreira's Blog</title><subtitle type='html'>Hi everyone, be welcome to my blog. Here, you will get very interesting information about subjects like software architecture, EAI, BPM, SOA and Java! The opinions expressed at this blog are responsibility of the author and it not represents any opnion of the company that I'm working.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://architecture-journal.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8571396175573944921/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://architecture-journal.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/8571396175573944921/posts/default?start-index=101&amp;max-results=100'/><author><name>Ricardo Ferreira</name><uri>http://www.blogger.com/profile/11930306647022714836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/-5T0r_5klxDA/Tn5CEvZpK0I/AAAAAAAABEg/MyTJuGi12ag/s220/ricardo-ferreira-Grande.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>140</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8571396175573944921.post-8807605094569654745</id><published>2011-10-28T13:37:00.000-07:00</published><updated>2011-11-01T05:58:44.134-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Engineerd Systems'/><category scheme='http://www.blogger.com/atom/ns#' term='SDP'/><category scheme='http://www.blogger.com/atom/ns#' term='JDK'/><category scheme='http://www.blogger.com/atom/ns#' term='Java 7'/><category scheme='http://www.blogger.com/atom/ns#' term='InfiniBand'/><category scheme='http://www.blogger.com/atom/ns#' term='Exalogic'/><title type='text'>Enabling HPC (High Performance Computing) with InfiniBand in Java™ Applications</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-NTsMOyMDtJ0/TqsUlYRCBFI/AAAAAAAABHI/YKqzR6rwBFU/s1600/java_clr_vert.gif"&gt;&lt;img style="float: left; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 84px; height: 134px;" src="http://1.bp.blogspot.com/-NTsMOyMDtJ0/TqsUlYRCBFI/AAAAAAAABHI/YKqzR6rwBFU/s200/java_clr_vert.gif" alt="" id="BLOGGER_PHOTO_ID_5668647188377502802" border="0" /&gt;&lt;/a&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;Publiquei recentemente em meu &lt;a href="http://blogs.oracle.com/middlewareplace/"&gt;blog&lt;/a&gt; da &lt;a href="http://www.oracle.com/index.html"&gt;Oracle&lt;/a&gt; um artigo sobre como habilitar aplicações &lt;a href="http://www.oracle.com/technetwork/java/javase/overview/index.html"&gt;Java&lt;/a&gt; para usufruir de computação de alta performance (do inglês, &lt;span&gt;High Performance Computing&lt;/span&gt;) usando a tecnologia &lt;a href="http://en.wikipedia.org/wiki/InfiniBand"&gt;InfiniBand&lt;/a&gt;. Este artigo pode ajudar você a migrar aplicações existentes ou que estão sendo contruídas para sistemas projetados que utilizam a tecnologia InfiniBand, como é o caso de produtos como o &lt;a href="http://www.oracle.com/us/products/middleware/exalogic/overview/index.html"&gt;Oracle Exalogic&lt;/a&gt;. Fazendo isso, você pode chegar a niveis altíssimos de performance e escalabilidade que somente a tecnologia InfiniBand pode oferecer. Caso você tenha interesse de conferir este artigo na sua íntegra, clique &lt;a href="http://blogs.oracle.com/middlewareplace/entry/enabling_high_performance_computing_with"&gt;aqui&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8571396175573944921-8807605094569654745?l=architecture-journal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://architecture-journal.blogspot.com/feeds/8807605094569654745/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8571396175573944921&amp;postID=8807605094569654745' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8571396175573944921/posts/default/8807605094569654745'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8571396175573944921/posts/default/8807605094569654745'/><link rel='alternate' type='text/html' href='http://architecture-journal.blogspot.com/2011/10/publiquei-recentemente-em-meu-blog-da.html' title='Enabling HPC (High Performance Computing) with InfiniBand in Java™ Applications'/><author><name>Ricardo Ferreira</name><uri>http://www.blogger.com/profile/11930306647022714836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/-5T0r_5klxDA/Tn5CEvZpK0I/AAAAAAAABEg/MyTJuGi12ag/s220/ricardo-ferreira-Grande.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-NTsMOyMDtJ0/TqsUlYRCBFI/AAAAAAAABHI/YKqzR6rwBFU/s72-c/java_clr_vert.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8571396175573944921.post-154982434794213850</id><published>2011-10-12T07:46:00.000-07:00</published><updated>2011-10-12T07:55:17.061-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CICS'/><category scheme='http://www.blogger.com/atom/ns#' term='Tuxedo'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='COBOL'/><category scheme='http://www.blogger.com/atom/ns#' term='CORBA'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><category scheme='http://www.blogger.com/atom/ns#' term='Middleware'/><title type='text'>Getting Started with Oracle Tuxedo: Creating a COBOL-based Application</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-keZGnPJ4m8Y/TpWpseCnfwI/AAAAAAAABGo/xVcNGtc_f1Y/s1600/oracle-fmw-tuxedo.png"&gt;&lt;img style="float: left; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 200px; height: 92px;" src="http://4.bp.blogspot.com/-keZGnPJ4m8Y/TpWpseCnfwI/AAAAAAAABGo/xVcNGtc_f1Y/s200/oracle-fmw-tuxedo.png" alt="" id="BLOGGER_PHOTO_ID_5662618687931645698" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family: verdana;"&gt;Publiquei recentemente em meu blog da &lt;/span&gt;&lt;a style="font-family: verdana;" href="http://www.oracle.com/us/index.html"&gt;Oracle&lt;/a&gt;&lt;span style="font-family: verdana;"&gt; um artigo bem interessante que fala sobre a utilização da linguagem de programação COBOL para a construção de aplicações distribuídas, usando como middleware o &lt;/span&gt;&lt;a style="font-family: verdana;" href="http://www.oracle.com/technetwork/middleware/tuxedo/overview/index.html"&gt;Oracle Tuxedo&lt;/a&gt;&lt;span style="font-family: verdana;"&gt;, o monitor transacional líder de mercado e mais maduro do mundo. Se você programa na linguagem de programação COBOL ou, é responsável pela manutenção de aplicações escritas nesta linguagem mas que precisam ser alteradas para usufruir de características como transações distribuídas, segurança centralizada, federação de domínios, alta performance e escalabilidade, então esse artigo possa lhe ser interessante. Confira esse artigo clicando &lt;a href="http://blogs.oracle.com/middlewareplace/entry/getting_started_with_oracle_tuxedo"&gt;aqui&lt;/a&gt;.&lt;/span&gt;&lt;span style="font-family: verdana;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8571396175573944921-154982434794213850?l=architecture-journal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://architecture-journal.blogspot.com/feeds/154982434794213850/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8571396175573944921&amp;postID=154982434794213850' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8571396175573944921/posts/default/154982434794213850'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8571396175573944921/posts/default/154982434794213850'/><link rel='alternate' type='text/html' href='http://architecture-journal.blogspot.com/2011/10/getting-started-with-oracle-tuxedo.html' title='Getting Started with Oracle Tuxedo: Creating a COBOL-based Application'/><author><name>Ricardo Ferreira</name><uri>http://www.blogger.com/profile/11930306647022714836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/-5T0r_5klxDA/Tn5CEvZpK0I/AAAAAAAABEg/MyTJuGi12ag/s220/ricardo-ferreira-Grande.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-keZGnPJ4m8Y/TpWpseCnfwI/AAAAAAAABGo/xVcNGtc_f1Y/s72-c/oracle-fmw-tuxedo.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8571396175573944921.post-6974050045789603645</id><published>2011-07-27T09:30:00.001-07:00</published><updated>2011-07-30T09:47:14.279-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='EDA'/><category scheme='http://www.blogger.com/atom/ns#' term='Cloud'/><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='Coherence'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><title type='text'>Elastic Data Caching usando Oracle Coherence</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-SRcGndIdOn4/TjGv1a0AeoI/AAAAAAAABEY/xnp8YAchDs8/s1600/oracle_coherence.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 80px;" src="http://1.bp.blogspot.com/-SRcGndIdOn4/TjGv1a0AeoI/AAAAAAAABEY/xnp8YAchDs8/s200/oracle_coherence.jpg" alt="" id="BLOGGER_PHOTO_ID_5634477941082585730" border="0" /&gt;&lt;/a&gt;&lt;span style="font-family: verdana;font-family:verdana;font-size:85%;"  &gt;Você parou pra refletir se está preparado pra criar arquiteturas de software emergentes? Arquitetu&lt;/span&gt;&lt;span style="font-family: verdana;font-family:verdana;font-size:85%;"  &gt;ras estas que devem poder suportar o crescimento e a diminuição da utilização dos recursos (poder computacional) sem a necessidade de mudar os componentes internos do software ou mesmo mudá-los toda vez que novos recursos sã&lt;/span&gt;&lt;span style="font-family: verdana;font-family:verdana;font-size:85%;"  &gt;o adicionados ou removidos na camada de infraestrutura. Vemos a cada dia mais e mais casos onde aplicações para web no estilo do &lt;a href="http://www.facebook.com/"&gt;Facebook&lt;/a&gt;, &lt;a href="http://twitter.com/"&gt;Twitter&lt;/a&gt; ou &lt;a href="http://www.linkedin.com/"&gt;Linkedin&lt;/a&gt; são cada vez mais comuns, deixando arquitetos e desenvolvedores de software com um problema complexo pra resolver na hora de construir tais softwares. A demanda por softwares que necessitam suportar mais e mais usuários simultâneos e manter o SLA e o tempo de resposta sempre no nível adequado está maior, e isso é um reflexo na&lt;/span&gt;&lt;span style="font-family: verdana;font-family:verdana;font-size:85%;"  &gt;tural de como as organizações atuais precisam expressar sua competitividade, sua capacidade de dar respostas rápidas a seus clientes e parceiros, bem como a capacidade de atender, de&lt;/span&gt;&lt;span style="font-family: verdana;font-family:verdana;font-size:85%;"  &gt; forma exclusiva e dedicada, seus clientes mais importantes e fiéis.&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify; font-family: verdana;"&gt; &lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Para saber se você está preparado para construir arquiteturas de software emergentes, é necessário que você faça uma reflexão sobre como você lida com a peça fundamental de um sistema baseado em computador: Os dados. O processamento dos dados, termo que não se usa mais hoje em dia mas que ainda cabe e utilização, é o item mais complexo pra se resolver quando se projeta arquiteturas de software que tenham caracteristicas como resiliência, elastici&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;dade, segurança e alta performance. Tudo gira em torno dos dados. Em especial, a análise da quantidade versus o tamanho dos dados trás uma diferença significativa em como seu softw&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;a&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;re irá funcionar.&lt;br /&gt;&lt;br /&gt;Quanto de banda de rede terei que ter entre o servidor X e o servidor Y se a quantidade ou o tamanho dos dados aumentar? Qual a capacidade de storage será necessária pra suportar 10 anos de processamento de folhas de pagamento? Quanto de memória terei que ter caso o número de usuários envolvidos num pregão eletrônico e que estejam dando seus lanc&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;es aumentar? E se a janela de tempo para dar um lance, diminuir de 10 minutos para apenas 1 s&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;egundo, quanto lances a mais o software irá ter que suportar? Todas estas perguntas vão remeter você, arquiteto ou desenvolvedor de software num dilema clássico e recorrente: Como faço&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; para processar os dados sem que a infraestrutura tenha que ser previamente definida e sem que as camadas do software e os seus componentes tenham que ser modificados a cada vez que essa infraestrutura ou sua topologia porventura mudem?&lt;br /&gt;&lt;br /&gt;Neste artigo, irei mostrar como o conceito de "Elastic Data Caching" pode ser usado para resolver alguns destes problemas, bem como quais alternativas no mercad&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;o temos para a implementação deste conceito. Na sequência, irei mostrar na prática, como o &lt;a href="http://www.oracle.com/technetwork/middleware/coherence/overview/index.html"&gt;Oracle Coherence&lt;/a&gt; pode ser usado para a implementação deste conceito, mostrando detalhes deste sua instalação até sua implementação usando a plataforma &lt;a href="http://www.oracle.com/technetwork/java/index.html"&gt;Java&lt;/a&gt;. Em resumo, este artigo abordará os seguintes temas:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Condutores Arquiteturais para Cache e suas Implicações&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Elastic Data Caching: O que é e por quê é tã&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;o importante?&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=" ;font-family:verdana;" &gt;Principais Ofertas de Elastic Data Caching e seus Players&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Oracle Coherence: Visão Geral da Tecnologia e Aplicações&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Demonstração do Oracle Coherence na prática usando Java&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=" ;font-family:verdana;" &gt;Aprofundando no Oracle Coherence: Vídeos e Documentação&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=" font-weight: bold;font-family:verdana;" &gt;Condutores Arquiteturais para Cache e suas Implicações&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Como é de meu costume, gosto sempre de abordar neste blog tecno&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;logias do ponto de vista de seus condutores arquiteturais. Isso é importante porque somente a partir da avaliação dos condutores arquiteturais é que podemos chegar a uma arquitetura de software que reflita os reais requisitos (ou motivadores) paras as tecnologias que deverão ser utilizadas. Sem isso, você fatalmente vai incorrer seus projetos no que chamamos de arquiteturas acidentais, ou seja, arquiteturas de software que introduzem tecnologias e soluções sem nem ao meno&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;s refletirem sobre o real problema ou suas causas. A avaliação dos condutores arquiteturais também ajuda na eleição do melhor &lt;a href="http://msdn.microsoft.com/en-us/library/ee658117.aspx"&gt;estilo arquitetural&lt;/a&gt; (ou conjunto de estilos combinados) para o seu projeto. Se você achar interessante a leitura deste artigo e achar relevante o uso de so&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;luções de cache, não esqueça &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;de avaliar se seu projeto realmente demanda um problema que mereça tal solução.&lt;br /&gt;&lt;br /&gt;Quando você precisa projetar uma arquitetura de software que tenha como característica o baixo tempo de resposta para o processamento de um ou um conjunto de dados, então você terá seu principal condutor arquitetural para usar um&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; cache. Soluções de cache são interessantes porque ajudam a construir software que possa lidar com a impedância de recursos críticos como redes e acesso ao disco. Se o seu software precisa acessar com frequência recursos que necessitam da rede para acesso, ou que dependam da leitura de um disco e que envolva intenso I/O, então um cache é fundamental para o aumento da performance. Não somente rede e acesso a disco podem ser evitados com o uso de cache, mas também o uso intenso da CPU. Imagine por exemplo uma página web que para ser renderizada (ter seu código HTML gerado) precisa realizar uma série de cálculos e passar por um determinado conjunto de etapas de processamento. S&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;e estes cálculos puderem ser feitos uma única vez e estas etapas de processamento também forem imutáveis, entã&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;o é interessante colocar esta página num cache deste a primeira vez que alguém a a&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;cessa. Da próxima vez que esta página for acessada, os ciclos de uso da CPU necessários para a computação da página serão evitados.&lt;br /&gt;&lt;br /&gt;Soluções de cache também podem ser interessantes não só para evitar o uso (ou desperdício) de recursos de infraestrutura, mas também para aju&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;dar no processamento de dados em massa. Aplicações que precisam lidar com fluxos de dados contínuos para análise de identificação de padrões também podem fazer bom uso de soluções de cache. É o caso por exemplo, de aplicações baseadas em &lt;a href="http://www.complexevents.com/event-processing/"&gt;CEP&lt;/a&gt; (Complex Event Processing) onde uma grande quantidade e contínua de eventos (estruturas de dados) precisam ser avaliadas na procura de padrõ&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;es temporais ou comportamentais, possibilitando a identificação de situações e a tomada de ações em tempo real. A baixa latência e o fator "tempo real" aqui só serão possíveis se você puder avaliar c&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ontínuamente os eventos, e isso se torna mais fácil quando estes eventos estão num cache.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-eQeQXIMI6u8/TjDipXinmKI/AAAAAAAABEI/vRcofjfbstU/s1600/elasticCachingData_CEP.PNG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 200px; height: 60px;" src="http://3.bp.blogspot.com/-eQeQXIMI6u8/TjDipXinmKI/AAAAAAAABEI/vRcofjfbstU/s200/elasticCachingData_CEP.PNG" alt="" id="BLOGGER_PHOTO_ID_5634252334162221218" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;Mas o que implica usar uma solução de cache? Vamos pens&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ar por um instante no tamanho dos dados. Soluções de cache tornam eficiente o acesso aos dados porque na maioria das vezes utilizam a memória como componente de armazenamento. Apesar da memória ser eficiente para a leitura e recuperação rápida dos dados em comparação aos discos, ela é menor e mais limitada. Se porventura você tiver que lidar com volumes de dados grandes ou quantidades pequenas mas que tenham um enorme footprint de armazenamento, então você poderá comprometer sua infraestrutura com esta questão de tamanho. Outra questão importante é a coerência [do inglês, &lt;span style="font-style: italic;"&gt;Coherence&lt;/span&gt; :D] dos dados. Os dados num cache são porventura atualizados e removidos com frequência pelos diversos usuários conectados na aplicação. Se estes dados são modificados, então é necessário manter a versão única da verdade destes dados ind&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;epend&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ente de onde eles estejam na infraestrutura. Outra questão relevante quanto aos dados armazenados em cache e &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;em memória é quanto a tolerância falhas. Se os dados estão em memória, então eles são voláteis por natureza. E se o servidor sofrer uma falha e tiver que ser desligado? O que irá acontecer com os dados que estavam em cache? Poderão ser recuperados de forma que não comprometam as transações dos usuários conectados?&lt;br /&gt;&lt;br /&gt;A avaliação dos fatores que decorrem da utilização de soluções de cache é particularmente importante quanto você precisa adquirir uma solução que ofereça isto. Na grande maioria das vezes, você não irá optar por apenas uma solução de cache, mas sim várias. Cada solução de cache irá cobrir um conjunto de problemas e será aplicado a uma parte ou área de sua arquitetura ou infraestrutura. Um bom exemplo é se você estiver pensando em aplicar cache para sua camada de visão e seus recursos de apresentação como páginas estáticas e arquivos de imagens. Um proxy reverso pode ser uma solução interessante para este caso, mas nem tanto para resolver o problema de cache de segundo nível de suas entidade&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;s que s&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ã&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;o armazenadas num banco de dados. Quanto maior o conjunto de recursos e facilidades encontrados numa solução de cache, aliado a questão de que ela seja ampla o suficiente para acomodar não apenas um, mas diversos tipos de cenários e camadas de sua arquitetura, vai fazê-lo avaliar não diferentes soluções de cache, mas uma única plataforma que ofereça tudo isso e que acomode todas as implicações que discutimos anteriormente. Neste momento, você irá começar a avaliar uma solução de Elastic Data Caching.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Elastic Data Caching: O que é e por quê é tão Importante?&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;br /&gt;Diferentemente de soluções de cache locais, que residem no mesmo espaço de endereço da aplicação, soluções de Elastic Data Caching (EDC) são implantados em dois ou mais servidores (no caso de aplicações como &lt;a href="http://www.facebook.com/"&gt;Facebook&lt;/a&gt; ou &lt;a href="http://www.amazon.com/"&gt;Amazon&lt;/a&gt; em centenas deles), usualmente em um cluster dedicado apenas a cache. Isso faz com que você insira um componente de cache em sua arquitetura de software, situado normalmente antes e depois &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;do seu cluster de servidores de aplicação ou infraestrutura de middleware. De acordo com o &lt;a href="http://www.forrester.com/rb/research"&gt;Forrester&lt;/a&gt;:&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=" font-style: italic;font-family:verdana;" &gt;"Elastic Data Caching is a software infrastructure that provides application developers with  data caching services that are distributed across two or more server  nodes that 1) consistently perform as volumes grow; 2) can be scaled  without downtime; and 3) provide a range of fault-tolerance levels"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;As vantagens do uso de EDC são inúmeras, mas todas estas vantagens giram em torno de uma única palavra: elasticidade. A capacidade de ser elástico quer dizer que a infraestrutura de cache pode aumentar e principalmente diminuir sob demanda, sem causar mudanças ou redesenho nas aplicações que fazem uso dos serviços de cache. Essa característica torna soluções de EDC extremamente atraente, uma vez que a exata previsão sobre capacidade da infraestrutura não deve ser facilmente determinada, e mesmo que fosse, ela jamais seria&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; estática. Como as aplicações atuais precisam lidar com a sazonalidade do número dos usuários, em especial se tais aplicações forem baseadas na web, então o crescimento não preditivo e exponencial do número dos usuários vai ocorrer. Sua infraestutura de cache precisa estar preparada para a inserção de mais servidores no cluster de cache. E da mesma forma que a &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;inser&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ção de mais servidores no cluster de cache não deverá acarretar mudanças nas aplicações, a remoção de tais servidores quando estes não forem mais tão necessários devido a diminuição da demanda, também não deverá acarretar em mudanças ou impactos nas aplicações. Isso é elasticidade. Poder aumentar e diminuir quando necessário, e quantas vezes for necessário.&lt;br /&gt;&lt;br /&gt;Mas porque a capacidade de diminuir os recursos é mais importante do que a de aumento destes? A um tempo atrás, as aplicações eram projetadas para poderem oferecer transparência de localização, de forma que quando novos servidores fossem inseridos num cluster, a aplicação pudesse ser executada independente de onde estes servidores es&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;tiverem. Isso é interessante e poderoso, mas nos dias de hoje, isso não deve ser a unica preocupação. Inserir novos servidores em um cluster remete as organizações a investiram capital em hardware e máquinas, e isso do ponto de vista contábil não é nada interessante, pois, contabilmente falando, manter um servidor na organização é um custo contínuo e que sempre deprecia, tornando-o menos valioso ao longo do tempo. Se a organização que mantêm esse custo cont&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ínuo não for um&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;a organização cujo fim é TI ou serviços de TI, então o problema se torna maior ainda, pois qualquer valor de capital investido em servidores e máquinas é visto como despesa e não como investimento. E todos sabemos que orçamento pra TI diminui a cada ano que passa. Para lidar com isso e usufruindo do que a tecnologia de &lt;a href="http://en.wikipedia.org/wiki/Virtualization"&gt;virtualização&lt;/a&gt; hoje nos propcia, a indústria de &lt;a href="http://en.wikipedia.org/wiki/Cloud_computing"&gt;cloud computing&lt;/a&gt; oferece a oportunidade de organizações utilizarem servidores e máquinas virtuais como um serviço, não implicando em custo de aquisição e manutenção. Neste caso, os servidores podem ser usados para atender uma demanda específica, e depois que esta demanda acabar eles podem ser "devolvidos" para o fornecedor da Cloud. Para usufruir desta capacidade, sua arquitetura precisa oferecer características de elasticidade.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;Agora que vimos o que é Elastic Data Caching e porque isso é tão importante para a construção de arquiteturas de software emergentes, é hora de dedicar um tempo na avaliação de quais ofertas existem atualmente para isso, e com isso, conhecermos e avaliarmos quais são os fabricantes de software que estão disponíveis para avaliação e&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; contra&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;tação.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Principais Ofertas de Elastic Data Caching e seus Players&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;As ofertas para soluções de Elastic Data Caching não poderiam ser melhores. Os principais fabricantes de software do mundo possuem pelo menos uma oferta nesta categoria. Alguns fabricantes porventura possuem mais de uma oferta, que podem ser combinados para compor uma solução mais abrangente. Dentre os principais fabricantes, encontra&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;m-se &lt;a href="http://www.oracle.com/us/index.html"&gt;Oracle&lt;/a&gt;, &lt;a href="http://www.gigaspaces.com/"&gt;GigaSpaces&lt;/a&gt;, &lt;a href="http://www.ibm.com/us/en/"&gt;IBM&lt;/a&gt;, &lt;a href="http://www.softwareag.com/corporate/default.asp"&gt;Software AG&lt;/a&gt; e &lt;a href="http://www.vmware.com/"&gt;VMware&lt;/a&gt;. Querendo entrar ne&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;sta lista seleta de fabricantes constam também &lt;a href="http://www.microsoft.com/en-us/default.aspx"&gt;Microsoft&lt;/a&gt;, &lt;a href="http://www.tibco.com/"&gt;TIBCO&lt;/a&gt; e &lt;a href="http://www.redhat.com/"&gt;Red Hat&lt;/a&gt;, com ofertas int&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;eressantes mais ainda não tão maduras ou não disponíveis ainda como produtos para os clientes. A figura abaixo, retirada de um &lt;a href="http://www.forrester.com/rb/Research/wave%26trade%3B_elastic_caching_platforms%2C_q2_2010/q/id/55505/t/2"&gt;relatório&lt;/a&gt; do &lt;a href="http://www.forrester.com/"&gt;Forrester&lt;/a&gt; de Q2 de 2010, sintetiza os principais fornecedores e como suas soluções estão posicionadas:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-6n5Bhzhw3ZI/TjDO7OfHyVI/AAAAAAAABD4/VGfG5Z4uD5o/s1600/ofertasEDCQ22010.PNG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 200px; height: 192px;" src="http://2.bp.blogspot.com/-6n5Bhzhw3ZI/TjDO7OfHyVI/AAAAAAAABD4/VGfG5Z4uD5o/s200/ofertasEDCQ22010.PNG" alt="" id="BLOGGER_PHOTO_ID_5634230650736724306" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;Como o relatório é de 2010, ele acaba não refletindo a atual situação de fabricantes como a &lt;a href="http://www.terracotta.org/?src=/bigmemory"&gt;Terracota&lt;/a&gt;, que foi adquirida pela &lt;a href="http://www.softwareag.com/us/"&gt;Software AG&lt;/a&gt; em 2011, e da &lt;a href="http://gemstone.com/"&gt;GemStone Systems&lt;/a&gt;, que foi adqurida pela &lt;a href="http://www.vmware.com/"&gt;VMware&lt;/a&gt; em 2010. Os demais fabricantes permanecem até o presente momento. A figura mostra que &lt;a href="http://www.oracle.com/index.html"&gt;Oracle&lt;/a&gt;, &lt;a href="http://www.ibm.com/us/en/"&gt;IBM&lt;/a&gt;, &lt;a href="http://www.gigaspaces.com/"&gt;GigaSpaces&lt;/a&gt; e &lt;a href="http://www.softwareag.com/corporate/default.asp"&gt;Software AG&lt;/a&gt; lideram a categoria, e que a &lt;a href="http://www.oracle.com/index.html"&gt;Oracle&lt;/a&gt; com o seu &lt;a href="http://www.oracle.com/technetwork/middleware/coherence/overview/index.html"&gt;Coherence&lt;/a&gt; possui maior base instalada de clientes sendo portanto a solução mais utilizada e madura.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-weight: bold;"&gt;Oracle Coherence: Visão Geral da Tecnologia e Aplicações&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;O Oracle Coherence é um produto para implementação de um grid de dados distribuído, ou seja, uma plataforma de distribuição (particionamento) dos dados em cima de um protocolo de peer-to-peer que suporta clusterização e altamente escalável. Isso possibilit&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;a que os dados sejam distribuídos num cluster de servidores formando uma grande e elástica área virtual de memória, garantindo assim que não existirá nenhum único ponto de falha, pois os dados podem ser recuperados de qualquer servidor do cluster. Quando um servidor entra na rede, o Coherence automaticamente detecta sua presença e passa a contar com ele em sua estratégia de grid. Quando um ou mais servidores sofrem falhas e param de responder, o Coherence também automaticamente detecta-os e expurga-os do cluster para que a área de memória virtual (o grid) não seja comprometido com a utilização de um servidor defeituoso. Os servidores "saudáveis" do grid assumem a responsabilidade dos servidores defeituosos. A figura abaixo mostra esta relação do grid e o processo de leitura de um dado mesmo quando um dos servidores do cluster sofre falha.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-7IcBhPPW_lM/TjDZztXg3gI/AAAAAAAABEA/VOkm44JH710/s1600/fig5-confdistributedfail.gif"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 200px; height: 143px;" src="http://1.bp.blogspot.com/-7IcBhPPW_lM/TjDZztXg3gI/AAAAAAAABEA/VOkm44JH710/s200/fig5-confdistributedfail.gif" alt="" id="BLOGGER_PHOTO_ID_5634242616215264770" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;Uma característica do Coherence que o distingue e o melhor posiciona perante seus concorrentes é que nele, não existe de fato nenhum ponto de falha. Isso significa que tudo no Coherence é um grande grid formado por servidores num cluster que conhecem a localização de cada participante. Não existe um sistema de registro que cataloga os participantes do grid e também não existe um agente que controla o processo de atualização e de replicação dos dados no cluster. Todos os participantes do cluster sabem fazer esse trabalho, e eles colaboram entre si para que o processo seja feito sempre, garantindo assim a integridade e coerência dos dados. A maioria das soluções concorrentes apresentam componentes de registro e de lookup dos dados, e tais componentes controlam toda a arquitetura do grid de memória. Isso torna tais soluções inadequadas porque eles terão sempre um ponto de falha. Se porventura o componente responsável pelo registro dos servidores falhar, todo o grid irá parar de funcionar. E mesmo que esse componente de registro possa ser clusterizado, o seu processo de cluster será finito, e você sempre terá uma margem pra falhas se todas as cópias (backups e backup dos backups) falhar. Ou seja, cadê a elasticidade? No Coherence, tudo é 100% feito pelos participantes do cluster, de forma sincronizada,&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; eficiente e atômica.&lt;br /&gt;&lt;br /&gt;Outra particularidade que torna o Coherence atraente é sua simplicidade. Não só o fato de que você o pôe pra funcionar em poucos minutos (conforme será visto no próximo tópico) a sua API de manipulação também é muito trivial. Um cache para o Coherence nada mais é do que uma especialização da interface &lt;a href="http://download.oracle.com/javase/6/docs/api/java/util/Map.html"&gt;java.util.Map&lt;/a&gt;, implementada na API do Coherence como &lt;a href="http://download.oracle.com/docs/cd/E18686_01/coh.37/e18683/toc.htm"&gt;com.tangosol.net.NamedCache&lt;/a&gt;. Esta implementação de mapa é controlada internamente pelo Coherence, e em cima dela é feito todo o trabalho sujo de replicação e particionamento dos dados, sincronização das atualizações feitas, recuperação dos dados através de listeners e demais características do Coherence. Para interagir com um cache do Coherence, um programador Java simplesmente recupera uma instância de um &lt;a href="http://download.oracle.com/docs/cd/E18686_01/coh.37/e18683/toc.htm"&gt;com.tangosol.net.NamedCache&lt;/a&gt; e realiza suas operações de leitura, escrita, atualização ou remoção dos dados. O trecho de código abaixo mostra como solicitar um cache do Coherence conhecido como "clientes" e insere um objeto do tipo cliente usando seus CPF como chave da informação:&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;script src="https://gist.github.com/1111031.js?file=gistfile1.java"&gt;&lt;/script&gt;&lt;br /&gt;A API do Coherence está disponível tanto para Java quanto para C++ e também para .NET. Neste caso, usando qualquer uma destas linguagens você pode realizar o mesmo conjunto de operações e contando com as mesmas características já citadas. Para saber mais sobre como o Coherence dá suporte a demais linguagens que não Java, leia a &lt;a href="http://download.oracle.com/docs/cd/E18686_01/index.htm"&gt;documentação&lt;/a&gt; do produto que está disponível on-line no site da Oracle.&lt;br /&gt;&lt;br /&gt;A Oracle disponibiliza o Coherence como um produto de Elastic Data Caching, ou integrado com os demais produtos da linha &lt;a href="http://www.oracle.com/us/products/middleware/index.html"&gt;Fusion Middleware&lt;/a&gt;. Em especial, o Coherence já vem previamente integrado e configurado no servidor de aplicações &lt;a href="http://www.oracle.com/technetwork/middleware/fusion-middleware/overview/index.html"&gt;WebLogic&lt;/a&gt;, dando ainda mais diferencial a este produto que já é fantástico. A partir desta integração, clientes do Oracle WebLogic podem usufruir das facilidades e características do Coherence sobre replicação e particionamento de dados, tendo por exemplo os principais componentes de um servidor de aplicação Java EE como sessões HTTP, JNDI Tree's, Servlets, JSF Managed Beans, Stateful e Stateless S&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ession Beans controlados pelo grid do Coherence. Isso possibilita alta disponibilidade e performance em aplicações Java EE, além de possibilitar que desenvolvedores de componentes de Servlets ou EJB's possam usufruir também do Coherence, pois os seus cache's se tornam disponíveis através de JNDI ou através de injeção de dependência via anotação &lt;a href="http://download.oracle.com/javaee/5/api/javax/annotation/Resource.html"&gt;@Resource&lt;/a&gt;. Isso permite que as aplicações que porventura façam uso do cache do Coherence mantenham sua interoperabilidade com demais servidores de aplicações do mercado, uma vez que todo o acesso aos recursos é feito usando abordagens suportadas pela especificação do Java EE.&lt;br /&gt;&lt;br /&gt;Finalmente, o Coherence possui um forte esquema de integração com outras tecnologias que não da Oracle, em especial com o &lt;a href="http://download.oracle.com/docs/cd/E18686_01/coh.37/e18691/configforjpa.htm#CHDIDABA"&gt;JPA&lt;/a&gt;, &lt;a href="http://download.oracle.com/docs/cd/E18686_01/coh.37/e18691/usehibernateascoh.htm#CEGFEFJH"&gt;Hibernate&lt;/a&gt;, &lt;a href="http://download.oracle.com/docs/cd/E18686_01/coh.37/e18691/integratespring.htm#BABCABHE"&gt;Spring&lt;/a&gt; e o &lt;a href="http://download.oracle.com/docs/cd/E18686_01/coh.37/e18691/wlportal.htm#sthref104"&gt;WSRP&lt;/a&gt;. Isso faz com que o Coherence possa ser embarcado em diversos tipos de aplicações e possa resolver diferentes tipos de demandas de cache. Esteja você criando uma aplicação Java simples e rodando num servidor &lt;a href="http://jetty.codehaus.org/jetty/"&gt;Jetty&lt;/a&gt; ou mesmo numa aplicação standalone, o Coherence pode ajudar. Esteja você tentando melhorar a performance de suas entidades JPA ou Hibernate, o Coherence pode ajudá&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;-lo na implementação de um cache de segundo nível. Esteja você querendo usar recursos de cache em aplicações baseadas em contêiners leves como Spring, o Coherence também poderá ser utilizado.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Demonstração do Oracle Coherence na Prática usando Java&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Agora que criamos uma boa visão sobre o que é Elastic Data Caching e aprendemos um pouco sobre o que é o Oracle Coherence, é hora de nos aventurarmos em aprender como podemos utilizá-lo na prática. Irei mostrar agora como instalar e colocar o Coherence pra funcionar, e realizar alguns testes nele usando suas ferramentas internas e criando alguns programas em Java do tipo standalone. Vamos começar com o processo de instalação.&lt;br /&gt;&lt;br /&gt;A primeira coisa a se fazer é realizar o download do produto no site da Oracle. Para isso, clique &lt;a href="http://www.oracle.com/technetwork/middleware/coherence/downloads/index.html"&gt;aqui&lt;/a&gt; para realizar o download. Para este artigo, utilizei a versão 3.7 do Coherence, que na época da escrita deste artigo era a mais atual. Você deverá ter u&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ma conta de usuário no portal do &lt;a href="http://www.oracle.com/technetwork/index.html"&gt;Oracle Technology Network&lt;/a&gt; para poder realizar o download. O software pode ser utilizado gratuitamente para fins de aprendizado e testes no seu ambiente, mas lembre-se que se você planejar colocá-lo em produção em algum projeto, você deverá entrar em contato com a Oracle e providenciar seu licenciamento.&lt;br /&gt;&lt;br /&gt;Quando você concluir o download, o que você terá em mãos um pequeno arquivo do tipo Zip. Descompacte este arquivo em um diretório de preferência do seu computador. Para este artigo, eu pûs o diretório descompactado no raiz do meu disco principal. Feito isso, você deverá providenciar algumas configurações relacionadas ao ambiente. A primeira coisa a se fazer é configurar a variável de ambiente JAVA_HOME. Se você é um desenvolvedor Java, você não deverá ter dificuldades quanto a isso. Para este artigo, usei um &lt;a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html"&gt;JDK&lt;/a&gt; versão 1.6 da Sun e não tive problemas. Lembre-se de colocar a pasta "bin" do seu JAVA_HOME na variável PATH. Isso será utíl principalmente pra utilizar os recursos de console e querying do Coherence.&lt;br /&gt;&lt;br /&gt;Agora vá para o diretório de instalação &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;do seu Coherence, e estando nela, entre no diretório "bin". Neste diretório, você encontrará vários arquivos do tipo shell e batch. Dentre eles, abra o arquivo cache-server.cmd (ou cache-server.sh se você estiver no Unix/Linux) para edição. Este arquivo cria uma instância do Coherence, que irá atuar tanto como cliente e como servidor dele mesmo. Quando você abrir este arquivo, você deverá editar a linha que define a variável COHERENCE_HOME. Faça com que esta variável aponte para o local onde você instalou seu Coherence, algo como "set COHERENCE_HOME=C:\coherence". Depois que você editar esse arquivo, você poderá executar um servidor do Coherence pela primeira vez em seu computador. Execute esse arquivo e veja no console qual será a saída apresentada. Se tudo estiver funcionando corretamente, você terá uma saída como a listagem abaixo:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1111680.js?file=gistfile1.sh"&gt;&lt;/script&gt;&lt;br /&gt;O Coherence possui uma ferramenta bem poderosa de querying para que você possa remotamente administrar cache's e porventura alterar os valores que neles constam. Essa ferramenta&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; chama-se "query" e pode ser encontrada dentro do diretório "bin" da instalação do seu Oracle Coherence. Para que possamos utilizá-la, é necessário realizar algumas configurações simples. A primeira coisa a fazer é realizar o download do framework &lt;a href="http://jline.sourceforge.net/"&gt;JLine&lt;/a&gt;, que simplifica bastante a utilização de instruções do tipo shell. Descompacte o JLine em algum diretório do seu computador. Depois isso, edite o arquivo query.cmd (ou query.sh se você estiver no Unix/Linux) e edite o arquivo de tal forma que você defina as variáveis COHERENCE_HOME e JLINE_HOME, para que apontem para o local de instalação do Coherence e do JLine, respectivamente.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Pronto, agora temos tudo devidamente configurado para realizarmos nosso primeiro teste. Para começar os testes, execute uma instância do Coherence através do script "cache-server", encontrado no diretório "bin" do local de instalação do seu Coherence. Agora vá novamente ao diretório "bin" do local de instalação do Coherence e execute o script "query". Este script vai carregar um console do tipo schell para que você possa controlar atividades de criação e manipulação de cache's. O console deverá ser parecido com a figura abaixo:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-sU_uDprq3lk/TjF-Sn3BirI/AAAAAAAABEQ/e7DSmpYmXT0/s1600/consoleQuery.PNG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 200px; height: 102px;" src="http://3.bp.blogspot.com/-sU_uDprq3lk/TjF-Sn3BirI/AAAAAAAABEQ/e7DSmpYmXT0/s200/consoleQuery.PNG" alt="" id="BLOGGER_PHOTO_ID_5634423467219716786" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;Vamos criar um cache no Coherence e realizar algumas operações em cima deste cache. Para criar o cache, entre com a seguinte instrução no prompt e depois pressione a tecla "Enter":&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;create cache "teste"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Depois que você pressionar a tecla "Enter", você verá algumas mudanças no console do script "cache-server". O que irá acontecer é que o Coherence irá detectar que um novo agente quer participar do grid de dados e irá contar com este agente para delinear a memória do grid, formando o primeiro cluster. Tudo isso será feito automaticamente, pois o Coherence realiza todas estas operações através de broadcast na rede, usando seu robusto protocolo de peer-to-peer. A partir deste momento, ambos os agentes do cluster poderão manipular o cache "teste", e os dados que forem postos nele serão compartilhados por ambos os agentes. Vamos fazer um teste para verificar isso. Volte ao console de "query" e entre com a seguinte instrução e pressione "Enter":&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;insert into "teste" key "SP" value "Sao Paulo"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Isso irá inserir um valor dentro do cache conhecido no Coherence como "teste". Para verificar se a entrada foi corretamente adicionada no cache, você pode realizar uma consulta. Como você já deve ter notado, a linguagem de manipulação do Coherence se assemelha muito com a linguagem &lt;a href="http://en.wikipedia.org/wiki/SQL"&gt;SQL&lt;/a&gt;, e a consulta não poderia ser diferente. Para ler os valores do cache "teste", entre com a seguinte instrução e pressione a tecla "Enter":&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;select key(), value() from "teste"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Será que os valores que entramos no cache "teste" está realmente dentro do grid e dados do Coherence? Vamos responder esta pergunta. Execute uma nova cópia do script "query". Feito isso, digite a instrução abaixo e pressione a tecla "Enter":&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;create cache "teste"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Quando você fizer isso, repare nas janelas dos consoles anteriores. Todos eles irão detectar o novo membro do cluster, e atualizar o grid de dados com este membro. Não se preocupe, a instrução que você acabou de digitar não vai "matar" o cache que já foi criado. Ao invés disso, ele irá notificar ao grid que um novo agente gostaria de manipular o cache "teste". O Coherence irá ver que já existe um cache com este nome, e ao invés de criar um novo ele irá devolver este cache existente. Existe uma instrução formal para remoção de um cache do grid. Agora, estando no novo console que você acabou de abrir, entre com a seguinte instrução e pressione a tecla "Enter":&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;select key(), value() from "teste"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Como você já deve imaginar, o resultado apresentado será a cidade de São Paulo, que foi inserido anteriomente no cache. Isso prova que, no Coherence, o cache é algo virtual, em que é distribuido entre todos os participantes do cluster. Toda operação feita no Coherence é executada contando com todos os participantes do cluster, por padrão. Você pode claro, configurar o Coherence para que certas operações sejam feitas apenas entre aguns membros. Para isso, você pode criar um grupo, ou como prefiro dizer, uma "sala de bate papo" particular. Neste caso somente os membros que estiverem nesse grupo irão trocar as informações.&lt;br /&gt;&lt;br /&gt;Para fazer com que os consoles de "query" saiam do grid do Coherence, basta digitar a instrução "bye" e pressionar a tecla "Enter". Quando você fizer isso, repare que os demais consoles irão detectar a saída do membro, e passarão a não contar mais com aquele membro no cluster. Desta forma, toda nova instrução dada será de interesse apenas dos membros que sobrarem. Para terminar o console que contêm o script "cache-server", basta pressionar a combinação de teclas "Ctrl + C", como você faria com qualquer outro tipo de shell. Para conhecer mais sobre esta linguagem de manipulação e gerenciamento de dados, sugiro que você realiza os passos descritos na seção de instalação da documentação do Coherence, clicando neste &lt;a href="http://download.oracle.com/docs/cd/E18686_01/coh.37/e18692/installcoh.htm#sthref10"&gt;link&lt;/a&gt;. Vamos agora tornar as coisas mais interessantes e verificar como podemos usar o Coherence dentro e através de uma aplicação Java.&lt;br /&gt;&lt;br /&gt;Para começar nossos testes do Coherence em aplicações Java, use um IDE de sua preferência para realizar a codificação e execução dos programas. Eu usarei neste artigo o Eclipse, que pode ser baixado gratuitamente neste &lt;a href="http://www.eclipse.org/downloads/"&gt;link&lt;/a&gt;. Baixe uma versão do Eclipse compatível com a JVM que você está utilizando. Após baixar o Eclipse, execute-o pela primeira vez configurando o workspace, ou seja, o local onde será armazenado os projetos. Quando o Eclipse for iniciado, você deverá criar uma biblioteca (library) que contenha a dependência do Coherence. Para isso, vá até o menu "Window" e clique na opção "Preferences". Na janela de preferências, acesse a opção "Java - Build Path - User Libraries". Na janela que aparece, Clique no botão "New" para adicionar uma nova biblioteca. Chame esta biblioteca de "Coherence37" e deixe marcado o checkbox "System library (added to the boot class path)". Clique em "OK" para confirmar a criação da biblioteca.&lt;br /&gt;&lt;br /&gt;Depois de criar a biblioteca, clique no botão "Add JARs..." para adicionar a dependência do Coherence. A dependência será o arquivo JAR encontrado em $COHERENCE_HOME/lib/coherence.jar. Clique em "OK" para terminar o processo de criação da biblioteca. Como você pode perceber, o Coherence adiciona um footprint de dependências muito baixo as suas aplicações Java, além de ser extremamente simples de embarcar nas aplicações, por tratar-se de apenas uma dependência. Dependendo dos recursos que você precisar utilizar, pode ser necessário o uso de outras dependências, mas para as operações padrões do Coherence como o caso do grid de dados, apenas a sua biblioteca principal é necessária.&lt;br /&gt;&lt;br /&gt;Vamos criar um projeto para exercitar a API do Coherence para Java. Para isso, crie um novo projeto do tipo Java no Eclipse, e dentre as configurações necessárias para o projeto, adicione a biblioteca "Coherence37" ao classpath. Para não perder o costume e as origens, chame esse projeto de "coherenceHelloWorld" :P&lt;br /&gt;&lt;br /&gt;Uma vez criado o projeto, vamos criar um primeiro programa Java que irá criar um cache no Coherence, e inserir um valor neste cache. Para isso, crie uma classe Java chamada de "GravarPIUsandoCoherence.java" e implemente-a conforme a listagem abaixo:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1112113.js?file=GravarPIUsandoCoherence.java"&gt;&lt;/script&gt;&lt;br /&gt;O programa Java acima é simples de ler e acredito que seu código não mereça tanta explicação, exceto pela chamada de método "CacheFactory.ensureCluster()". Esta chamada na verdade realiza um broadcast na rede usando as configurações padrões do arquivo de configuração do Coherence (falaremos mais sobre ele adiante) a procura por outros membros que já formem um grid. Ao encontrar um, ele passa a fazer parte deste grid. Caso ele não encontre, como será o caso deste programa, ele irá criar o grid e se candidatar como primeiro membro. O restante do código apenas cria um cache e insere um valor dentro, que será lido posteriormente por outro programa Java. Para garantir que este programa "dure" até o momento que o outro programa leia a variável inserida, usamos uma instrução de espera, para que o programa fique aguardando pelo período de um minuto. Depois disso, o programa irá terminar, e irá sair do grid que foi montado a partir dele. Outros programas que permanecerem em execução e ainda conectados no grid irão perpetuá-lo até que eles se encerrem, do contrário, o grid inteiro irá ser finalizado.&lt;br /&gt;&lt;br /&gt;Execute este programa Java e veja o resultado no console do Eclipse. Em verdade, nada de muito interessante irá acontecer, uma vez que este programa apenas grava num cache do Coherence uma variável que nunca será lida. Mas você deverá perceber pelo console que algumas saídas serão escritas, saídas estas semelhantes aos testes que fizemos usandos os scripts que acompanham a instalação do Oracle Coherence. Para completarmos nosso exemplo, é necessário que você crie outro programa Java. Crie uma nova classe Java no projeto, e chame-a de "LerPIUsandoCoherence.java", e implemente-a conforme a listagem abaixo:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1112147.js?file=LerPIUsandoCoherence.java"&gt;&lt;/script&gt;&lt;br /&gt;Depois que terminar de implementar o programa Java acima, é hora de fazer o real teste usando o Coherence. Para isso, você deverá executar o primeiro programa Java, e esperar até que ele termine de montar o grid. Depois disso, você terá um minuto para executar esse segundo programa Java, que ao terminar sua execução deverá apresentar uma saída conforme a listagem abaixo:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1112156.js?file=gistfile1.sh"&gt;&lt;/script&gt;&lt;br /&gt;Você deve estar se questionando: "OK, vi que o programa funcionou e leu a variável corretamente, e vi também que o Coherence é muito simples pois não precisei fazer nada para que o grid fosse montado e o cache fosse compartilhado". Mas imagino que justamente por estar pensando isso é que você possa estar incomodado com o fato de que tudo foi automático demais, certo?&lt;br /&gt;&lt;br /&gt;Agora é hora de desvendar alguns mistérios. Quando você embute a API do Coherence dentro de um programa Java, a saber, o arquivo coherence.jar que usamos no classpath do projeto, você acaba embutindo também alguns arquivos de configuração que determinam o comportamento do Coherence quanto a montagem e/ou participação de um grid bem como o comportamento de particionamento e replicação no cluster. Esses arquivos de configuração estão dentro deste arquivo coherence.jar, no root do classpath do arquivo. Se você abri-lo com um programa de compactação como Winzip ou Winrar, você poderá ver e abrir tais arquivos de configuração.&lt;br /&gt;&lt;br /&gt;Se você quiser usar seu próprio arquivo de configuração com as suas diretrizes de comportamento no Coherence, você deverá informar ao programa Java explicitamente que outros arquivos de configuração serão utilizados. Para fazer isso, basta que você crie os arquivo de configuração XML e grave-os no raiz do classpath. Se você estiver criando um programa Java e empacotando-o num arquivo JAR executável, então esses arquivos de configuração deverão estar no raiz deste arquivo JAR. Se você estiver criando uma aplicação Java EE pra Web, então os arquivos de configuração do Coherence deverão estar dentro da pasta WEB-INF/classes, exatamente no raiz deste diretório. A listagem abaixo mostra um exemplo de configuração do Coherence que sobreescreve as diretrizes padrões do Coherence:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1112211.js?file=gistfile1.xml"&gt;&lt;/script&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Aprofundando no Oracle Coherence: Vídeos e Documentação&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Este artigo mostrou alguns dos principais recursos do Oracle Coherence, mas é claro que o produto possui muito mais recursos e features do que os mostrados aqui. Para aprender mais sobre o Coherence, principalmente maiores detalhes sobre sua arquitetura, demais recursos e mecanismo de execução, recomendo fortemente você a assistir este vídeo abaixo. Este vídeo, é na verdade uma apresentação feita no evento Google Tech Talks, apresentada por nada mais nada menos do que &lt;a href="http://www.linkedin.com/profile/view?id=21070&amp;amp;authType=name&amp;amp;authToken=FGk8&amp;amp;locale=en_US&amp;amp;pvs=pp&amp;amp;trk=ppro_viewmore"&gt;Cameron Purdy&lt;/a&gt;, o criador e CEO da &lt;a href="http://www.oracle.com/us/corporate/Acquisitions/tangosol/index.html?origref=http://www.google.com.br/url?sa=t&amp;amp;source=web&amp;amp;cd=1&amp;amp;ved=0CBcQFjAA&amp;amp;url=http%3A%2F%2Fwww.oracle.com%2Fus%2Ftangosol%2Findex.html&amp;amp;rct=j&amp;amp;q=Tangosol&amp;amp;ei=AK8xTtOxNITGgAeemcHwDA&amp;amp;usg=AFQjCNGP0tqn6Q9mDn8qUjoY6yPiHNqzGA&amp;amp;sig2=J2i3AZD2p6aA4q5D6SXmQQ"&gt;Tangosol&lt;/a&gt;, empresa adquirida pela Oracle em 2007 e criadora do Coherence.&lt;br /&gt;&lt;br /&gt;&lt;object style="height: 390px; width: 640px"&gt;&lt;param name="movie" value="http://www.youtube.com/v/4Sq45B8wAXc?version=3"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/4Sq45B8wAXc?version=3" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" height="390" width="640"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Também hospedados no &lt;a href="http://www.youtube.com/"&gt;Youtube&lt;/a&gt;, a Oracle mantêm um &lt;a href="http://www.youtube.com/user/OracleCoherence"&gt;canal&lt;/a&gt; dedicado exclusivamente a discussão e apresentação das novidades e recursos do Coherence. Recomendo você a assistir estes vídeos, que poderão dar a você maior insight sobre o produto e as possibilidades que ele abre, principalmente se você estiver em busca de soluções de Elastic Data Caching.&lt;br /&gt;&lt;br /&gt;Boas Integrações ;)&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8571396175573944921-6974050045789603645?l=architecture-journal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://architecture-journal.blogspot.com/feeds/6974050045789603645/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8571396175573944921&amp;postID=6974050045789603645' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8571396175573944921/posts/default/6974050045789603645'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8571396175573944921/posts/default/6974050045789603645'/><link rel='alternate' type='text/html' href='http://architecture-journal.blogspot.com/2011/07/elastic-data-caching-usando-oracle.html' title='Elastic Data Caching usando Oracle Coherence'/><author><name>Ricardo Ferreira</name><uri>http://www.blogger.com/profile/11930306647022714836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/-5T0r_5klxDA/Tn5CEvZpK0I/AAAAAAAABEg/MyTJuGi12ag/s220/ricardo-ferreira-Grande.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-SRcGndIdOn4/TjGv1a0AeoI/AAAAAAAABEY/xnp8YAchDs8/s72-c/oracle_coherence.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8571396175573944921.post-3246830485456689141</id><published>2011-06-04T07:01:00.000-07:00</published><updated>2011-06-05T07:05:15.500-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Cloud'/><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><title type='text'>Como Justificar uma Arquitetura Baseada em Cloud?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-3K3nNxSXtw0/Teo834xKEWI/AAAAAAAABDg/CJkn0KbotGs/s1600/cloudDevelopment.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 133px;" src="http://2.bp.blogspot.com/-3K3nNxSXtw0/Teo834xKEWI/AAAAAAAABDg/CJkn0KbotGs/s200/cloudDevelopment.jpg" alt="" id="BLOGGER_PHOTO_ID_5614366816299782498" border="0" /&gt;&lt;/a&gt;&lt;div style="text-align: justify;"&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;Começar a usar uma nova tecnologia nunca é fácil. Além da evidente dificuldade que equipes de desenvolvimento de software enfrentam quando inserem novos "ingr&lt;/span&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;edientes" em suas estratégias de implementação, existem as barreiras culturais, econômicas e políticas que a decisão de trazer uma nova forma de fazer as coisas pode acarretar. Trabalhei como arquiteto de software numa grande fábrica de software durante quatro anos e meio, e este foi o período da minha vida onde aprendi bastante sobre tecnologia, mas acima de tudo, sobre como justificar o emprego de novas tecnologias nos projetos que eu estive alocado. A cada vez que começava um projeto e introduzia uma nova tecnologia, precisava desprender várias horas discutindo e convencendo meus gerentes de projeto e meus clientes sobre a decisão de uso da tecnologia. Fábricas de software são empreendimentos interessantes sobre como produzir software em larga escala, e segundo estudos do &lt;a href="http://www.sei.cmu.edu/"&gt;SEI&lt;/a&gt; documentados no livro &lt;a href="http://www.sei.cmu.edu/library/abstracts/books/0201703327.cfm"&gt;Software Product Lines: Practices and Patterns&lt;/a&gt;, um ingrediente chave sobre como criar softwares em massa garantindo previsibilidade de prazos, custos e escopo, é o uso repetido e controlado de arquiteturas pré-testadas, provadas e que as equipes das fábricas tenham experiência, afinidade e agilidade.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Quando você e sua equipe decidem inserir uma nova tecnologia ou estilo arquitetural para desenvolver um novo projeto, você está, segundo a ótica de fábricas de software ou mesmo de organizações que estejam investindo na elaboração de algum software, inserindo uma chance grande de fazer com que o projeto tenha seus principais atributos de medição e qualidade (a saber, prazo, escopo e custo) comprometidos. E isso deixa-os bastante preocupados. É sempre bom, ao ser argumentado negativamente sobre suas decisões, se colocar no lugar da pessoa que o está argumentando e tentar entender suas motivações. Em grande parte dos casos, a argumentação negativa será resultado de &lt;a href="http://pt.wikipedia.org/wiki/Medo,_incerteza_e_d%C3%BAvida"&gt;FUD&lt;/a&gt;. É seu papel saber justificar o emprego de mudanças no jeito de fazer as coisas, e balancear claramente as vantagens e desvantagens dessa decisão. A introdução não comprometida de novas "complexidades" em projetos de software é um erro grave e deve, em minha opnião, ser reflexo sim de insatisfação por parte de seus gerentes, líderes ou clien&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;tes. Na visão deles, você está usando o dinheiro deles pra brincar com novas tecnologias, e isso não soa muito bem se você olhar com mais cuidado. Você deve mostrar que o uso da tecnologia possui razões responsáveis e bem pensadas, e que esteja engajado ao máximo na resolução dos requisitos do projeto.&lt;br /&gt;&lt;br /&gt;O que fazer então nesses casos? A boa prática de &lt;a href="http://www.sei.cmu.edu/library/abstracts/books/0321154959.cfm"&gt;arquitetura de software&lt;/a&gt; diz que você deve justificar suas decisões de uso de tecnologias e estilos arquiteturais baseado na avaliação minuciosa de requisitos funcionais e não-funcionais. Esses deverão ser os principais fios condutores que deverão ser usados para delinear sua arquitetura de software, conforme documentado no livro &lt;a href="http://www.sei.cmu.edu/library/abstracts/books/020170482X.cfm"&gt;Evaluating Software Architectures: Methods and Case Studies&lt;/a&gt;. Jamais use uma tecnologia apenas por achá-la interessante ou porque será legal tê-la em seu currículo. Lembre-se: Alguém está pagando seu salário ou bônus para que você faça o que você está fazendo. O trabalho de elaboração de uma arquitetura de software começa com a elicitação explícita dos requisitos funcionais e não-funcionais de um projeto a ser desenvolvido. Para cada requisito &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;elicitado, você deve associar um mecanismo de análise apropriado que resolva claramente aquele requisito. A partir deste mecanismo de análise, você deve criar ou associar um mecanismo de desenho que resolva tecnicamente o mecanismo de análise (que origianalmente apenas endereça o escopo do requisito) e, por fim, crie ou associe um mecanismo de implementação que satisfaça usando pilhas de software o que foi acordado no mecanismo de desenho. A figura abaixo, retirada do excelente artigo &lt;a href="http://www.ibm.com/developerworks/rational/library/4706.html"&gt;Capturing Architecture Requirements&lt;/a&gt; da &lt;a href="http://www.ibm.com/us/en/"&gt;IBM&lt;/a&gt;, mostra as relações e dependências sobre requisitos de software e suas estratégias de implementação.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-7B62tbxrg0g/TepECz6OB5I/AAAAAAAABDo/EuQ4sFzPYno/s1600/t_architecturalRequirements_fig1.gif"&gt;&lt;img style="cursor: pointer; width: 391px; height: 231px;" src="http://2.bp.blogspot.com/-7B62tbxrg0g/TepECz6OB5I/AAAAAAAABDo/EuQ4sFzPYno/s200/t_architecturalRequirements_fig1.gif" alt="" id="BLOGGER_PHOTO_ID_5614374700555569042" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Cloud_computing"&gt;Cloud Computing&lt;/a&gt; é uma abordagem relativamente nova (na verdade, com maior relevância e evidência nos dias de hoje) que promete resolver diversas das complexidades encontradas no desenvolvimento, implantação e execução dos softwares atuais. Mas tal como qualquer outro paradigma, estilo arquitetural ou nova tecnologia, você precisará se armar de bons argumentos na hora de justificar a sua introdução numa organização ou na elaboração de um software funcional que um cliente demande. Agora que você sabe como funciona a cabeça das pessoas que pagam seu salário para que você crie soluções usando software, e sabe também quais são as técnicas usadas em arquiteturas de software para propor mecanismos de implementação (ou seja, as tecnologias) que resolvam os requisitos de um projeto, você precisará entender quais são as vantagens e motivadores que uma arquitetura baseada em Cloud pode trazer para seus clientes e às organizações. Sem dúvida, elas são muitas, mas é necessário que você as compreenda claramente e saiba também quais são suas &lt;a href="http://en.wikipedia.org/wiki/Cloud_computing#Issues"&gt;implicações de uso&lt;/a&gt;, pois como toda tecnologia, ela trás consigo diversas vantagens como também a introdução de novos problemas. Cabe à você, arquiteto de software, balancear adequadamente os pontos positivos e negativos e tomar uma sábia decisão.&lt;br /&gt;&lt;br /&gt;Quando iniciar sua discussão sobre justificar arquiteturas baseadas em Cloud, comece realizando as perguntas abaixo. Estas perguntas deverão ser feitas para que seus stakeholders comecem a refletir sobre os benefícios (principalmente os financeiros) da abordagem. Depois disso, comece a discorrer como a arquitetura baseada em Cloud irá endereçar seus requisitos funcionais e não-funcionais.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Pergunta 1: Como você lida com o aumento da capacidade e necessidade de mais hardware?&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Capacity_planning"&gt;Capacity planning&lt;/a&gt; é sem dúvida um assunto muito importante na arquitetura de qualquer sistema que depende de recursos de hardware. Mas quando você prefere utilizar seu próprio hardware para rodar suas aplicações, você passa a enfrentar dois problemas clássicos. Primeiro, o que acontece se você estimar pra mais ou pra menos a quantidade de hardware necessária para acomodar seu sistema? Isso pode implicar em perda de capital ou em insuficiência de recursos para execução do sistema. Outro ponto importante é sobre a previsão de orçamento para hardware. E se você não tiver recursos monetários suficientes para comprar novo hardware e servidores assim que eles se fizerem necessários?&lt;br /&gt;&lt;br /&gt;Quando você resolve usar sua própria infraestrutura de hardware, você deve ter capital em caixa para poder adquirir cada novo Storage Area Network (SAN) ou cada novo servidor que você precisar. E o ponto é, você nunca vai saber exatamente quando isso vai acontecer, pois isso é algo ditado pela velocidade e temperatura do seu negócio. Além disso, mesmo que você tenha capital para compra de novos recursos, você precisará de um tempo para poder tornar tais recursos operacionais dentro de sua infraestrutura, afinal de contas, o recurso precisa ser instalado, configurado e suas aplicações precisam ser instaladas ou configuradas pra ele.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Pergunta 2: O que acontece quando ocorre um problema em sua infraestrutura?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Uma prática comum utilizada ao longos dos anos é a redundância de servidores. Todo bom servidor possui uma cópia escrava que é utilizada em casos onde o servidor principal apresenta problemas. Mas o servidor é uma grande caixa que possui outros recursos internos dentro. Se um destes recursos falha, como por exemplo, um dos discos de um array RAID, você precisará de alguem técnico para poder fazer a troca do disco defeituoso por um novo. E este técnico (recurso humano) possui um custo mensal. Claro, existem hoje infraestruturas inteligentes que fazem esse tipo de coisa automática, robôs inteiros que podem substituir estes recursos humanos, mas isso implica em um custo atualmente muito alto. E pra quê ter esse tipo de automação quando você nunca vai saber quando eles serão realmente utilizados. Você pode usufruir deste alto investimento apenas uma vez no ano.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Pergunta 3: O que acontece quando ocorre um desastre?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Se um servidor inteiro falha, a não ser que você tenha uma infraestrututura de alta-disponibilidade, você acabará com um desastre em mãos e seu time deverá correr para se recuperar daquele desastre. Com muita sorte, se você estiver com seus backups em dia, você poderá sua infraestrutura pronta e operacional o mais rápido possível. Porém este processo é quase certo que seja 100% manual, e, portanto, levará um certo tempo. Além disso, a cobertura de incidentes como desastres de servidores pode acarretar em custos altos com mão de obra e horas extras dos seus técnicos em plantões. Estes custos indiretos também devem ser considerados quando você preferir gerir sua própria infraestrutura.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Pergunta 4: E quando você não precisar mais de um servidor?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Pode ser que mesmo que você tenha acertado a mão no seu capacity planning e investido nos recursos certos necessários para uma dada carga e demanda, você não tenha essa carga e demanda, pois, mais uma vez, isso depende da velocidade e temperatura do seu negócio. Neste caso, você poderá acabar com servidores que estarão inutilizados. Mesmo que você doe os servidores para servidor à outras aplicações, esses servidores precisarão de um tempo até serem preparados para novo uso, implicando portanto no aumento do tempo de preparação dos servidores. Pior ainda, se você não tiver onde usar aquele grupo de servidores, você terá um conjunto de capital investido e parado dentro da sua organização, tornado-a portanto, ineficiente e cara quanto a utilização de seus recursos capitais.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Pergunta 5: E quanto ao gerenciamento e uso de energia elétrica?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Quando você prefere utilizar sua própria infraestrutura (ou que você tenha um ou mais racks dentro de um &lt;a href="http://pt.wikipedia.org/wiki/Centro_de_processamento_de_dados"&gt;data center&lt;/a&gt;), você poderá estar tendo um &lt;a href="http://www1.eere.energy.gov/femp/program/dc_energy_consumption.html"&gt;custo com eletricidade&lt;/a&gt; que efetivamente não reflete as reais necessidades. Em grande parte das vezes, você pode estar tendo um custo com eletricidade que poderia ser muito mais otimizado se você tivesse seus servidores virtualizados e utilizados sob demanda, ou seja, somente na hora em que estes fossem utilizados.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Faça-os pensar sobre como lidar positivamente com as situações usando Cloud&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Usando arquiteturas baseadas em Cloud, você pode adicionar maior capacidade em sua infraestrutura a medida que você precisar, quando você precisar, e não, antes que você realmente precise. Neste caso, você não precisa de capital associado a recursos de hardware. Você não precisará planejar orçamento para infraestrutura de aplicações, uma vez que os recursos em uma arquitetura baseada em Cloud são utilizados sob demanda, assim que eles se tornam necessários. Quando eles não são mais necessários, os recursos não serão mais cobrados, e você não precisará lidar com situações de capital parado ou recursos inutilizados. Acima de tudo, você terá sempre os recursos no momento que você precisar, em questão de minutos e não horas.&lt;br /&gt;&lt;br /&gt;Outro ponto muito importante sobre arquiteturas baseadas em Cloud é que, você nunca precisará se preocupar com que tipo de plataforma ou sistema que sustenta sua infraestrutura. Você não precisa saber a marca do storage, a versão do sistema operacional, o tipo de gerenciamento de disco utilizado, e com isso, você também não precisara ter times capacitados em determinadas tecnologias. Na verdade, você não precisará ter times capacitados nem presentes, pois este custo com pessoas será de responsabilidade do provedor do seu Cloud. E mesmo que você seja seu próprio provedor (No caso de optar por Cloud's privadas), isso pode ser perfeitamente terceirizado por uma empresa parceira ou um departamento isolado.&lt;br /&gt;&lt;br /&gt;Licensiamento de softwares também costuma ser outro ponto positivo com arquiteturas baseadas em Cloud. Ao invés de ter que ter contratos de licenças ou subscrições de software, você pode apenas usar seu cartão de crédito corporativo e comprar o serviço do software a medida que você precisar. Isso se torna mais atraente ainda quando você precisa atualizar seu software. E quando sair novas versões, você precisa ter contratos de manutenção ativos pra isso? Utilizado o software como um serviço (SaaS), você embute este custo de atualização em seu investimento.&lt;br /&gt;&lt;br /&gt;Finalmente, é importante considerar as implicações financeiras do uso de arquiteturas baseadas em Cloud. Esta na verdade é a meu ver o maior ponto positivo do Cloud Computing. A abordagem "Pagar a medida que você utilizar" é realmente bem atraente para qualquer organização que deseja escalar seu negócio a patamares mais ousados e nunca vislumbrados. Financeiramente falando, arquiteturas baseadas em Cloud permite que você tenha menos gastos com CAPEX, sigla em inglês para Capital Expenditures ou simplesmente, despesas de capital.&lt;br /&gt;&lt;br /&gt;Despesas de capital é todo investimento financeiro que você faz antes mesmo que esse investimento entre em operação. Se você compra um servidor, isso é uma despesa de capital pois você deve pagar adiantado e ter os benefícios deste investimento em um tempo que vai de dois a três anos. Pegue o exemplo da compra de um servidor que custa R$ 50.000,00 e gasta R$ 4.000,00 para configurar e colocar este servidor em operação. R$ 50.000,00 é uma despesa de capital e R$ 4.000,00 é o custo sob demanda. Do ponto de vista contábil, R$ 50.000,00 é um valor que sai de uma conta com ativo a uma outra conta de ativo, ou seja, você está movendo capital que representa apenas ativos fixos. Da mesma forma, contábilmente falando, R$ 4.000,00 é um valor que representa um investimento direto em sua rentabilidade financeira, não sendo considerado portanto, um ativo. Neste caso, o servidor, do ponto de vista contábil, é um ativo depreciável. O que isso significa? Que a medida que esse servidor é utilizado, ele perde seu valor original (Ele não vai mais custar R$ 50.000,00) e tende a ser um fardo financeiro.&lt;br /&gt;&lt;br /&gt;Num próximo artigo, irei explorar as implicações técnicas de se investir em arquiteturas baseadas em Cloud, em especial, sobre como desenvolver aplicações que estejam prontas para Cloud. Até mais!&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8571396175573944921-3246830485456689141?l=architecture-journal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://architecture-journal.blogspot.com/feeds/3246830485456689141/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8571396175573944921&amp;postID=3246830485456689141' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8571396175573944921/posts/default/3246830485456689141'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8571396175573944921/posts/default/3246830485456689141'/><link rel='alternate' type='text/html' href='http://architecture-journal.blogspot.com/2011/06/como-justificar-uma-arquitetura-baseada.html' title='Como Justificar uma Arquitetura Baseada em Cloud?'/><author><name>Ricardo Ferreira</name><uri>http://www.blogger.com/profile/11930306647022714836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/-5T0r_5klxDA/Tn5CEvZpK0I/AAAAAAAABEg/MyTJuGi12ag/s220/ricardo-ferreira-Grande.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-3K3nNxSXtw0/Teo834xKEWI/AAAAAAAABDg/CJkn0KbotGs/s72-c/cloudDevelopment.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8571396175573944921.post-8332743510772483097</id><published>2011-03-05T03:56:00.000-08:00</published><updated>2011-03-05T13:17:45.144-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BPA'/><category scheme='http://www.blogger.com/atom/ns#' term='RPM'/><category scheme='http://www.blogger.com/atom/ns#' term='BPM'/><title type='text'>O BPM que faço hoje... é realmente BPM?</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-d294EdliLGQ/TXIqgqYxAhI/AAAAAAAABCM/CfPEeGJFDkg/s1600/bpmModeling.png"&gt;&lt;img style="float: left; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 193px; height: 164px;" src="http://4.bp.blogspot.com/-d294EdliLGQ/TXIqgqYxAhI/AAAAAAAABCM/CfPEeGJFDkg/s200/bpmModeling.png" alt="" id="BLOGGER_PHOTO_ID_5580569628887810578" border="0" /&gt;&lt;/a&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;Você sabia que BPM é algo que já existe e é hype a pelo menos 30 anos? É interessante observar isso pois, até percebemos que algo tão popular atualmente possa ter sido criado a vários anos e somente agora tenha ganhado tamanha popularidade, mas é d&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;ificil de acreditar que, no caso de BPM, a 30 anos que ele já era algo tão badalado e super-estimado como é hoje. Esse é mais um caso do fênomeno "conceito-reiventado", como o que acontece com diversas tecnologias que assolam nosso mercado de tecnologia da informação. Vamos entender um pouco da história do BPM para compreender como esse fenômeno ocorre.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;A história do BPM, escrita ao longo dos últimos 30 anos&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Em 1980, várias organizações desprenderam um investimento e atenção considerável no que era conhecido e popular na época como TQM. TQM é a sigla de Total Quality Management, uma abordagem sistemática para garantia de que produtos e/ou serviços d&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;e uma dada organização estariam sempre evoluindo quanto a qualidade, a fim de evitar que a taxa de evasão de clientes aumentasse em detrimento da pesada concorrência nos setores da organização. Ou seja, uma abordagem sistemática (portanto processual) para garantia de retenção de clientes e, portanto, estabilização garantida da rentabilidade, dois indicadores bastante comuns atualmente quando se fala em BPM.&lt;br /&gt;&lt;br /&gt;O ano agora é 1990. Surge a década demarcada pela presença do BPR, sigla de Business Process Reegineering, técnica inspirada e influenciada por &lt;a href="http://en.wikipedia.org/wiki/Michael_Hammer"&gt;Hammer&lt;/a&gt; e &lt;a href="http://en.wikipedia.org/wiki/James_A._Champy"&gt;Champy&lt;/a&gt;, que ressaltava a atenção especial a ser dada a análise e modelagem dos processos do negócio, objetivando a melhoria contínua do entendimento funcional das organizações. BPR teve uma grande repercussão, baseado em vários casos de sucesso, como também casos de fracasso. O meio dos anos 90 também&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; marcado pela introdução e proliferação do conceito de ERP, sigla de Enterprise Resource Planning. Seguindo a linha de raciocínio sobre eficiência operacional, ou seja, obter os mesmos resultados (ou melhores) com cada vez menos recursos, a técnica de sistematizar a utilização consciente e reduzida dos recursos se tornou bastante popular, principalmente com o advento dos diversos sistemas de informação de "caixinhas" como aplicativos da &lt;a href="http://www.sap.com/"&gt;SAP&lt;/a&gt;, &lt;a href="http://www.blogger.com/www.microsiga.com.br"&gt;Microsiga&lt;/a&gt;, &lt;a href="http://www.blogger.com/www.totvs.com"&gt;TOTVS&lt;/a&gt; que prometiam ser a solução para todos os problemas.&lt;br /&gt;&lt;br /&gt;Seguido do grande fenômeno causado pelos ERPs, veio na mesma década o foco especial em clientes e na visualização eficaz de informações de clientes para sustentação de tomadas de decisão mais estratégicas e menos operacionais, propciando cenários por exemplo, de realização de cross-selling e up-selling por parte de organizações como banco&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;s, operadores de telefonia e empresas de varejo. Surge então a era das soluções de CRM, sigla de Customer Relationship Management. A tendência agora é o foco inexorável no cliente e não somente, nos recursos. Do ponto de vista da linha do tempo, estamos beirando a chegada da década de 2000.&lt;br /&gt;&lt;br /&gt;O inicio da década de 2000 foi marcado pelo conceito e técnicas de Six Sigma, abordagem criada e desenvolvida pela &lt;a href="http://www.motorolasolutions.com/"&gt;Motorola&lt;/a&gt; que depois foi amplamente utilizado por diversos segmentos e indústrias. As técnicas eram em sua maioria focadas na redução de defeitos através da análise minuciosa das possíveis causas destes defeitos, o que leva as organizações a revisão completa de todos os  seus processos de demanda, elaboração, logística e entrega de produtos e serviços. Através da correta aplicação das técnicas de Six Sigma, a Motorola e demais organizações visavam aumentar a retenção de seus clientes e detrimento do aumento de sua qualidade e e&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ficência (TQM + ERP) porém com a grande diferença de não focar somente em processos de negócio individuais como departamentos ou áreas de produção isoladas, mas sim, em toda cadeia de valor que culmina na entrega de produtos e serviços ao cliente, cobrindo também, muitas das vezes, no reflexo que isso causa a organização no que tange a rentabilidade. Eram também objetivos do Six Sigma prover métodos para monitoração da saúde do negócio, porventura feito através da análise de indicadores do negócio, que possibilitava que a organização pudesse saber quando seria interessante adquirir outras organizações ou mesmo ser adquirida no momento certo que lhe desse maior lucratividade.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div  style="text-align: justify;font-family:verdana;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;De acordo com &lt;/span&gt;&lt;a style="font-family: verdana;" href="http://en.wikipedia.org/wiki/Michael_Hammer"&gt;Hammer&lt;/a&gt;&lt;span style="font-family:verdana;"&gt; (1993), "Conceber novas idéias é a parte mais fácil, mas concretizar essas idéias e transformá-las em fatos é a parte mais difícil". Através da simples análise das relações e objetivos de todas as técnicas (ou "gerações" do BPM), podemos ver claramente que BPM é nada mais que a soma de todas as escolas de engenharia de processos vividas, mostradas e provadas ao longo dos anos. Mas com base nos objetivos de cada técnica, e, portanto, nos objetivos de uma estratégia de BPM, temos hoje realmente casos onde BPM foi corretamente aplicado? A experiência fala que, sim, existem casos de sucesso onde BPM foi corretamente aplicado, mas, segundo o &lt;a href="http://www.gartner.com/technology/home.jsp"&gt;Gartner&lt;/a&gt;, estes representam apenas 5% de todos os casos de projetos que se auto-intitularam, projetos de BPM.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;A compilação das experiências e a formação do conceito&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Com base da revisão da história do BPM que fizemos, creio que podemos sintetizar vários pequenos objetivos que uma boa estratégia de BPM deve entregar. Estes objetivos individualmente, devem ser adequadamente entregues para que o valor seja agregado a estratégia. Neste caso, cada objetivo deve ser entregue através de uma ou mais evidências que garantam o seu pleno cumprimento. São eles:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; 1) Aumento da retenção de clientes através de fidelização destes&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt; 2) Aumento da qualidade dos produtos e serviços oferecidos&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt; 3) Assimilação do conhecimento e difusão dos processos de negócio&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt; 4) Aumento da eficiência através da melhor utilização dos recursos&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt; 5) Possibilidade de tomada de decisões rápidas e mais estratégicas&lt;br /&gt;6) Criação de mais negócios e oportunidades em clientes existentes&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;7) Visão mais holística dos processos, suas relações e dependências&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt; 8) Acompanhamento da saúde do negócio através de indicadores&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt; 9) Métodos para revisão contínua da estratégia organizacional&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Apresentado os principais objetivos de uma estratégia de BPM, comece a se perguntar: Em todos os tais "projetos de BPM" que você ouviu falar ou mesmo achou que executou, quantos destes objetivos foram entregues? Em minha experiência, tenho visto muitos profissionais no mercado que dizem fazer BPM ou terem feito BPM sem nunca na vida terem refletido, como fizemos agora, sobre o que realmente implica na realização da uma estratégia de BPM. Vejo profissionais que usam tecnologias de workflows e máquinas de estado ou mesmo composição de serviços (BPEL) em estratégias intituladas de "projetos de BPM" que jamais conseguirão entregar tais objetivos. Vejo também, além de profissionais de TI que desenvolvem tais projetos, profissionais de gerência de projetos e analistas de processos que dizem ser especialistas em BPM, mas que ao final de seus engajamentos jamais entregarão nenhum dos objetivos listados e cuja única preocupação é a entrega do escopo no prazo e no custo negociado.&lt;br /&gt;&lt;br /&gt;A conclusão da reflexão é que as pessoas esquecem o real significado da letra "M" em BPM. Qualquer aplicação Java ou .NET que coordena um conjunto de telas na forma de um fluxo é chamada de aplicação de BPM. Qualquer tecnologia que possibilite a modelagem, simulação, execução e monitoração de um ou mais processos de negócio se intitula suíte de BPM. Qualquer analista ou gerente de projetos que coordena uma iniciativa de melhoría de processos se intitula de analista de BPM. E, por fim, qualquer empresa que realiza um projeto que tenha alguma relação com uma área de negócio de uma organização se intitula empresa de BPM.&lt;br /&gt;&lt;br /&gt;Além da clara falta de visão e entrega dos objetivos de negócio discutidos anteriormente, tais situações se enganam em pensar que fazem BPM devido a falta de execução de uma equação muito simples:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: left;"&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;BPM = N * (APN + EPN + MPN)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Onde:&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;N = Número de ocorrências. Valor inicial é 3.&lt;br /&gt;APN = Análise do(s) Processo(s) do Negócio&lt;br /&gt;EPN = Execução do(s) Processo(s) do Negócio&lt;br /&gt;MPN = Melhoría do(s) Processo(s) do Negócio&lt;br /&gt;&lt;br /&gt;A leitura desta equação é a seguinte: Você só terá uma estratégia de BPM formal quando você entregar, pelo menos, 3 ou mais projetos que contemplem as atividades de APN, EPN e MPN, não respectivamente mas obrigatoriamente. E o mais importante de tudo é que, apesar de isso ser uma equação, que visa mostrar sistêmicamente uma idéia ou conceito, a realização desta equação têm como objetivos não o cálculo ou medição, mas a entrega de um ou mais objetivos cumpridos, objetivos esses que agregam valor as organizações.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;"Você não pode controlar aquilo que você não pode medir" - Tom DeMarco&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8571396175573944921-8332743510772483097?l=architecture-journal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://architecture-journal.blogspot.com/feeds/8332743510772483097/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8571396175573944921&amp;postID=8332743510772483097' title='3 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8571396175573944921/posts/default/8332743510772483097'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8571396175573944921/posts/default/8332743510772483097'/><link rel='alternate' type='text/html' href='http://architecture-journal.blogspot.com/2011/03/o-bpm-que-faco-hoje-e-realmente-bpm.html' title='O BPM que faço hoje... é realmente BPM?'/><author><name>Ricardo Ferreira</name><uri>http://www.blogger.com/profile/11930306647022714836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/-5T0r_5klxDA/Tn5CEvZpK0I/AAAAAAAABEg/MyTJuGi12ag/s220/ricardo-ferreira-Grande.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-d294EdliLGQ/TXIqgqYxAhI/AAAAAAAABCM/CfPEeGJFDkg/s72-c/bpmModeling.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8571396175573944921.post-4850368347810320377</id><published>2011-01-08T06:14:00.000-08:00</published><updated>2011-01-10T06:40:57.366-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='BTA'/><category scheme='http://www.blogger.com/atom/ns#' term='Progress'/><category scheme='http://www.blogger.com/atom/ns#' term='BTM'/><category scheme='http://www.blogger.com/atom/ns#' term='RPM'/><category scheme='http://www.blogger.com/atom/ns#' term='Actional'/><category scheme='http://www.blogger.com/atom/ns#' term='Governança'/><title type='text'>Maximizando sua Rentabilidade através do Progress Actional</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_xvsPdhzsV0E/TSjHdMWPWBI/AAAAAAAABBY/z_ptnzFsUXk/s1600/progressActionalNewLogo.png"&gt;&lt;img style="float: left; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 200px; height: 61px;" src="http://2.bp.blogspot.com/_xvsPdhzsV0E/TSjHdMWPWBI/AAAAAAAABBY/z_ptnzFsUXk/s200/progressActionalNewLogo.png" alt="" id="BLOGGER_PHOTO_ID_5559913044333516818" border="0" /&gt;&lt;/a&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;No atual cenário econômico mundial, organizações de diferentes segmentos estão em constante busca por meios de maximizar suas oportunidades de serem mais rentáveis, sem ter que invest&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;ir em dispendiosos sistemas ou na contratação d&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;e mais e mais pessoas. Uma forma de se conseguir isso é assegurando o sucesso individ&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;ual de cada pequena transação do seu negócio, transações estas como o processamento&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt; de uma compra via cartão de crédito, o registro de um hóspede num hotel ou habilitando uma nova linha telefônica para um cliente. Se uma organização conseguir assegurar estas transações de negócio, ela terá um aumento siginificativo em sua rentabilidade, na produtividade de seus funcionários e um aumento considerável da satisfação dos seus clientes.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;Se&lt;/span&gt; um problema ocorre em qualquer uma destas transações, tal como atraso na confirmação de um pedido de compra, demora de uma cotação de seguros pa&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ra uma co&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;rretora ou perda de detalhes sobre uma chamada telefônica, então a oportunidade de maximizar a r&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;entabilidade desaparece e os clientes irão rapidamente em busca da concorrência para terem seus produtos ou serviços desejados.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_xvsPdhzsV0E/TSh_f6YUiXI/AAAAAAAABBA/gA5vfJ4lKGA/s1600/businessScenarios.png"&gt;&lt;img style="cursor: pointer; width: 493px; height: 337px;" src="http://2.bp.blogspot.com/_xvsPdhzsV0E/TSh_f6YUiXI/AAAAAAAABBA/gA5vfJ4lKGA/s200/businessScenarios.png" alt="" id="BLOGGER_PHOTO_ID_5559833926212815218" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;Para complicar mais ainda a vida das organizações, existe o fato de que a&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; maioria destas transações de negócio são típicamente executadas em sistema&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;s comple&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;xos e altamente distribuídos, isto é, estão espalhadas por diversos servidores, bancos &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;de dados e &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;tecnologias de middleware de diferentes fabricantes e configurações.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_xvsPdhzsV0E/TSh94-ZgARI/AAAAAAAABA4/ImPoO5xn040/s1600/complexEnvinronments.png"&gt;&lt;img style="cursor: pointer; width: 496px; height: 345px;" src="http://2.bp.blogspot.com/_xvsPdhzsV0E/TSh94-ZgARI/AAAAAAAABA4/ImPoO5xn040/s200/complexEnvinronments.png" alt="" id="BLOGGER_PHOTO_ID_5559832157764976914" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;Para que uma organização possa assegurar o sucesso destas transações de negócio, ela precisa ter visibilidade de toda a sua infraestrutura de TI, de ponta à ponta, contemplando até mesmo parte da infraestrutura de TI de seus parceiros de negócio e seus fornecedores, pois estes porventura serão envolvidos  em todas as transações e processos de negócio que envolva a prestação de um serviço ou a entrega de um produto aos seus clientes.&lt;br /&gt;&lt;br /&gt;É necessário também que ela possa rapidamente detectar, diagnosticar e reagir aos problemas que ocorrem, antes que o seu negócio seja imp&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;actado&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; e antes que seus clientes saibam destes problemas. Para conseguir isso, ela precisa, depois de conseguir visibilidade de ponta à ponta, estabelecer políticas rígidas sobre os serviços que sua infraestrutura realiza para sustentar seus processos de negócio. Garantindo estas políticas, ela estará alinhada com os objetivos estratégicos da sua organização.&lt;br /&gt;&lt;br /&gt;Para conseguir isso, organizações do mundo todo têm recorrido ao &lt;a href="http://web.progress.com/en/actional/index.html"&gt;Progress Actional&lt;/a&gt;, a solução líder da indústria que ajuda companhias como a sua, a gerenciar ambientes complexos e distribuídos e a assegurar transações de negócio, objetivando a maxim&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ização da rentabilidade, aumento da satisfação dos clientes e o aumento da produtividade dos funcionários.&lt;br /&gt;&lt;br /&gt;Neste artigo, irei mostrar como o &lt;a href="http://web.progress.com/en/actional/index.html"&gt;Progress Actional&lt;/a&gt; pôde ajudar uma companhia de linhas aéreas a conseguir ser mais &lt;a href="http://web.progress.com/en/business-need/responsive-process-management.html"&gt;responsiva operacionalmente&lt;/a&gt; e a maximizar sua rentabilidade através da eficiente monitoração, &lt;a href="http://web.progress.com/en/Product-Capabilities/soa-management.html"&gt;gerenciamento&lt;/a&gt; e &lt;a href="http://web.progress.com/en/Product-Capabilities/soa-governance.html"&gt;governo&lt;/a&gt; da sua infraestrutura de TI. O estudo de caso fala sobre uma empresa fictícia, criada apenas para fins didáticos. Qualquer semelhança com qualquer companhia do segmento de linhas aéreas é mera conscidência.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-weight: bold;"&gt;Estudo de Caso da BlueSky Linhas Aéreas&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;A BlueSky linhas aéreas é uma empresa brasileira focada na prestação de serviços de vôos nacionais e internacionais. Ela opera no mercado brasileiro desde 1992, onde sempre conquistou vários clientes com sua forma especial de lidar com o cliente e seus passageiros. Nos últimos meses, a BlueSky observou que seu faturamento diminuiu consideravelmente, e o nível de insatisfação de seus clientes começou a crescer. Seu faturamento caiu 60% nos últimos dois quarters, e a concorrência está cada vez mais a frente do seu mercado, liderando todas as posições de preferência dos clientes.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Além disso, a própria imagem da companhia já está sendo prejudicada. Seu serviço está virando sinônimo de piadas, as pessoas compram suas passagens somente quando as da concorrência já não estão disponíveis, enfim, ela não é mais a referência no mercado brasileiro de melhor companhia de linha aérea. Na última semana por exemplo, o &lt;a href="http://twitter.com/"&gt;Twitter&lt;/a&gt; teve um estouro de tweets com a hashtag &lt;a href="http://www.blogger.com/post-edit.g?blogID=8571396175573944921&amp;amp;postID=4850368347810320377#blueSkySucks"&gt;#blueSkySucks&lt;/a&gt;, considerado o maior volume de tweets da história do &lt;a href="http://twitter.com/"&gt;Twitter&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_xvsPdhzsV0E/TSiFOaI1KxI/AAAAAAAABBI/CtPeQNiDho8/s1600/Scarrified.png"&gt;&lt;img style="cursor: pointer; width: 343px; height: 239px;" src="http://1.bp.blogspot.com/_xvsPdhzsV0E/TSiFOaI1KxI/AAAAAAAABBI/CtPeQNiDho8/s200/Scarrified.png" alt="" id="BLOGGER_PHOTO_ID_5559840222569900818" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;Tentanto entender porque tal situação acontecera e porque ficou tão fora de controle, O CEO da BlueSky descobriu que grande parte dos problemas estavam relacionados a sua infraestrutura de TI, e ao excesso de tempo necessário para investigação e correção de problemas em produção, bem como o alto custo relacionado as equipes de infraestrutura e suporte. Quando problemas aconteciam, era necessário que todas as equipes (infraestrutura, desenvolvimento, banco de dados e redes) ficassem de plantão horas a fio em seus blackberry's, até mesmo altas horas da madrugada. O custo com horas extras estava crescendo astronômicamente, além de que os problemas eram recorrentes, nunca se encontrava a real causa dos problemas, apenas criava-se soluções de contingência.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Ao questionar a diretoria de TI sobre a razão pelo qual a BlueSky ainda passava por aqueles tipos de problemas que eram diariamente vivenciados, o CEO da BlueSky descobriu que baseado em sua complexa infraestrutura de sistemas, servidores, banco de dados e plataformas, era quase impossível descobrir a causa dos problemas de forma rápida e eficaz. Com mais de 19 anos de existência, a BlueSky já havia adquirido mais de 80 sistemas de informação, 6 tipos de soluções de banco de dados, 3 tipos de servidores de aplicação Java EE, e já contava com mais de 120 web services que são utilizados nas operações da companhia.&lt;br /&gt;&lt;br /&gt;Preocupado com a situação, o CEO da BlueSky &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;resolveu então procurar alguma solução no mercado que resolvesse seu problema. Ele sabia que o seu problema era a falta de capacidade de ser mais eficiente operacionalmente, e de não poder dar respostas rápidas as demandas do mercado e aos desafios do dia a dia. Foi ai então que ele encontrou o &lt;a href="http://web.progress.com/en/actional/index.html"&gt;Progress Actional&lt;/a&gt;, uma solução integrada para assegurar transações de negócio e monitorar de ponta à ponta complexos e heterogêneos ambientes de TI, como o da BlueSky linhas aéreas.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;A Solução da BlueSky Linhas Aéreas&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Os vídeos abaixo mostram como o &lt;a href="http://web.progress.com/en/actional/index.html"&gt;Progress Actional&lt;/a&gt; ajudou a empresa BlueSky a voltar a ser a companhia aérea de melhor prestígio no mercado brasileiro. A série de três vídeos mostra, passo à passo, a aderência do &lt;a href="http://web.progress.com/en/actional/index.html"&gt;Progress Actional&lt;/a&gt; com o cenário da BlueSky.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Visão Geral sobre a Arquitetura Técnica da BlueSky Linhas Aérea&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;&lt;span style="font-family:verdana;"&gt;&lt;span&gt;s&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;object width="640" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/-HC-o6jwUz8?fs=1&amp;amp;hl=en_US"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/-HC-o6jwUz8?fs=1&amp;amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Identificando Problemas e Gargalos nas Transações de Negócio da BlueSky&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="640" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/Z6N7Nl2ociA?fs=1&amp;amp;hl=en_US"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/Z6N7Nl2ociA?fs=1&amp;amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Melhorando a Tomada de Decisões da BlueSky com Análises Dimensionais&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="640" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/AOudmp0GvUY?fs=1&amp;amp;hl=en_US"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/AOudmp0GvUY?fs=1&amp;amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;Se&lt;/span&gt;&lt;span&gt; você deseja conhecer mais detalhes sobre como o Progress Actional ajudou organizações do mundo todo a serem mais responsivas operacionalmente, leia alguns casos de sucesso do produto como o da &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span&gt;&lt;a href="http://web.progress.com/docs/casestudy/Bendit-Eng.pdf"&gt;Bendit Digipen&lt;/a&gt;, &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span&gt;&lt;a href="http://web.progress.com/en/inthenews/british-airways-sele-11162009.html"&gt;British Airways&lt;/a&gt;, &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span&gt;&lt;a href="http://web.progress.com/docs/casestudy/intercontinental-hotels-group.pdf"&gt;Intercontinental Hotels Group&lt;/a&gt;, &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span&gt;&lt;a href="http://web.progress.com/docs/casestudy/partners_healthcare.pdf"&gt;Partners Healthcare&lt;/a&gt; e o da &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span&gt;&lt;a href="http://web.progress.com/en/inthenews/west-bend-mutual-ins-10142009.html"&gt;West Bend Mutual&lt;/a&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-style: italic;"&gt;&lt;br /&gt;&lt;br /&gt;"Progress Software allows you transform the way you do business, from how you operate to how people work - their secret sauce is the ability to expose/extract key elements in the process flow and begin to make improvements immediately"&lt;/span&gt; - Forrester&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;"With Progress Software, you can listen to transactions irrespective of underlying software components and correlate then to the process  view without reeengineering. This is incredible valuable..."&lt;/span&gt; - Gartner&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;"Key differentiator for Progress Software is true discovery and correlation - this is what set them apart"&lt;/span&gt; - IDC&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8571396175573944921-4850368347810320377?l=architecture-journal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://architecture-journal.blogspot.com/feeds/4850368347810320377/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8571396175573944921&amp;postID=4850368347810320377' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8571396175573944921/posts/default/4850368347810320377'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8571396175573944921/posts/default/4850368347810320377'/><link rel='alternate' type='text/html' href='http://architecture-journal.blogspot.com/2011/01/maximizando-sua-rentabilidade-atraves_08.html' title='Maximizando sua Rentabilidade através do Progress Actional'/><author><name>Ricardo Ferreira</name><uri>http://www.blogger.com/profile/11930306647022714836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/-5T0r_5klxDA/Tn5CEvZpK0I/AAAAAAAABEg/MyTJuGi12ag/s220/ricardo-ferreira-Grande.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_xvsPdhzsV0E/TSjHdMWPWBI/AAAAAAAABBY/z_ptnzFsUXk/s72-c/progressActionalNewLogo.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8571396175573944921.post-4131499830509653048</id><published>2010-12-31T11:33:00.000-08:00</published><updated>2011-01-08T12:26:06.747-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='Sonic'/><category scheme='http://www.blogger.com/atom/ns#' term='Web Services'/><category scheme='http://www.blogger.com/atom/ns#' term='Progress'/><category scheme='http://www.blogger.com/atom/ns#' term='BPEL'/><category scheme='http://www.blogger.com/atom/ns#' term='ESB'/><title type='text'>Criando um Processo BPEL usando Sonic ESB</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_xvsPdhzsV0E/TSjITAi5D0I/AAAAAAAABBg/eRS5hWwAxlI/s1600/progressSonicNewLogo.png"&gt;&lt;img style="float: left; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 200px; height: 66px;" src="http://4.bp.blogspot.com/_xvsPdhzsV0E/TSjITAi5D0I/AAAAAAAABBg/eRS5hWwAxlI/s200/progressSonicNewLogo.png" alt="" id="BLOGGER_PHOTO_ID_5559913968878292802" border="0" /&gt;&lt;/a&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;Você trabalha na área de integração de TI numa operadora de telefonia do Brasil e seus gerentes funcionais lhe pedem para criar um serviço que possa dizer se determinado número de celular pode ou não ser portado de uma operadora para outra. Você sabe que para fazer isso, você deve primeiro consultar na base de dados de contratos de clientes da operadora para saber se aquele número está disponível, bem como assegurar que o dado número já não possui um pedido de portabilidade numérica feito por outra operadora concorrente.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;Este serviço precisa ser disponibilizado nos próximos 25 minutos, pois o novo portal Web da operadora já contempla esta funcionalidade (de fato uma das funcionalidades mais esperadas neste novo portal) mas devido a problemas de comunicação entre as equipes do projeto, esqueceram de avisar você que o portal deve ser lançado hoje. A unica coisa que você possui em mãos é um Web Service chamado de ProvisioningService que responde se o número de celular está ou não disponível e um Web Service da Anatel chamado GatewayAnatelService que responde se o número possui ou não um pedido de portabilidade numérica. E agora, o que você faz?&lt;br /&gt;&lt;br /&gt;Neste post, iremos mostrar como usando o &lt;a href="http://web.progress.com/en/sonic/sonic-esb.html"&gt;Sonic ESB&lt;/a&gt;, podemos criar um Web Service que atenda a funcionalidade especificada. Para isso, criarei passo à passo um Web Service composto, ou seja, um Web Service que é baseado em um ou mais Web Services existentes. E pra isso, usarei a tecnologia &lt;a href="http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=wsbpel"&gt;BPEL&lt;/a&gt;. Utilizando o &lt;a href="http://web.progress.com/en/sonic/sonic-esb.html"&gt;Sonic ESB&lt;/a&gt;, irei criar em apenas 25 minutos, um processo BPEL (Web Service) que irá responder se determinado número de celular está ou não disponível para portabilidade numérica.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Parte 1 - Criação Inicial do Processo BPEL e Definição da Interface da Operação de Consulta de Disponibilidade&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="640" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/YTNOq77S7EI?fs=1&amp;amp;hl=en_US"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/YTNOq77S7EI?fs=1&amp;amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Parte 2 - Implementação do Fluxo do Processo BPEL através dos Web Services Previamente Implementados&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="640" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/DuWwifp9mIQ?fs=1&amp;amp;hl=en_US"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/DuWwifp9mIQ?fs=1&amp;amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Parte 3 - Implantação do Processo BPEL dentro do Sonic ESB e Testes usando Cenários e Ferramentas de Depuração&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="640" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/xIPPDMyO748?fs=1&amp;amp;hl=en_US"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/xIPPDMyO748?fs=1&amp;amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_xvsPdhzsV0E/TRTJNP-B5TI/AAAAAAAABAU/Z-9ZqveDg3Y/s1600/sonic.jpg"&gt;&lt;img style="cursor: pointer; width: 481px; height: 323px;" src="http://4.bp.blogspot.com/_xvsPdhzsV0E/TRTJNP-B5TI/AAAAAAAABAU/Z-9ZqveDg3Y/s1600/sonic.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8571396175573944921-4131499830509653048?l=architecture-journal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://architecture-journal.blogspot.com/feeds/4131499830509653048/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8571396175573944921&amp;postID=4131499830509653048' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8571396175573944921/posts/default/4131499830509653048'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8571396175573944921/posts/default/4131499830509653048'/><link rel='alternate' type='text/html' href='http://architecture-journal.blogspot.com/2010/12/criando-um-processo-bpel-usando-sonic.html' title='Criando um Processo BPEL usando Sonic ESB'/><author><name>Ricardo Ferreira</name><uri>http://www.blogger.com/profile/11930306647022714836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/-5T0r_5klxDA/Tn5CEvZpK0I/AAAAAAAABEg/MyTJuGi12ag/s220/ricardo-ferreira-Grande.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_xvsPdhzsV0E/TSjITAi5D0I/AAAAAAAABBg/eRS5hWwAxlI/s72-c/progressSonicNewLogo.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8571396175573944921.post-2152480330923591252</id><published>2010-12-26T07:55:00.001-08:00</published><updated>2011-01-08T12:27:57.502-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='Sonic'/><category scheme='http://www.blogger.com/atom/ns#' term='Progress'/><category scheme='http://www.blogger.com/atom/ns#' term='EAI'/><category scheme='http://www.blogger.com/atom/ns#' term='ESB'/><title type='text'>Depurando Cenários de Integração usando Sonic ESB</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_xvsPdhzsV0E/TSjIv2lsJEI/AAAAAAAABBo/flbfs06p7Fo/s1600/progressSonicNewLogo.png"&gt;&lt;img style="float: left; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 200px; height: 66px;" src="http://2.bp.blogspot.com/_xvsPdhzsV0E/TSjIv2lsJEI/AAAAAAAABBo/flbfs06p7Fo/s200/progressSonicNewLogo.png" alt="" id="BLOGGER_PHOTO_ID_5559914464421880898" border="0" /&gt;&lt;/a&gt;&lt;span style="font-family: verdana;font-family:verdana;font-size:85%;"  &gt;Você lembra do excelente &lt;a href="http://eaipatterns.com/docs/TestDrivenEAI.pdf"&gt;artigo&lt;/a&gt; escrito por &lt;a href="http://eaipatterns.com/gregor.html"&gt;Gregor Hohpe&lt;/a&gt; em 2002 sobre EAI dirigido à testes? Sem dúvida, é até hoje um dos melhores artigos sobre o assunto, mesmo nos dias de hoje. No Artigo, ele fala sobre como conduzir testes de arquiteturas baseadas em integração e de multiplas camadas, cenário este que pode ser bem desafiador sem as ferramentas adequadas. Cenários de integração são por natureza dificeis de testar, pois você envolve diversas plataformas e aplicações distintas para atender a uma necessidade da organização.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;Neste post, iremos mostrar os recursos e ferramentas que o &lt;a href="http://web.progress.com/en/sonic/sonic-esb.html"&gt;Sonic ESB&lt;/a&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;disponibiliza em seu &lt;a href="http://web.progress.com/en/sonic/sonic-esb-workbench.html"&gt;ambiente de desenvolvimento&lt;/a&gt; para realizar complexas tarefas de depuração de cenários de integração, não importanto o tamanho ou natureza do cenário à ser testado. Confira estes recursos no vídeo abaixo.&lt;br /&gt;&lt;br /&gt;&lt;object width="640" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/mVJkV0NMb1I?fs=1&amp;amp;hl=en_US"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/mVJkV0NMb1I?fs=1&amp;amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_xvsPdhzsV0E/TRTJNP-B5TI/AAAAAAAABAU/Z-9ZqveDg3Y/s1600/sonic.jpg"&gt;&lt;img style="cursor: pointer; width: 481px; height: 323px;" src="http://4.bp.blogspot.com/_xvsPdhzsV0E/TRTJNP-B5TI/AAAAAAAABAU/Z-9ZqveDg3Y/s1600/sonic.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8571396175573944921-2152480330923591252?l=architecture-journal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://architecture-journal.blogspot.com/feeds/2152480330923591252/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8571396175573944921&amp;postID=2152480330923591252' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8571396175573944921/posts/default/2152480330923591252'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8571396175573944921/posts/default/2152480330923591252'/><link rel='alternate' type='text/html' href='http://architecture-journal.blogspot.com/2010/12/depurando-cenarios-de-integracao-usando.html' title='Depurando Cenários de Integração usando Sonic ESB'/><author><name>Ricardo Ferreira</name><uri>http://www.blogger.com/profile/11930306647022714836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/-5T0r_5klxDA/Tn5CEvZpK0I/AAAAAAAABEg/MyTJuGi12ag/s220/ricardo-ferreira-Grande.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_xvsPdhzsV0E/TSjIv2lsJEI/AAAAAAAABBo/flbfs06p7Fo/s72-c/progressSonicNewLogo.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8571396175573944921.post-74643484054663141</id><published>2010-12-23T14:42:00.001-08:00</published><updated>2011-01-08T12:28:51.254-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='Sonic'/><category scheme='http://www.blogger.com/atom/ns#' term='Web Services'/><category scheme='http://www.blogger.com/atom/ns#' term='Progress'/><category scheme='http://www.blogger.com/atom/ns#' term='EAI'/><title type='text'>Criando um Web Service usando Sonic ESB</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_xvsPdhzsV0E/TSjI9q6bxaI/AAAAAAAABBw/_hKArw5ycNs/s1600/progressSonicNewLogo.png"&gt;&lt;img style="float: left; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 200px; height: 66px;" src="http://4.bp.blogspot.com/_xvsPdhzsV0E/TSjI9q6bxaI/AAAAAAAABBw/_hKArw5ycNs/s200/progressSonicNewLogo.png" alt="" id="BLOGGER_PHOTO_ID_5559914701805831586" border="0" /&gt;&lt;/a&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;Imagine que você recebe a tarefa de disponibilizar para um parceiro de negócios, cliente ou mesmo fornecedor, um Web Service que ofereça a capacidade de buscar seus produtos em sua base de dados corporativa. Mas você possui apenas uma hora para fazer isso, e a única coisa que você possui pronta é a base de dados contendo os produtos. A equipe de infra-estrutura aguarda que em uma hora você tenha este Web Service pronto e funcional para que eles possam somente disponibilizar no servidor da Web exposto fora do firewall.&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: verdana;"&gt; Você deve implementar os seguintes requisitos funcionais e não-funcionais:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Busca de um determinado produto na base de dados, dado o código de identificação (chave primária) deste produto&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Exibição uma mensagem descritiva de falha caso o produto não seja encontrado no Banco de Dados&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Exibição uma mensagem descritiva de erro caso ocorra uma falha de comunicação com o Banco de Dados&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Conectividade com o servidor de banco de dados MySQL 5.1, suporte a transações XA e mecanismo de fail-over para JDBC&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Expor este Web Service numa porta específica do servidor de aplicações que irá hospedar o Web Service (Ex: Porta 5555)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;E agora, o que você faria?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Este é o tipo de cenário que o &lt;a href="http://web.progress.com/en/sonic/sonic-esb.html"&gt;Sonic ESB&lt;/a&gt; visa resolver. Através do Sonic ESB, você pode criar e manter processos de integração complexos como este, como o mínimo de esforço, sem ter que perder tempo com cansativas e errôneas horas de escrita de código em Java, C#, Ruby ou mesmo XML, além de poder garantir os requisitos funcionais e não-funcionais através de cenários de testes integrados e de regressão.&lt;br /&gt;&lt;br /&gt;Para mostrar como isso pode ser feito, criei cinco vídeos que mostram passo à passo, a criação deste mesmo cenário, e a fim de suprir as expectativas, o cenário é criado e testado em apenas 48 minutos, menos de uma hora. Desafiador concorda? Pegue seu cronômetro e veja como isso é possível nos vídeos abaixo.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-weight: bold;"&gt;Parte 1 - Definição de um Modelo de Dados Canônico e dos Tipos Complexos&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;object width="640" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/d8GSocKQVGk?fs=1&amp;amp;hl=en_US"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/d8GSocKQVGk?fs=1&amp;amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-weight: bold;font-family:verdana;font-size:85%;"  &gt;Parte 2 - Implementação da Lógica Inicial do Web Service&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;object width="640" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/riV0tNuqH20?fs=1&amp;amp;hl=en_US"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/riV0tNuqH20?fs=1&amp;amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-weight: bold;font-family:verdana;font-size:85%;"  &gt;Parte 3 - Implementando á Consulta do Produto no Banco de Dados MySQL&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;object width="640" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/sLRUpMKI8uA?fs=1&amp;amp;hl=en_US"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/sLRUpMKI8uA?fs=1&amp;amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-weight: bold;font-family:verdana;font-size:85%;"  &gt;Parte 4 - Tratando à Exceção "Produto não Encontrado" usando Faults&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;object width="640" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/kKbLECWLSf0?fs=1&amp;amp;hl=en_US"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/kKbLECWLSf0?fs=1&amp;amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Parte 5 - Tratanto o Erro "Falha de Comunicação com o Banco de Dados"&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;object width="640" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/5xz5lAA8wDs?fs=1&amp;amp;hl=en_US"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/5xz5lAA8wDs?fs=1&amp;amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Este é o tipo de velocidade que somente o Sonic ESB pode lhe trazer. Não é a toa que o Sonic ESB é o melhor ESB do mundo: Além de rápido e elegante, ele é super escalável e resiliente. Desculpe a concorrência mas quando o assunto é Sonic, o resto é literalmente, apenas o resto.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_xvsPdhzsV0E/TRTJNP-B5TI/AAAAAAAABAU/Z-9ZqveDg3Y/s1600/sonic.jpg"&gt;&lt;img style="cursor: pointer; width: 481px; height: 323px;" src="http://4.bp.blogspot.com/_xvsPdhzsV0E/TRTJNP-B5TI/AAAAAAAABAU/Z-9ZqveDg3Y/s1600/sonic.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8571396175573944921-74643484054663141?l=architecture-journal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://architecture-journal.blogspot.com/feeds/74643484054663141/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8571396175573944921&amp;postID=74643484054663141' title='3 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8571396175573944921/posts/default/74643484054663141'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8571396175573944921/posts/default/74643484054663141'/><link rel='alternate' type='text/html' href='http://architecture-journal.blogspot.com/2010/12/criando-um-web-service-usando-sonic-esb.html' title='Criando um Web Service usando Sonic ESB'/><author><name>Ricardo Ferreira</name><uri>http://www.blogger.com/profile/11930306647022714836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/-5T0r_5klxDA/Tn5CEvZpK0I/AAAAAAAABEg/MyTJuGi12ag/s220/ricardo-ferreira-Grande.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_xvsPdhzsV0E/TSjI9q6bxaI/AAAAAAAABBw/_hKArw5ycNs/s72-c/progressSonicNewLogo.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8571396175573944921.post-4895468187277189583</id><published>2010-12-05T14:00:00.000-08:00</published><updated>2011-01-08T12:33:34.538-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Savvion'/><category scheme='http://www.blogger.com/atom/ns#' term='BAM'/><category scheme='http://www.blogger.com/atom/ns#' term='Progress'/><category scheme='http://www.blogger.com/atom/ns#' term='BPM'/><title type='text'>Introdução ao Progress Savvion BPM</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_xvsPdhzsV0E/TSjJlcKTOJI/AAAAAAAABB4/q5_sj1rTQ6Y/s1600/progressSavvionNewLogo.png"&gt;&lt;img style="float: left; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 200px; height: 63px;" src="http://3.bp.blogspot.com/_xvsPdhzsV0E/TSjJlcKTOJI/AAAAAAAABB4/q5_sj1rTQ6Y/s200/progressSavvionNewLogo.png" alt="" id="BLOGGER_PHOTO_ID_5559915385040615570" border="0" /&gt;&lt;/a&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;Quem acompanha a &lt;a href="http://web.progress.com/en/index.html"&gt;Progress Software&lt;/a&gt; sabe que, ela é uma empresa que diferentemente dos seus concorrentes, está continuamente a frente do seu próprio tempo, seja tecnologicamente, seja estratégicamente. A sua diferença se dá nas tecnologias e produtos que ela possue, seja por sua própria criação, seja pelas empresas que ela adquiriu ao longo dos anos. Alguns exemplos disso são suas soluções de CORBA, resultado da aquisição da &lt;a href="http://en.wikipedia.org/wiki/IONA_Technologies"&gt;IONA Technologies&lt;/a&gt;, líder mundial em soluções CORBA. Outro bom exemplo é o ESB mais rápido, simples e robusto do mundo, o Sonic ESB, resultado da aquisição da &lt;a href="http://web.progress.com/en/sonic/index.html"&gt;Sonic Software&lt;/a&gt;. Outro exemplo também interessante é sua plataforma de governanç&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;a SOA conhecida como Actional, resultado da aquisição da &lt;/span&gt;&lt;a style="font-family: verdana;" href="http://www.actional.com/mindreef/"&gt;MindReef&lt;/a&gt;&lt;span style="font-family:verdana;"&gt;. Vários outros exemplos podem ser citados também como &lt;/span&gt;&lt;a style="font-family: verdana;" href="http://web.datadirect.com/index.html"&gt;DataDirect Technologies&lt;/a&gt;&lt;span style="font-family:verdana;"&gt;, &lt;/span&gt;&lt;a style="font-family: verdana;" href="http://fusesource.com/"&gt;Fuse Source&lt;/a&gt;&lt;span style="font-family:verdana;"&gt;, &lt;/span&gt;&lt;a style="font-family: verdana;" href="http://web.progress.com/en/apama/"&gt;Apama&lt;/a&gt;&lt;span style="font-family:verdana;"&gt; entre outros.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;Dentre todas estas aquisições, uma delas sem dúvida foi a melhor semente que a Progress Software plantou: A aquisição da &lt;a href="http://web.progress.com/en/savvion/index.html"&gt;Savvion&lt;/a&gt;. A Savvion é uma empresa que foi &lt;a href="http://web.progress.com/en/inthenews/progress-software-co-01112010.html"&gt;adquirida&lt;/a&gt; pela Progress Software em 11 de Janeiro de 2010, mas que possui uma estória de sucesso de 15 anos com clientes do mundo todo na área de BPM e tecnologia para melhoría contínua de processos de negócio. Agora imagine o que são 15 anos (5.475 dias) sendo uma empresa focada num único nicho, e que a cada ano vivido, investiu cada vez mais em sua tecnologia. O que você espera, no mínimo de uma empresa como essa? Se você pensa como eu, deve imaginar com certeza uma plataforma de BPM que já passou por diversos ciclos de melhoría e que se encontra num nív&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;el de maturidade muito alto. Deve esperar por uma plataforma de BPM que já foi utilizada por vários clientes do mundo todo, clientes esses que devem ter várias estórias de sucesso para contar. Diferentemente das plataformas de BPM dos concorrentes que possuem alguns poucos anos de experiência (entre 4 à 6 anos de existência), a Savvion definiu e liderou a essência do que é e o que deveria ser uma plataforma de BPM. Afinal de contas, estamos falando de 15 anos, e nada mais justo que ela seja pelo menos um dos líderes do &lt;a href="http://www.forrester.com/rb/research"&gt;Forrester&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_xvsPdhzsV0E/TPwV_gjy5dI/AAAAAAAAA_8/le7MUKYUfp4/s1600/forrester-bpm-2010.jpg"&gt;&lt;img style="cursor: pointer; width: 168px; height: 200px;" src="http://3.bp.blogspot.com/_xvsPdhzsV0E/TPwV_gjy5dI/AAAAAAAAA_8/le7MUKYUfp4/s200/forrester-bpm-2010.jpg" alt="" id="BLOGGER_PHOTO_ID_5547333021829621202" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;Para apresentar um pouco do que essa plataforma de BPM é capaz, preparei especialmente para vocês uma sequência de vídeos que mostram, passo à passo, a modelagem, automação, simulação, implantação, utilização e monitoramento de um processo de negócio simples, mas que revela o potencial da solução. Neste post irei dar inicio à bateria de demonstrações dos produtos da linha Savvion, onde espero poder demonstrar a realidade que eu vejo: o poder e a supremacia na área de BPM que somente o Progress Savvion pode oferecer. Espero que gostem!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Parte 1: Modelagem de um Processo de Negócio &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;&lt;span style="font-family:verdana;"&gt;usando Savvion BPM Studio&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;object width="640" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/z2j1vz8CIU0?fs=1&amp;amp;hl=en_US"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/z2j1vz8CIU0?fs=1&amp;amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Parte 2: Automação do Processo de Negócio usando Savvion BPM Studio&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="640" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/tMP3s0Uks3w?fs=1&amp;amp;hl=en_US"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/tMP3s0Uks3w?fs=1&amp;amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Parte 3: Simulando o Processo de Negócio &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-weight: bold;"&gt;usando Savvion BPM Studio&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="640" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/FZAmXpBlzYU?fs=1&amp;amp;hl=en_US"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/FZAmXpBlzYU?fs=1&amp;amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Parte 4: Implantando o Processo de Negócio no Savvion BusinessManager&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="640" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/_wsuO-wygGg?fs=1&amp;amp;hl=en_US"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/_wsuO-wygGg?fs=1&amp;amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Parte 5: Utilizando o Processo de Negócio no Savvion BPM Portal&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="640" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/ZgAgKBKx2zo?fs=1&amp;amp;hl=en_US"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/ZgAgKBKx2zo?fs=1&amp;amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Parte 6: Monitorando o Processo de Negócio usando o BAM do Savvion (Savvion BusinessExpert)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="640" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/sC_1Z7bmAds?fs=1&amp;amp;hl=en_US"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/sC_1Z7bmAds?fs=1&amp;amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8571396175573944921-4895468187277189583?l=architecture-journal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://architecture-journal.blogspot.com/feeds/4895468187277189583/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8571396175573944921&amp;postID=4895468187277189583' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8571396175573944921/posts/default/4895468187277189583'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8571396175573944921/posts/default/4895468187277189583'/><link rel='alternate' type='text/html' href='http://architecture-journal.blogspot.com/2010/12/introducao-ao-progress-savvion-bpm.html' title='Introdução ao Progress Savvion BPM'/><author><name>Ricardo Ferreira</name><uri>http://www.blogger.com/profile/11930306647022714836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/-5T0r_5klxDA/Tn5CEvZpK0I/AAAAAAAABEg/MyTJuGi12ag/s220/ricardo-ferreira-Grande.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_xvsPdhzsV0E/TSjJlcKTOJI/AAAAAAAABB4/q5_sj1rTQ6Y/s72-c/progressSavvionNewLogo.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8571396175573944921.post-2073303393762397541</id><published>2010-11-21T16:02:00.000-08:00</published><updated>2011-01-08T12:34:29.266-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='Sonic'/><category scheme='http://www.blogger.com/atom/ns#' term='Progress'/><category scheme='http://www.blogger.com/atom/ns#' term='EAI'/><category scheme='http://www.blogger.com/atom/ns#' term='ESB'/><title type='text'>Manipulando Flat Files com o Sonic ESB</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_xvsPdhzsV0E/TSjKRr80GeI/AAAAAAAABCA/n9O5WVetVCw/s1600/progressSonicNewLogo.png"&gt;&lt;img style="float: left; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 200px; height: 66px;" src="http://1.bp.blogspot.com/_xvsPdhzsV0E/TSjKRr80GeI/AAAAAAAABCA/n9O5WVetVCw/s200/progressSonicNewLogo.png" alt="" id="BLOGGER_PHOTO_ID_5559916145193261538" border="0" /&gt;&lt;/a&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;Você sabia que, na TI de qualquer empresa de médio e grande porte, são mantidos cerca de 40 à 60 cenários de integração que subsidiam alguns processsos de negócios críticos? Dentre estes cenários, um deles é o caso onde as informações são &lt;a href="http://www.eaipatterns.com/FileTransferIntegration.html"&gt;integradas via arquivo texto&lt;/a&gt;, e o arquivo deve ser processado e enviado à algum &lt;a href="http://www.eaipatterns.com/MessageEndpoint.html"&gt;canal de dados&lt;/a&gt; particular, como &lt;a href="http://www.eaipatterns.com/Messaging.html"&gt;sistemas de mensageria&lt;/a&gt;, uma &lt;a href="http://www.eaipatterns.com/SharedDataBaseIntegration.html"&gt;tabela de banco de dados&lt;/a&gt; ou mesmo o acesso a um &lt;a href="http://www.eaipatterns.com/EncapsulatedSynchronousIntegration.html"&gt;web service&lt;/a&gt; ou um componente EJB.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;Imagine o esforço e tempo dedicados à criação e mais ainda, a manutenção destes cenários? É razoável pensar em formas de se manter ambientes como estes da forma mais simples, ágil e agradável possível. E pra isso, você deve usar as &lt;a href="http://architecture-journal.blogspot.com/2010/11/o-mundo-perfeito-para-soa-cep-bpm.html"&gt;ferramentas corretas&lt;/a&gt;. Neste post, irei mostrar como o &lt;a href="http://web.progress.com/en/sonic/sonic-esb.html"&gt;Sonic ESB&lt;/a&gt; da &lt;a href="http://web.progress.com/en/index.html"&gt;Progress Software&lt;/a&gt; pode ajudar você a manter cenários de integração complexos com extrema facilidade e elegância. Para mostrar isso, irei criar passo a passo, um cenário onde um arquivo CSV será lido pelo Sonic ESB, e depois de realizado o processamento (a transformação da mensagem do formato CSV para XML) será enviado à uma fila JMS do tipo Topic.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;&lt;span style="font-family:verdana;"&gt;Parte 1: Criação inicial do projeto e transformação CSV para XML&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="440" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/hfzTWONFzps?fs=1&amp;amp;hl=en_US"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/hfzTWONFzps?fs=1&amp;amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;Parte 2: Adequação da mensagem XML usando XSLT&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="440" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/Avsqp6MqI9I?fs=1&amp;amp;hl=en_US"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/Avsqp6MqI9I?fs=1&amp;amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;Parte 3: Implantação do projeto no domínio do Sonic ESB&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="440" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/_fcnBhEzFRg?fs=1&amp;amp;hl=en_US"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/_fcnBhEzFRg?fs=1&amp;amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Boas Integrações ;-)&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8571396175573944921-2073303393762397541?l=architecture-journal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://architecture-journal.blogspot.com/feeds/2073303393762397541/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8571396175573944921&amp;postID=2073303393762397541' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8571396175573944921/posts/default/2073303393762397541'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8571396175573944921/posts/default/2073303393762397541'/><link rel='alternate' type='text/html' href='http://architecture-journal.blogspot.com/2010/11/manipulando-flat-files-com-o-sonic-esb.html' title='Manipulando Flat Files com o Sonic ESB'/><author><name>Ricardo Ferreira</name><uri>http://www.blogger.com/profile/11930306647022714836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/-5T0r_5klxDA/Tn5CEvZpK0I/AAAAAAAABEg/MyTJuGi12ag/s220/ricardo-ferreira-Grande.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_xvsPdhzsV0E/TSjKRr80GeI/AAAAAAAABCA/n9O5WVetVCw/s72-c/progressSonicNewLogo.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8571396175573944921.post-4044993740257508322</id><published>2010-11-15T03:25:00.000-08:00</published><updated>2010-11-15T09:48:03.169-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Savvion'/><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='Sonic'/><category scheme='http://www.blogger.com/atom/ns#' term='BPM'/><category scheme='http://www.blogger.com/atom/ns#' term='ESB'/><category scheme='http://www.blogger.com/atom/ns#' term='Actional'/><title type='text'>O Mundo Perfeito para SOA, CEP &amp; BPM ... Existe?</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;span style="font-size:85%;"&gt;&lt;a style="font-family: verdana;" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_xvsPdhzsV0E/TOEcysgHBnI/AAAAAAAAA7M/069aO7evEFU/s1600/imagemInicial.jpg"&gt;&lt;img style="float: left; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 184px; height: 200px;" src="http://1.bp.blogspot.com/_xvsPdhzsV0E/TOEcysgHBnI/AAAAAAAAA7M/069aO7evEFU/s200/imagemInicial.jpg" alt="" id="BLOGGER_PHOTO_ID_5539740673907295858" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-family: verdana;font-family:verdana;font-size:85%;"  &gt;Depois de vários anos&lt;/span&gt;&lt;span style="font-family: verdana;font-family:verdana;font-size:85%;"  &gt; di&lt;/span&gt;&lt;span style="font-family: verdana;font-family:verdana;font-size:85%;"  &gt;scutindo &lt;/span&gt;&lt;span style="font-family: verdana;font-family:verdana;font-size:85%;"  &gt;sobre SOA, CEP e BPM, seja neste blog ou em outros veículos &lt;/span&gt;&lt;span style="font-family: verdana;font-family:verdana;font-size:85%;"  &gt;de comunicaç&lt;/span&gt;&lt;span style="font-family: verdana;font-family:verdana;font-size:85%;"  &gt;ão, já podemos perceber claramente o valor de uma &lt;/span&gt;&lt;span style="font-family: verdana;font-family:verdana;font-size:85%;"  &gt;arquitetura&lt;/span&gt;&lt;span style="font-family: verdana;font-family:verdana;font-size:85%;"  &gt; o&lt;/span&gt;&lt;span style="font-family: verdana;font-family:verdana;font-size:85%;"  &gt;rien&lt;/span&gt;&lt;span style="font-family: verdana;font-family:verdana;font-size:85%;"  &gt;tada a serviços (SOA), do processamento de eventos comp&lt;/span&gt;&lt;span style="font-family: verdana;font-family:verdana;font-size:85%;"  &gt;lexos (CEP) e do gerenciamento de processos de negócio (BP&lt;/span&gt;&lt;span style="font-family: verdana;font-family:verdana;font-size:85%;"  &gt;M&lt;/span&gt;&lt;span style="font-family: verdana;font-family:verdana;font-size:85%;"  &gt;) dentro &lt;/span&gt;&lt;span style="font-family: verdana;font-family:verdana;font-size:85%;"  &gt;das o&lt;/span&gt;&lt;span style="font-family: verdana;font-family:verdana;font-size:85%;"  &gt;rganizações. BPM ajuda as empresas a serem mais respo&lt;/span&gt;&lt;span style="font-family: verdana;font-family:verdana;font-size:85%;"  &gt;nsiv&lt;/span&gt;&lt;span style="font-family: verdana;font-family:verdana;font-size:85%;"  &gt;as quanto as mudanças de mercado e a constante busca por e&lt;/span&gt;&lt;span style="font-family: verdana;font-family:verdana;font-size:85%;"  &gt;ficá&lt;/span&gt;&lt;span style="font-family: verdana;font-family:verdana;font-size:85%;"  &gt;c&lt;/span&gt;&lt;span style="font-family: verdana;font-family:verdana;font-size:85%;"  &gt;ia &lt;/span&gt;&lt;span style="font-family: verdana;font-family:verdana;font-size:85%;"  &gt;e&lt;/span&gt;&lt;span style="font-family: verdana;font-family:verdana;font-size:85%;"  &gt; eficiê&lt;/span&gt;&lt;span style="font-family: verdana;font-family:verdana;font-size:85%;"  &gt;ncia em pró de atender as demandas de seus clientes, parce&lt;/span&gt;&lt;span style="font-family: verdana;font-family:verdana;font-size:85%;"  &gt;iros e &lt;/span&gt;&lt;span style="font-family: verdana;font-family:verdana;font-size:85%;"  &gt;funcionários. SOA por sua vez, têm como premissa transform&lt;/span&gt;&lt;span style="font-family: verdana;font-family:verdana;font-size:85%;"  &gt;ar a TI numa arma &lt;/span&gt;&lt;span style="font-family: verdana;font-family:verdana;font-size:85%;"  &gt;estratégica para que objetivos de negócio como mel&lt;/span&gt;&lt;span style="font-family: verdana;font-family:verdana;font-size:85%;"  &gt;horía&lt;/span&gt;&lt;span style="font-family: verdana;font-family:verdana;font-size:85%;"  &gt; de p&lt;/span&gt;&lt;span style="font-family: verdana;font-family:verdana;font-size:85%;"  &gt;rocessos e atendimento a demandas de mercado &lt;/span&gt;&lt;span style="font-family: verdana;font-family:verdana;font-size:85%;"  &gt;possam virar &lt;/span&gt;&lt;span style="font-family: verdana;font-family:verdana;font-size:85%;"  &gt;uma realidade ágil, quebrando portanto a imagem que a TI ho&lt;/span&gt;&lt;span style="font-family: verdana;font-family:verdana;font-size:85%;"  &gt;je possui de ser um custo ao invés de um investimento, bem como de s&lt;/span&gt;&lt;span style="font-family: verdana;font-family:verdana;font-size:85%;"  &gt;er honerosa, dispendiosa e pouco eficaz. A TI ainda conta com outra arma poderosa para prova do seu valor: CEP. O processamento de eventos comp&lt;/span&gt;&lt;span style="font-family: verdana;font-family:verdana;font-size:85%;"  &gt;lexos visa monitorar nuvens de eventos e detectar padrões nestes&lt;/span&gt;&lt;span style="font-family: verdana;font-family:verdana;font-size:85%;"  &gt; eventos &lt;/span&gt;&lt;span style="font-family: verdana;font-family:verdana;font-size:85%;"  &gt;que os relacione de tal forma, a identificar uma condição especial que seja de suma&lt;/span&gt;&lt;span style="font-family: verdana;font-family:verdana;font-size:85%;"  &gt; importância para as organizações, condições como ameaças de produtos d&lt;/span&gt;&lt;span style="font-family: verdana;font-family:verdana;font-size:85%;"  &gt;e co&lt;/span&gt;&lt;span style="font-family: verdana;font-family:verdana;font-size:85%;"  &gt;ncorrentes, falhas num processo de atendimento, novas oportunidad&lt;/span&gt;&lt;span style="font-family: verdana;font-family:verdana;font-size:85%;"  &gt;es de atend&lt;/span&gt;&lt;span style="font-family: verdana;font-family:verdana;font-size:85%;"  &gt;imento, etc, condições estas que representam o conceito de eventos complexos. Empresas de "tempo real" &lt;/span&gt;&lt;span style="font-family: verdana;font-family:verdana;font-size:85%;"  &gt;o&lt;/span&gt;&lt;span style="font-family: verdana;font-family:verdana;font-size:85%;"  &gt;u empresas que devem possuir alto poder de resposta imediata as nuances do mercado ou as&lt;/span&gt;&lt;span style="font-family: verdana;font-family:verdana;font-size:85%;"  &gt; ameaças ao s&lt;/span&gt;&lt;span style="font-family: verdana;font-family:verdana;font-size:85%;"  &gt;e&lt;/span&gt;&lt;span style="font-family: verdana;font-family:verdana;font-size:85%;"  &gt;u negócio devem po&lt;/span&gt;&lt;span style="font-family: verdana;font-family:verdana;font-size:85%;"  &gt;s&lt;/span&gt;&lt;span style="font-family: verdana;font-family:verdana;font-size:85%;"  &gt;suir&lt;/span&gt;&lt;span style="font-family: verdana;font-family:verdana;font-size:85%;"  &gt;, m&lt;/span&gt;&lt;span style="font-family: verdana;font-family:verdana;font-size:85%;"  &gt;esmo que tímido, um investiment&lt;/span&gt;&lt;span style="font-family: verdana;font-family:verdana;font-size:85%;"  &gt;o em CEP.&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify; font-family: verdana;"&gt; &lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;E como ter excelência nestes três assuntos de&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;ntro d&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;as &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;organizações? profissionais do mercado, depois de alguns bons anos experimentando a aplicação de S&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;OA, CEP e BPM nas empresas, têm observado que para que estes possam prova&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;r seus valores e cumprir seus objetivos, deve-se criar uma fundação de referência, com alto de poder de visibilidade e investimento nas empresas, que tenha a capacidade de liderar uma ou mais i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;niciativas (par&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;alelas ou não) seja de SOA, CEP ou BPM. Para cada uma destas abordagens, deve-se cria&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;r o então já conhecido, centro de excelência ou simplesmente CoE. Um CoE deve ser visto numa organização como um "departamento" unipresente em todas as iniciativas da organização, sendo resp&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;onsável por&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt; t&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;odas as questões sobre seu foco. Um CoE de BPM por exemplo, deve ser part&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;icipa&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;do em todas as&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt; questões sobre melhoría de processos de negócio, e deve ter como participantes e interes&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;s&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;ados,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt; pessoas de toda a organização, desde as pessoas que vivem os processos, até as pesso&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;as q&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;u&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;e li&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;beram&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;orç&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;am&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;entos para novos investimentos.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;Criar um CoE sólido e de credibilidade não é uma ta&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;refa&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt; trivial. São&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt; necessár&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;ios v&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;ários projetos de sucesso para que possamos dar os primeiros pas&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;sos na instituição de um centro desses numa organização. E estamos falando apenas de um destes centros de excelência, como por exemplo, o de BPM. No mundo perfeito, deveríamos ter pelo menos três CoE's&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt; instituidos, SOA, CEP e BPM respectivamente. É notório portanto, quanto te&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;mpo leva e q&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;uanto custa instituir estes CoE's nas organizações: É demorado e é caro ... e tu&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;do que demora e é car&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;o f&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;acilmente se torna um risco, e riscos são situações que os investidores não gostam de viver. Contextualizado o cenário, você deve estar se argumentando: "Investir em SOA, CE&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;P ou BPM então é algo inviável, dá muito trabalho e facilmente você pode ser levado ao fracasso!".&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;De fato, é uma argumentação válida, no sentido &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;de que, im&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;plementa&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;r S&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;OA, CEP e BPM num nível de maturidade que estes possam apresentar resultados qu&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;e ju&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;stifiquem &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;próxi&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;mos &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;investi&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;mentos (um CoE) não é realmente uma tarefa trivial. Mas posso&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt; d&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;iscordar quando se afirma que é algo inviável ou impossível. Inviável será se você não fizer um bom &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;estudo &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;de retor&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;no de in&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;vest&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;imento (ROI) sobre a iniciativa que você deseja liderar. Sem uma boa ju&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;stificativa sobre o quão lucrativo pode ser um investimento, ninguém em sã consciência enfia a mã&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;o nos bol&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;sos&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;. E i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;mpossível será, se você não usar as ferramentas, tecnologias e práticas corretas. Esta é a trinca perfei&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;ta sobre implementar uma boa solução, ter a ferramenta correta, a tecnologia adequad&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;a, &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;e as práticas de mercado consagradas na implementação de uma abordagem.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;O mundo perfeito para SOA, CEP ou BPM portanto&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;, exis&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;te. Pra chegar nele, você deve ter uma série de projetos de sucesso, que tal como a &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;fig&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;ura de abertura&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt; do post (o gráfico acima) demonstre sucessivas implementações de sucesso que a cada &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;ve&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;z, demonstram cada vez mais valor e maior agilidade, coeficientes principais na mensur&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;ação de um s&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;u&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;cesso de um CoE. Essa é a premissa principal. A premissa operacional é que a c&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;ada projeto, &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;v&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;ocê tenha &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;sucesso, &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;premissa esta que sustenta o resultado da premissa anterior. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;Sem o suces&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;so de um pro&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;jeto indiv&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;idual, o fator de crescimento irá parar, e o mundo perfeito jamais&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt; poder&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;á ser alca&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;nçado. E&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt; para ter sucesso um projeto, use as ferramentas, tecnologias e práticas &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;corretas. Se você já sabe as p&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;ráticas corretas, já sabe quais as tecnologias de mercado q&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;ue são m&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;ais atr&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;ativa&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;s para SO&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;A, C&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;EP ou BPM, então o que lhe resta é utilizar as ferramentas corretas, e para isso, você &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;precisa de uma referência, um guia que possa lhe ajudar a escolher, entre várias opções, aquela que possa &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;cumprir a premissa operacional de implementar um projeto de s&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;u&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;cesso. Nas próximas seções,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt; irei mostrar com alguns exemplos, quais as perguntas que devem ser feitas na escolha de ferramentas para SOA, CEP e BPM, e qual deve ser a resposta aproximada para cada pergunta.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Business Process Management&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;... Utilize uma ferramenta de modelagem simples&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;, intui&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;tiva e bonita,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt; que além &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;disso esteja de acordo com padrões de mercado como XPDL, BPMN e BPEL ...&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_xvsPdhzsV0E/TOEmvDDucVI/AAAAAAAAA7U/4bDUFDHu3cg/s1600/savvion_1.JPG"&gt;&lt;img style="cursor: pointer; width: 200px; height: 106px;" src="http://2.bp.blogspot.com/_xvsPdhzsV0E/TOEmvDDucVI/AAAAAAAAA7U/4bDUFDHu3cg/s200/savvion_1.JPG" alt="" id="BLOGGER_PHOTO_ID_5539751606359060818" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;... Ao modelar processos de negó&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;cio, defina su&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;as regras de negócio usando abordagens baseadas em wizards, evite linguagens que mesmo em alto&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt; nível,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt; sejam de prog&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;ramaçã&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;o. Lembre-se que quem define estas regras e processos&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;, nã&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;o frequentou escolas e faculdades d&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;e TI ...&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_xvsPdhzsV0E/TOEnTDXeOnI/AAAAAAAAA7c/xNxzkRFe_aw/s1600/savvion_2.JPG"&gt;&lt;img style="cursor: pointer; width: 200px; height: 103px;" src="http://2.bp.blogspot.com/_xvsPdhzsV0E/TOEnTDXeOnI/AAAAAAAAA7c/xNxzkRFe_aw/s200/savvion_2.JPG" alt="" id="BLOGGER_PHOTO_ID_5539752224917174898" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;... Garanta que a ferramenta de modelagem de processos possu&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;i r&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;e&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;c&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;u&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;rs&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;os&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt; de simulação destes processos. Quando você pode simular os &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;processos ainda&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt; em tem&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;p&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;o de&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt; d&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;es&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;enho, &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;você evita que o patrocinador de BPM espere até que o processo esteja operaci&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;onal para ve&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;r se ele teve efeito ou cumpriu os objetivos traçados, criando portanto um ROI mais rápido de ser avaliado e recuperado. Na maior parte das vezes, os donos dos processos ao verem&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt; os proces&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;sos "executando" mesmo que em simulações já podem ter a percepção sobre melhorar a utilização dos recursos (pessoas e sistemas) ou a direção do valor dos processos ...&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_xvsPdhzsV0E/TOEoZF4D3rI/AAAAAAAAA7k/T2Xy3Fp6KNo/s1600/savvion_3.JPG"&gt;&lt;img style="cursor: pointer; width: 200px; height: 124px;" src="http://3.bp.blogspot.com/_xvsPdhzsV0E/TOEoZF4D3rI/AAAAAAAAA7k/T2Xy3Fp6KNo/s200/savvion_3.JPG" alt="" id="BLOGGER_PHOTO_ID_5539753428181573298" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;... É interessante ta&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;mbém que a ferramenta de simulação possa gerar relatórios sintéticos e analíticos sobre as simulações. Depois de 3 ou 4 simulações e ciclos de modelagem e melhorías, você pode observar como o processo  se comporta nas diferentes situações especificadas (Happy Path, Alternative Flows, Exceptions) e aferir quanto a robustez do processo ...&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_xvsPdhzsV0E/TOEpG0FxysI/AAAAAAAAA7s/Eyk5lWE3BHA/s1600/savvion_4.JPG"&gt;&lt;img style="cursor: pointer; width: 200px; height: 127px;" src="http://4.bp.blogspot.com/_xvsPdhzsV0E/TOEpG0FxysI/AAAAAAAAA7s/Eyk5lWE3BHA/s200/savvion_4.JPG" alt="" id="BLOGGER_PHOTO_ID_5539754213681253058" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;... Preocupe-se em co&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;mo os usuários (clientes, parceiros, funcionários ou &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;fornecedores) &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;irão interagir com os processos. No ramo de varejo, bancos e seguros por exemplo, 70% de um processo de negócio é composto por tarefas humanas. Assegure que a solução de BPM disponibilize uma plataforma agradável para a interação de tarefas humanas ...&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_xvsPdhzsV0E/TOErBYhZAbI/AAAAAAAAA70/OKR2xfXrSMI/s1600/savvion_5.JPG"&gt;&lt;img style="cursor: pointer; width: 200px; height: 127px;" src="http://2.bp.blogspot.com/_xvsPdhzsV0E/TOErBYhZAbI/AAAAAAAAA70/OKR2xfXrSMI/s200/savvion_5.JPG" alt="" id="BLOGGER_PHOTO_ID_5539756319404786098" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;... A solução de BPM possibilita que você rastreie uma instância de pr&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;ocesso em andamento ou finalizada? É importante saber como andam os processos, ou no caso de alguma ano&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;malia, saber que informações ou eventos aconteceram na execução de um processo ...&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_xvsPdhzsV0E/TOErtZHaedI/AAAAAAAAA78/_147A59YYas/s1600/savvion_6.JPG"&gt;&lt;img style="cursor: pointer; width: 200px; height: 129px;" src="http://3.bp.blogspot.com/_xvsPdhzsV0E/TOErtZHaedI/AAAAAAAAA78/_147A59YYas/s200/savvion_6.JPG" alt="" id="BLOGGER_PHOTO_ID_5539757075478510034" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;... Como seus gestores e líderes de área monitoram a performance do negó&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;cio? A solução de BPM disponibiliza um BAM (Business Activity Monitoring) digno de visu&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;alização de um diretor ou um patrocinador? Quão simples é implementar métricas de desempenho do negócio? &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;O BPM possibilita a customização de métricas implementadas&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt; &lt;span style="font-style: italic;"&gt;Out-Of-Box&lt;/span&gt;? Ele te dá previamente implementado sistemas de BalanceScoreCards? ...&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_xvsPdhzsV0E/TOEstnzDoZI/AAAAAAAAA8E/mPA-CYtXbVY/s1600/savvion_7.JPG"&gt;&lt;img style="cursor: pointer; width: 200px; height: 129px;" src="http://1.bp.blogspot.com/_xvsPdhzsV0E/TOEstnzDoZI/AAAAAAAAA8E/mPA-CYtXbVY/s200/savvion_7.JPG" alt="" id="BLOGGER_PHOTO_ID_5539758178931286418" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;... Crie dashboards de monitoração do negócio que possam dar poder e visi&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;bilidade aos usuários chaves, gestores de área e grupos de direção. Várias visualizações (Cubos) devem podem ser utilizados, e a origem dos dados apresentados em gráficos devem ser transparentes para os usuários. As perguntas respondidas devem ser: Como andam as minhas vendas? Quanto eu perdi na última hora com a NASDAQ? Qual o nível de satisfação dos meus clientes? Como meu concorrente se posiciona perante minha oferta de produtos e serviços? ...&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_xvsPdhzsV0E/TOEt3jJbJtI/AAAAAAAAA8M/fkEOUY38Bvs/s1600/savvion_9.jpg"&gt;&lt;img style="cursor: pointer; width: 200px; height: 143px;" src="http://1.bp.blogspot.com/_xvsPdhzsV0E/TOEt3jJbJtI/AAAAAAAAA8M/fkEOUY38Bvs/s200/savvion_9.jpg" alt="" id="BLOGGER_PHOTO_ID_5539759448993244882" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;Service-Oriented Architecture (Enterpr&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;ise Service Bus)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;... O ESB utilizado possui consoles de gerenciamento de fácil utilização, que compreendam todas as facilidades do produto? Quanto um recurso particular do ESB precisa ser configurado, você faz isso clicanco e arrastando ou escreve código Java ou XML? Como você aprovisiona os recursos da máquina para sustentar picos e novas demandas? Como vo&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;cê o&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;bserva a utilização dos serviços e componentes do ESB? Como você coloca seu ESB em cluster? ...&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_xvsPdhzsV0E/TOEwSV9XhbI/AAAAAAAAA8U/EqJ6JIZYW3c/s1600/sonic_1.JPG"&gt;&lt;img style="cursor: pointer; width: 200px; height: 110px;" src="http://4.bp.blogspot.com/_xvsPdhzsV0E/TOEwSV9XhbI/AAAAAAAAA8U/EqJ6JIZYW3c/s200/sonic_1.JPG" alt="" id="BLOGGER_PHOTO_ID_5539762108332737970" border="0" /&gt;&lt;/a&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_xvsPdhzsV0E/TOEwchMa0RI/AAAAAAAAA8c/l9ZWLex192I/s1600/sonic_2.JPG"&gt;&lt;img style="cursor: pointer; width: 200px; height: 110px;" src="http://4.bp.blogspot.com/_xvsPdhzsV0E/TOEwchMa0RI/AAAAAAAAA8c/l9ZWLex192I/s200/sonic_2.JPG" alt="" id="BLOGGER_PHOTO_ID_5539762283147350290" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_xvsPdhzsV0E/TOEwi_cI0iI/AAAAAAAAA8k/x2Lut2rHoQc/s1600/sonic_3.JPG"&gt;&lt;img style="cursor: pointer; width: 200px; height: 110px;" src="http://3.bp.blogspot.com/_xvsPdhzsV0E/TOEwi_cI0iI/AAAAAAAAA8k/x2Lut2rHoQc/s200/sonic_3.JPG" alt="" id="BLOGGER_PHOTO_ID_5539762394345558562" border="0" /&gt;&lt;/a&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_xvsPdhzsV0E/TOEwqmgVneI/AAAAAAAAA8s/OexRUEx5Bhs/s1600/sonic_4.JPG"&gt;&lt;img style="cursor: pointer; width: 200px; height: 110px;" src="http://3.bp.blogspot.com/_xvsPdhzsV0E/TOEwqmgVneI/AAAAAAAAA8s/OexRUEx5Bhs/s200/sonic_4.JPG" alt="" id="BLOGGER_PHOTO_ID_5539762525091241442" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;... Para testar seus serviços você precisa escrever có&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;digo?&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt; Pa&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;ra test&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;ar o envio ou recebimento de uma mensagem JMS, você precisa de uma IDE de de&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;senvolvimen&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;to &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;Java? Como você testa a garantia de entrega de mensagens, e a persistência de mensagens JM&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;S? ...&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_xvsPdhzsV0E/TOEyhBW8HSI/AAAAAAAAA80/YKkUZNfXhqQ/s1600/sonic_5.JPG"&gt;&lt;img style="cursor: pointer; width: 200px; height: 121px;" src="http://4.bp.blogspot.com/_xvsPdhzsV0E/TOEyhBW8HSI/AAAAAAAAA80/YKkUZNfXhqQ/s200/sonic_5.JPG" alt="" id="BLOGGER_PHOTO_ID_5539764559524142370" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;... BPEL é uma linguagem baseada em&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt; XML extremamente difícil de escrever e d&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;e implementar. Se você não conhece a notação e a esp&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;ecificação da linguagem, &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;sem&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt; um b&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;om &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;editor visual você pode ficar horas ou dias tenta&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;ndo faz&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;er algo trivial. Use&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt; ferramenta&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;s d&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;e implementação que possam abstrair a complexidade do BPEL e que possa fazer com que foque &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;no que realmente importa: Fazer a composição de Web Services funcionar ...&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_xvsPdhzsV0E/TOEzR5A7WNI/AAAAAAAAA88/dMKzQVX04r4/s1600/sonic_6.JPG"&gt;&lt;img style="cursor: pointer; width: 200px; height: 108px;" src="http://2.bp.blogspot.com/_xvsPdhzsV0E/TOEzR5A7WNI/AAAAAAAAA88/dMKzQVX04r4/s200/sonic_6.JPG" alt="" id="BLOGGER_PHOTO_ID_5539765399097923794" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;... E os seus serviços internos do ESB? Sabemos que&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt; um serviç&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;o normal&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;mente é baseado em sua interface de acesso, que pode ser REST, JMS, SOA&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;P, File &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;ou &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;SQL,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt; ma&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;s independente da interface de acesso, como você define o comportamento (implementação) dos seus serviços? Programando em Java? escrevendo XML ou utilizando outros meios mais especialistas? Não faça isso, use abordagens mais ágeis e seguras e que não dependam de um especia&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;lista numa linguagem ou plataforma ...&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_xvsPdhzsV0E/TOE0QFHoTpI/AAAAAAAAA9E/1ssrNVCX_N8/s1600/sonic_7.JPG"&gt;&lt;img style="cursor: pointer; width: 200px; height: 108px;" src="http://4.bp.blogspot.com/_xvsPdhzsV0E/TOE0QFHoTpI/AAAAAAAAA9E/1ssrNVCX_N8/s200/sonic_7.JPG" alt="" id="BLOGGER_PHOTO_ID_5539766467499150994" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;... A arquitetura de um ESB é baseada no conceito de &lt;a href="http://eaipatterns.com/MessageChannel.html"&gt;pipeline&lt;/a&gt; ou canal de mensag&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;ens. Com isso, quando uma mensagem chega a este canal, esta é &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;processada ou um ou mais &lt;a href="http://eaipatterns.com/PipesAndFilters.html"&gt;filtros&lt;/a&gt; ou etapas de execução. Ao enviar os dados da mensagem de uma etapa para a outra, você precisa escrever código XML ou Java pra isso? Use abordagens visuais&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt; que inibam você de causar problemas na construção de um serviço ou processo ESB. Torne a mudança dos parâmetros de uma mensagem uma tarefa trivial e segura, e não uma fonte inesgotável de problemas na hora da manutenção ...&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_xvsPdhzsV0E/TOE1XbDhlvI/AAAAAAAAA9M/Pc9KZnnKk3g/s1600/sonic_8.JPG"&gt;&lt;img style="cursor: pointer; width: 200px; height: 112px;" src="http://2.bp.blogspot.com/_xvsPdhzsV0E/TOE1XbDhlvI/AAAAAAAAA9M/Pc9KZnnKk3g/s200/sonic_8.JPG" alt="" id="BLOGGER_PHOTO_ID_5539767693158225650" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;... Um dos recursos mais comuns em qualquer ESB é o roteamento de mensagens dinâmico, baseado nas informações da mensagem a ser processada. É de suma importância que você possa lidar com &lt;a href="http://www.eaipatterns.com/ContentBasedRouter.html"&gt;roteamentos dinâmicos&lt;/a&gt; de forma ágil e segura. Não use plataformas de ESB que exponham você a detalhes internos de implementação para definir coisas simples como: "Vá para a etapa X caso tenha uma informação Y na mensagem". Não gaste mais do que 30 minutos na construção e teste de uma roteamento dinâmico ...&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_xvsPdhzsV0E/TOE3ICJjtuI/AAAAAAAAA9U/tJPj6V1VpE4/s1600/sonic_9_1.JPG"&gt;&lt;img style="cursor: pointer; width: 200px; height: 112px;" src="http://3.bp.blogspot.com/_xvsPdhzsV0E/TOE3ICJjtuI/AAAAAAAAA9U/tJPj6V1VpE4/s200/sonic_9_1.JPG" alt="" id="BLOGGER_PHOTO_ID_5539769627797862114" border="0" /&gt;&lt;/a&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_xvsPdhzsV0E/TOE3PwXUfMI/AAAAAAAAA9c/XWWgT0w8zsQ/s1600/sonic_9_2.JPG"&gt;&lt;img style="cursor: pointer; width: 200px; height: 106px;" src="http://3.bp.blogspot.com/_xvsPdhzsV0E/TOE3PwXUfMI/AAAAAAAAA9c/XWWgT0w8zsQ/s200/sonic_9_2.JPG" alt="" id="BLOGGER_PHOTO_ID_5539769760462699714" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;... Testar serviços de um ESB é uma tarefa que naturalmente é complexa, principalmente quando você possui serviços que possuem várias etapas ou fases. É importante utilizar ferramentas que possam testar isoladamente cada etapa do processo (Ex: Um acesso a um banco de dados SQL) e também que possam testar o processo completo, sem que par&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;a isso, você tenha que fazer deploy do mesmo. Use também ferramentas que possam lhe ajudar a realizar depuração de problemas. Use conceitos como "Breakpoints", inspeção de variáveis, "Watche's", etc. Sim, isso existe em soluções de ESB's ...&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_xvsPdhzsV0E/TOE5CmzTaJI/AAAAAAAAA9k/7hBS6QITRTg/s1600/sonic_10.JPG"&gt;&lt;img style="cursor: pointer; width: 200px; height: 114px;" src="http://1.bp.blogspot.com/_xvsPdhzsV0E/TOE5CmzTaJI/AAAAAAAAA9k/7hBS6QITRTg/s200/sonic_10.JPG" alt="" id="BLOGGER_PHOTO_ID_5539771733580671122" border="0" /&gt;&lt;/a&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_xvsPdhzsV0E/TOE5NQ-FU4I/AAAAAAAAA9s/igwXz85KU1k/s1600/sonic_13.JPG"&gt;&lt;img style="cursor: pointer; width: 200px; height: 114px;" src="http://2.bp.blogspot.com/_xvsPdhzsV0E/TOE5NQ-FU4I/AAAAAAAAA9s/igwXz85KU1k/s200/sonic_13.JPG" alt="" id="BLOGGER_PHOTO_ID_5539771916698866562" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;... XSLT também é uma linguagem baseada em XML extremamente difícil de escrever. Poucas são as pessoas que conhecem de fato a linguagem, mas mesmo estas, ao escrevem programas XSLT "Na mão" enfrentam problemas na horas dos testes ou mesmo a abordagem mais confiável. O mesmo se aplica ao REST. Devido a simplicidade da abordagem, várias alternativas podem ser aplicadas, mas a alternativa mais escalável e recomendada nos foge quando impl&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;ementamos. Use ferramentas que tornem o dia a dia do desenvolvimento de soluções baseadas em REST e XSLT mais simples ...&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_xvsPdhzsV0E/TOE66e74oXI/AAAAAAAAA90/hB6CXvjVSSA/s1600/sonic_11.JPG"&gt;&lt;img style="cursor: pointer; width: 200px; height: 114px;" src="http://1.bp.blogspot.com/_xvsPdhzsV0E/TOE66e74oXI/AAAAAAAAA90/hB6CXvjVSSA/s200/sonic_11.JPG" alt="" id="BLOGGER_PHOTO_ID_5539773793053483378" border="0" /&gt;&lt;/a&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_xvsPdhzsV0E/TOE7EWewXqI/AAAAAAAAA98/2jYSwRGT7yA/s1600/sonic_12.JPG"&gt;&lt;img style="cursor: pointer; width: 200px; height: 114px;" src="http://1.bp.blogspot.com/_xvsPdhzsV0E/TOE7EWewXqI/AAAAAAAAA98/2jYSwRGT7yA/s200/sonic_12.JPG" alt="" id="BLOGGER_PHOTO_ID_5539773962582515362" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;Service-Oriented Architecture (Governance, Management)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;... Gerenciar os ativo&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;s de uma fundação SOA é algo primário. Ter uma visão holística sobre os serviços, plataformas e sistemas que compôem uma arquitetura orien&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;tada a serviços é uma premissa básica para uma correta governança dos serviços. Saiba em tempo real as relaçõe&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;s entre os serviços, monitore o comportamento destas relações e saiba mais sobre a importância de um serviço para a organização ...&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_xvsPdhzsV0E/TOE8sXZuc6I/AAAAAAAAA-E/ii3kZelU49o/s1600/actional_1.JPG"&gt;&lt;img style="cursor: pointer; width: 200px; height: 92px;" src="http://3.bp.blogspot.com/_xvsPdhzsV0E/TOE8sXZuc6I/AAAAAAAAA-E/ii3kZelU49o/s200/actional_1.JPG" alt="" id="BLOGGER_PHOTO_ID_5539775749536248738" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;... Quando seu cliente, parceiro ou fornecedor pergunta: "Qual o tempo &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;de resposta médio do serviço que estou consumindo?" Como você responde essa pergunta? E inde&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;pendente da resposta, como você acha qual, numa interação entre serviços, quem é o vilão do tempo de resposta? Como você acha os gargalos de um serviço que pode ser distribuido e ac&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;essados por vários sistemas rodando em diferentes plataformas? Como você rastreia o tempo de resposta de uma interação entre diferentes tipos de aplicações a plataformas? ...&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_xvsPdhzsV0E/TOE9m9itvJI/AAAAAAAAA-M/EtXKFQxHBrQ/s1600/actional_2.JPG"&gt;&lt;img style="cursor: pointer; width: 200px; height: 92px;" src="http://4.bp.blogspot.com/_xvsPdhzsV0E/TOE9m9itvJI/AAAAAAAAA-M/EtXKFQxHBrQ/s200/actional_2.JPG" alt="" id="BLOGGER_PHOTO_ID_5539776756206910610" border="0" /&gt;&lt;/a&gt;  &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_xvsPdhzsV0E/TOE-FFKbdpI/AAAAAAAAA-U/KLPJjmgHwfc/s1600/actional_3.JPG"&gt;&lt;img style="cursor: pointer; width: 200px; height: 140px;" src="http://3.bp.blogspot.com/_xvsPdhzsV0E/TOE-FFKbdpI/AAAAAAAAA-U/KLPJjmgHwfc/s200/actional_3.JPG" alt="" id="BLOGGER_PHOTO_ID_5539777273648608914" border="0" /&gt;&lt;/a&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_xvsPdhzsV0E/TOE-KzmBKWI/AAAAAAAAA-c/7E0n65xewiU/s1600/actional_4.JPG"&gt;&lt;img style="cursor: pointer; width: 200px; height: 93px;" src="http://4.bp.blogspot.com/_xvsPdhzsV0E/TOE-KzmBKWI/AAAAAAAAA-c/7E0n65xewiU/s200/actional_4.JPG" alt="" id="BLOGGER_PHOTO_ID_5539777372011702626" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;... É seu cliente que diz que seu serviço está indisponível ou é sua &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;TI que pró-ativamente observa a queda para poder providenciar a ativação da redundância? Você espera seus consumidores reclamarem do tempo de resposta ou das falhas de segurança ou &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;você define políticas de governança em seus serviços é é notificado visualmente quando est&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;as estão compr&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;ometida&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;s? ...&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_xvsPdhzsV0E/TOE_sWBxvVI/AAAAAAAAA-k/cjuFr4kuQxE/s1600/actional_5.JPG"&gt;&lt;img style="cursor: pointer; width: 200px; height: 89px;" src="http://2.bp.blogspot.com/_xvsPdhzsV0E/TOE_sWBxvVI/AAAAAAAAA-k/cjuFr4kuQxE/s200/actional_5.JPG" alt="" id="BLOGGER_PHOTO_ID_5539779047702248786" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;... Expor serviços para fora (p&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;arceiros, clientes, fornecedores) requer um nível de maturidade de governança bem maior do que quando você têm serviços utilizados apenas dentro da organização. Se você precisa expor seus serviços, preocupe-se com detalhes sobre fronteiras de segurança, Trust Zones, políticas de WS-Security&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;, Reliable-Messagin&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;g, aute&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;n&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;ticação e autorização de domínios, Single-Sign On, porventura transformação da mensagem enviada para adaptação ao WSDL de destino, interceptação das mensagens para fins de auditoria, etc. Todas estas questões devem ser endereçadas em termos de governo d&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;os serviços e não de implementação, principalmente se seus serviços são oriundos de fábricas de desenvolvimento ou foram comprados de um fabricante. Use plataformas de governança que possam endereçar estes&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt; pontos, e que possam "mediar" a interação de seus consumidores externos e sua implementação do serviço interno ...&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_xvsPdhzsV0E/TOFBHRqG9gI/AAAAAAAAA-s/bQKecag6uq4/s1600/actional_6.JPG"&gt;&lt;img style="cursor: pointer; width: 200px; height: 77px;" src="http://3.bp.blogspot.com/_xvsPdhzsV0E/TOFBHRqG9gI/AAAAAAAAA-s/bQKecag6uq4/s200/actional_6.JPG" alt="" id="BLOGGER_PHOTO_ID_5539780609897330178" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;Complex Event Processing&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;... Implementar, gerenciar e observar eventos não é uma tarefa &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;trivial, os anos e o mercado já provaram isso. Se faz necessário a utilização de n&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;ão um&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;a, mas várias infra-estruturas diferentes para mapear as etapas de criação, desenho, implantação e observação de eventos e de eventos complexos. Use plataformas de CEP abrangentes e de preferência que sejam referência no mercado e tenham uma história no mundo de CEP e ESP ...&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_xvsPdhzsV0E/TOFDNSgBbsI/AAAAAAAAA-0/4PXoyhm9gcs/s1600/Apama_5.gif"&gt;&lt;img style="cursor: pointer; width: 200px; height: 150px;" src="http://2.bp.blogspot.com/_xvsPdhzsV0E/TOFDNSgBbsI/AAAAAAAAA-0/4PXoyhm9gcs/s200/Apama_5.gif" alt="" id="BLOGGER_PHOTO_ID_5539782912225930946" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;... Modele e descreva seus eventos complexos ao invés de implementá-los. CEP é uma abordagem que só faz sentido se você puder reagir a mudanças e comportamentos dos eventos num piscar de olhos. Se você usa abordagens baseadas em implementação, &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;mesmo que&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt; em XML, você fatalmente ao ter que mudar um evento, vai ter que entrar no ciclo "Mudar &gt; Testar &gt; Implantar". A mudança em comportamentos de eventos devem esperar apenas por um "B&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;otão de Ligar" para que entrem em produção, e a garantia de qualidade deve ser provida por um&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt; ambiente de desenvolvimento visual que elimine margens de erros de implementação ...&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_xvsPdhzsV0E/TOFES0y5HII/AAAAAAAAA-8/_dmsXZmYoW4/s1600/Apama_1.jpg"&gt;&lt;img style="cursor: pointer; width: 200px; height: 150px;" src="http://4.bp.blogspot.com/_xvsPdhzsV0E/TOFES0y5HII/AAAAAAAAA-8/_dmsXZmYoW4/s200/Apama_1.jpg" alt="" id="BLOGGER_PHOTO_ID_5539784106842856578" border="0" /&gt;&lt;/a&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_xvsPdhzsV0E/TOFE4bcq3YI/AAAAAAAAA_E/QAghEO0Jbyw/s1600/Apama_4.jpg"&gt;&lt;img style="cursor: pointer; width: 200px; height: 133px;" src="http://3.bp.blogspot.com/_xvsPdhzsV0E/TOFE4bcq3YI/AAAAAAAAA_E/QAghEO0Jbyw/s200/Apama_4.jpg" alt="" id="BLOGGER_PHOTO_ID_5539784752873790850" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;... Você não monitora seus eventos complexos através de consoles de texto ou através de arquivos de saída de log's certo? Isso seria muito irresponsável por parte de um profissional de TI tão distinto como você, principalmente porque não será você a observar os eventos complexos, e sim, os líderes de áreas, e gestores preocupados com a saúde em tempo real do negócio. Use dashboards corporativos que estejam conectados com a plataforma que identifica, detecta e cria os eventos complexos. Preferencialmente, tenha uma ferramenta que possa faze&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;r isso através de dashboards, e que estes dashbordas também possam ser exportados para visualização em outras plataformas de monitoração do negócio, como por exemplo, um BAM ...&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_xvsPdhzsV0E/TOFGE0hEY5I/AAAAAAAAA_M/Uv5tfMeC5CA/s1600/Apama_2.jpg"&gt;&lt;img style="cursor: pointer; width: 200px; height: 151px;" src="http://3.bp.blogspot.com/_xvsPdhzsV0E/TOFGE0hEY5I/AAAAAAAAA_M/Uv5tfMeC5CA/s200/Apama_2.jpg" alt="" id="BLOGGER_PHOTO_ID_5539786065273185170" border="0" /&gt;&lt;/a&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_xvsPdhzsV0E/TOFGJ5AjFBI/AAAAAAAAA_U/N9IZi7GP7o4/s1600/Apama_3.jpg"&gt;&lt;img style="cursor: pointer; width: 200px; height: 168px;" src="http://2.bp.blogspot.com/_xvsPdhzsV0E/TOFGJ5AjFBI/AAAAAAAAA_U/N9IZi7GP7o4/s200/Apama_3.jpg" alt="" id="BLOGGER_PHOTO_ID_5539786152378307602" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Considerações Finais&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Vimos neste post algumas das questões que devem ser relevantes quando você está tentanto ter sucesso em SOA, CEP ou BPM. Uma vez que esteja claro que, o sucesso de cada uma destas abordagens depende diretamente da execução sustentável e de sucesso de vários projetos, torna-se necessário a utilização de ferramentas, tecnologias e práticas adequadas.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;Vimos também que, independente das tecnologias e práticas escolhidas, alguns exemplos do que seriam ferramentas adequadas para o sucesso de abordagens basedas em SOA, CEP e BPM. Os exemplos sugeridos, são na verdade exemplos das platafor&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;mas que a Progress Software oferece aos seus clientes, plataformas estas que em suas áreas, são líderes de mercado, e possuem uma história de sucesso com organizações de diferentes portes e áreas de atuação, bem como histórias de sucesso com a comunidade de software em geral, seja estimulando a criação de tecnologias, seja liderando e sendo responsável por tecnologias no mundo todo, seja sendo referência para a criação de tecnologias, referência até mesmo, para nossos concorrentes ;-)&lt;br /&gt;&lt;br /&gt;Se você gostou dos exemplos sugeridos e deseja saber mais &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;sobre as soluções da Progress Software, visite o site &lt;a href="http://web.progress.com/en/index.html"&gt;http://www.progress.com&lt;/a&gt; e conheça melhor nossa tecnologia. Para maiores detalhes, até mesmo técnicos, mande um e-mail para rferreira (at) progress.com, terei maior prazer em atênde-los!&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_xvsPdhzsV0E/TOFdemZYz1I/AAAAAAAAA_c/Tzsiik8IQDk/s200/Progress_sig.jpg"&gt;&lt;img style="cursor: pointer; width: 194px; height: 63px;" src="http://2.bp.blogspot.com/_xvsPdhzsV0E/TOFdemZYz1I/AAAAAAAAA_c/Tzsiik8IQDk/s200/Progress_sig.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8571396175573944921-4044993740257508322?l=architecture-journal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://architecture-journal.blogspot.com/feeds/4044993740257508322/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8571396175573944921&amp;postID=4044993740257508322' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8571396175573944921/posts/default/4044993740257508322'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8571396175573944921/posts/default/4044993740257508322'/><link rel='alternate' type='text/html' href='http://architecture-journal.blogspot.com/2010/11/o-mundo-perfeito-para-soa-cep-bpm.html' title='O Mundo Perfeito para SOA, CEP &amp; BPM ... Existe?'/><author><name>Ricardo Ferreira</name><uri>http://www.blogger.com/profile/11930306647022714836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/-5T0r_5klxDA/Tn5CEvZpK0I/AAAAAAAABEg/MyTJuGi12ag/s220/ricardo-ferreira-Grande.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_xvsPdhzsV0E/TOEcysgHBnI/AAAAAAAAA7M/069aO7evEFU/s72-c/imagemInicial.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8571396175573944921.post-950322668545610320</id><published>2010-11-06T04:38:00.000-07:00</published><updated>2010-11-06T10:42:45.707-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='Web Services'/><category scheme='http://www.blogger.com/atom/ns#' term='Progress'/><category scheme='http://www.blogger.com/atom/ns#' term='Actional'/><title type='text'>Excelência de Web Services com Actional Diagnostics</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_xvsPdhzsV0E/TNVEanZD3ZI/AAAAAAAAA58/XXutIa36d5w/s1600/fig1.jpg"&gt;&lt;img style="float: left; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 200px; height: 143px;" src="http://1.bp.blogspot.com/_xvsPdhzsV0E/TNVEanZD3ZI/AAAAAAAAA58/XXutIa36d5w/s200/fig1.jpg" alt="" id="BLOGGER_PHOTO_ID_5536406540963274130" border="0" /&gt;&lt;/a&gt;&lt;span style=";font-family:verdana;font-size:85%;"&gt;Quem trabalha com Web Services, seja num contexto SOA ou não, sabe que entre o momento que você implementa seu serviço e o momento que o serviço é acessado por um possível consumidor, existe um longo camin&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"&gt;ho a &lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"&gt;ser traçado. Web Services são construções poderosas para que você tenha f&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"&gt;un&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"&gt;cionalidades de um aplicativo ou negócio expostas para parceiros, clientes ou fornecedores, mas dão um certo trabalho para ficarem "prontos" para uso. Grande parte das frustrações sobre Web Services começam quando você termina sua implementação (que já represento&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"&gt;u um considerável esforço) e passa a validar coisas como: Meu &lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"&gt;serv&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"&gt;iço está entregando o comportamento ou funcionalidade desejado? Meu serviço está operando &lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"&gt;com as regras de SLA esperadas? Meu serviço está de acordo com as especificações de interoperabilidade do mercado? Meu serviço possui o comportamento necessário para operação quando d&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"&gt;etalhes como autenticação, autorização e testes de ataques são considerados?&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Outro ponto pertinente é que, exceto o suporte ao desenvolvimento do Web Service em si, a maioria das plataformas de desenvolvimento do mercado, sejam elas bas&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;eadas em Java, .NET ou outras, não possuem suporte ao endereçamento das questões postas acima. Isso significa que, um d&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;esenvolvedor de um Web Service deve, na maioria das vezes, utilizar cerca de 3 o&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;u 4 ferramentas "auxiliares" que irão ajudar no endereçamento das questões postas. Isso signifi&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ca que o conhecimento do desenvolvedor começa a se tornar ortogonal, fazendo com que a construção de um dado Web Service fique preso a detalhes de construção que deveriam ser oficiais e padronizados. Se o desenvolvedor que criou um Web Service sair do time de dese&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;nvolvi&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;me&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;nto do projeto por alguma razão, a pessoa que o substituir irá ter uma grande dificuldade: Onde estão os artefatos deste Web Service? Quando preciso fazer testes de carga, qual ferramenta deve ser us&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ada? Qual(is) cenário(s) de testes foram utilizados para endereçar os requisitos funcionais? E os não-funcionais?&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_xvsPdhzsV0E/TNVD5mBrVvI/AAAAAAAAA50/_Cb8qk_AA9Q/s1600/fig2.jpg"&gt;&lt;img style="cursor: pointer; width: 200px; height: 196px;" src="http://1.bp.blogspot.com/_xvsPdhzsV0E/TNVD5mBrVvI/AAAAAAAAA50/_Cb8qk_AA9Q/s200/fig2.jpg" alt="" id="BLOGGER_PHOTO_ID_5536405973661079282" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;Uma solução de software que costuma ser usada para estes casos, é o &lt;a href="http://soapui.com/"&gt;soapUI&lt;/a&gt;. O soapUI é uma ferramenta super poderosa, que mesmo&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; na sua versão "open" possibilita diversas coisas. Mas grande parte das proposições feitas sobre o desenvolvimento e entrega de Web Services não são endereçados pela versão aberta, forçando profissionais a adquirem licenças da versão "&lt;a href="http://eviware.com/soapUI-Pro-14-day-free-trial.html"&gt;Pro&lt;/a&gt;" ou então piratearem a mesma. Quando isso não é possível ou viável, a solução é usar técnicas mais criativas para o endereçamento dos problemas citados ou mesmo a utilização de outras ferramentas, tornando o desenvolvimento mais complexo de controlar e manter.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;É com base neste cenário que escrevo este post: Você, profissional de construção de Web Services, não precisa mais viver este tipo de problema. A &lt;a href="http://web.progress.com/en/index.html"&gt;Progress Software&lt;/a&gt;, através da sua linha de produtos de &lt;a href="http://web.progress.com/en/Product-Capabilities/soa-management.html"&gt;governança SOA&lt;/a&gt; conhecida como &lt;a href="http://web.progress.com/en/actional/index.html"&gt;Actional&lt;/a&gt;, disponibiliza gratuitamente um de seus componentes chamado de &lt;a href="http://web.progress.com/en/actional/actional-diagnostics.html"&gt;Actional Diagnostics&lt;/a&gt;. Trata-se de uma ferram&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;enta leve, aberta e super simples de utilizar, que endereça 100% dos problemas citados an&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;teriormente. Nest&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;e &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;post, irei&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; mostrar algumas de suas características através de um cenário de exemplo, para que você possa averiguar sobre a aderência do software ao seu cenário atual.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Mas perai, a Progress Software é uma empresa que possui softwares licenciados, qual a diferença então de usar o soapUI Professional?&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Bem antes de mais nada, é interessante expli&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;car que a Progress So&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ftware, tal como outras empresas, possui um modelo de negócios baseado no licenciamento de produtos de softwares, assim como o desenvolvimento de tecnologias abertas cuja utilização é livre e possui um suporte profissional como serviço. Isto quer dizer que, algumas suítes da Progress Software sim, são comercializadas na forma de licenças de uso, mas outras, são disponibilizadas gratuitamente, como é o caso do Actional Diagnostics.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Não é porque um fabricante possui um ou mai&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;s produto&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;s comercia&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;lizados sob licenças de uso, que todo o modelo de negócios da compania é assim. A &lt;a href="http://www.ibm.com/us/en/"&gt;IBM&lt;/a&gt; por exemplo possui softwares licenciados, mas possui tecnologias abertas e fomentadas como open source, assim como a &lt;a href="http://www.oracle.com/"&gt;Oracle&lt;/a&gt;, a &lt;a href="http://www.microsoft.com/en/us/default.aspx"&gt;Microsoft&lt;/a&gt; e a &lt;a href="http://www.tibco.com/"&gt;TIBCO&lt;/a&gt;. Um bom exemplo disso é a aquisição da empresa &lt;a href="http://fusesource.com/"&gt;Fuse Source&lt;/a&gt;, responsável entre outras coisas por tecnologias como &lt;a href="http://fusesource.com/products/enterprise-activemq/"&gt;Active MQ&lt;/a&gt;, &lt;a href="http://fusesource.com/products/enterprise-camel/"&gt;Apache Cam&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;a href="http://fusesource.com/products/enterprise-camel/"&gt;el&lt;/a&gt; e &lt;a href="http://fusesource.com/products/enterprise-servicemix/"&gt;Service Mix&lt;/a&gt;. Esta, opera atualmente como subsidiária da Progress Software, mas ainda em regime de suporte open source profissional.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Visão geral sobre o Actional Diagnostics&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;br /&gt;O Actional Diagnostics é uma ferramenta livre para que você possa auxiliar o desenvo&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;lvimento de Web Services cobrindo aspectos sobre testes funcionais e não-funcionais destes. Ele é um produto da linha Actional, que compreende uma série de produtos relacionados a governança em SOA em nível de desenvolvimento (design-time) qu&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ando de execução&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; (run-time). Atravé&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;s destes produtos, uma empresa que possua um conjunto de processos de ne&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;gócios implementados usando a arqu&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;itetura orientada a serviços, pode controlar e ger&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;enciar todos os aspectos técnicos e não técnicos sobre sua infra-estrutura, negócio e ativos.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;O papel do Actional Diagnostics é viabilizar aos profissionais que desenvolvem e mantêm Web Services, uma forma de aferir aspectos sobre qualidade dos se&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;rviços usando uma abordagem sistêmica e controlada, de forma que os testes e verificações a serem feitas possam ser auxiliadas pela máquina e que possam ser re-testados a qualquer momento criando um histórico do ciclo de vida do serviço, cobrindo desde mudanças sobre seu compor&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;tamento, como a adição de novas funcionalidades. Segue uma lista parcial sobre o que você pode fazer com o Actional Diagnostics:&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;ul  style="text-align: justify;font-family:verdana;"&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Criar ciclos de QA que podem durar dias, meses ou até anos&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Monitorar e gerenciar as depe&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;ndências entre os Web Services&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Capturar o tráfego (Payload) das mensagens trocadas entre os &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Web Se&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;rvice&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;s&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Validar Web Services quanto ao seu WSDL e seus Schemas&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Entendimento da funcionalidade de u&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;m Web Service através de Pseudo-Código&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Realizar testes de carga para monitora&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;ção do desempenho&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Geração de relatórios gerenciais sobre QA e testes de desempenho&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Visualizar as dependências entre os Web Services e as máquinas envolvidas&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Validar Web Services em políticas de interoperabilidade de mercado como WS-I Profile&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Implementar testes baseados em WS-Security, WS-Policy e W&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;S-Business Activity&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold; font-style: italic;font-family:verdana;"&gt;Um tour sobre as features do Actional Diagnostics&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;A utilização do Actional Diagnostics começa &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;quando você registra nele seus Web Services. Para isso, basta registrar o WSDL que descreve os componentes do seu Serv&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;iço como interface&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;s, bindings, portas e mensagens.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_xvsPdhzsV0E/TNVMoYP48bI/AAAAAAAAA6E/YGz-mKdU-dM/s1600/fig3.JPG"&gt;&lt;img style="cursor: pointer; width: 200px; height: 94px;" src="http://1.bp.blogspot.com/_xvsPdhzsV0E/TNVMoYP48bI/AAAAAAAAA6E/YGz-mKdU-dM/s200/fig3.JPG" alt="" id="BLOGGER_PHOTO_ID_5536415573509468594" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;Feito isso, você pode solicitar a execução, gravada ou não, de todos os&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; endpoints &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;que você tiver nesse Web Service, a fim de constatar o comportamento e disponibilidade do Web Service gerenciado.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_xvsPdhzsV0E/TNVQssw_B3I/AAAAAAAAA6M/oMo2w-dqAos/s1600/fig4_1.JPG"&gt;&lt;img style="cursor: pointer; width: 200px; height: 68px;" src="http://1.bp.blogspot.com/_xvsPdhzsV0E/TNVQssw_B3I/AAAAAAAAA6M/oMo2w-dqAos/s200/fig4_1.JPG" alt="" id="BLOGGER_PHOTO_ID_5536420045782976370" border="0" /&gt;&lt;/a&gt; &lt;a href="http://1.bp.blogspot.com/_xvsPdhzsV0E/TNVQ5IC1xxI/AAAAAAAAA6U/SKNSvhDS4Pc/s1600/fig4_2.JPG"&gt;&lt;img style="cursor: pointer; width: 200px; height: 80px;" src="http://1.bp.blogspot.com/_xvsPdhzsV0E/TNVQ5IC1xxI/AAAAAAAAA6U/SKNSvhDS4Pc/s200/fig4_2.JPG" alt="" id="BLOGGER_PHOTO_ID_5536420259264055058" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_xvsPdhzsV0E/TNVRG7BTNvI/AAAAAAAAA6c/Zq0AJh-9vuM/s1600/fig4_3.JPG"&gt;&lt;img style="cursor: pointer; width: 200px; height: 138px;" src="http://2.bp.blogspot.com/_xvsPdhzsV0E/TNVRG7BTNvI/AAAAAAAAA6c/Zq0AJh-9vuM/s200/fig4_3.JPG" alt="" id="BLOGGER_PHOTO_ID_5536420496286103282" border="0" /&gt;&lt;/a&gt; &lt;a href="http://2.bp.blogspot.com/_xvsPdhzsV0E/TNVRUJuSAeI/AAAAAAAAA6k/TIMQ89Jeuvo/s1600/fig4_4.JPG"&gt;&lt;img style="cursor: pointer; width: 200px; height: 126px;" src="http://2.bp.blogspot.com/_xvsPdhzsV0E/TNVRUJuSAeI/AAAAAAAAA6k/TIMQ89Jeuvo/s200/fig4_4.JPG" alt="" id="BLOGGER_PHOTO_ID_5536420723571163618" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;Outra possibilidade interessante é que você pode, uma vez que você tenha Web Services&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; registrados, realizar um teste de stress nestes muito facilmente, e com uma riqueza de detalhes &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;sobre&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; o ambiente monitorado fantástica.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_xvsPdhzsV0E/TNVZIJvRdlI/AAAAAAAAA6s/SCTuToZYgxU/s1600/fig5_1.JPG"&gt;&lt;img style="cursor: pointer; width: 200px; height: 94px;" src="http://1.bp.blogspot.com/_xvsPdhzsV0E/TNVZIJvRdlI/AAAAAAAAA6s/SCTuToZYgxU/s200/fig5_1.JPG" alt="" id="BLOGGER_PHOTO_ID_5536429313509914194" border="0" /&gt;&lt;/a&gt; &lt;a href="http://1.bp.blogspot.com/_xvsPdhzsV0E/TNVZLMhN5lI/AAAAAAAAA60/zRQvIBNocws/s1600/fig5_2.JPG"&gt;&lt;img style="cursor: pointer; width: 200px; height: 98px;" src="http://1.bp.blogspot.com/_xvsPdhzsV0E/TNVZLMhN5lI/AAAAAAAAA60/zRQvIBNocws/s200/fig5_2.JPG" alt="" id="BLOGGER_PHOTO_ID_5536429365795874386" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_xvsPdhzsV0E/TNVZPeabGQI/AAAAAAAAA68/0kPAaltS1Tk/s1600/fig5_3.JPG"&gt;&lt;img style="cursor: pointer; width: 200px; height: 72px;" src="http://4.bp.blogspot.com/_xvsPdhzsV0E/TNVZPeabGQI/AAAAAAAAA68/0kPAaltS1Tk/s200/fig5_3.JPG" alt="" id="BLOGGER_PHOTO_ID_5536429439318694146" border="0" /&gt;&lt;/a&gt; &lt;a href="http://3.bp.blogspot.com/_xvsPdhzsV0E/TNVZSH1z2OI/AAAAAAAAA7E/2m0isQYpUxc/s1600/fig5_4.JPG"&gt;&lt;img style="cursor: pointer; width: 200px; height: 86px;" src="http://3.bp.blogspot.com/_xvsPdhzsV0E/TNVZSH1z2OI/AAAAAAAAA7E/2m0isQYpUxc/s200/fig5_4.JPG" alt="" id="BLOGGER_PHOTO_ID_5536429484799154402" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;Além disso, é possível também solicitar a geração de um relatório dos testes de stress. Segue abaixo um documento gerado pelo Actional Diagnostics:&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;div style="width: 477px;" id="__ss_5686150"&gt;&lt;strong style="display: block; margin: 12px 0pt 4px;"&gt;&lt;a href="http://www.slideshare.net/jricardoferreira/diagnostics-load-test" title="Diagnostics load test"&gt;Diagnostics load test&lt;/a&gt;&lt;/strong&gt;&lt;object id="__sse5686150" width="477" height="510"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/doc_player.swf?doc=diagnosticsloadtest-101106082522-phpapp02&amp;amp;stripped_title=diagnostics-load-test&amp;amp;userName=jricardoferreira"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;embed name="__sse5686150" src="http://static.slidesharecdn.com/swf/doc_player.swf?doc=diagnosticsloadtest-101106082522-phpapp02&amp;amp;stripped_title=diagnostics-load-test&amp;amp;userName=jricardoferreira" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="477" height="510"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="padding: 5px 0pt 12px;"&gt;View more &lt;a href="http://www.slideshare.net/"&gt;documents&lt;/a&gt; from &lt;a href="http://www.slideshare.net/jricardoferreira"&gt;Ricardo Ferreira&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;/center&gt;Estas e outras features do Actional Diagnostics podem ser testadas hoje mesmo e gratuitamente. Não reivente a roda, use ferramentas que possam melhorar seu ambiente de trabalho. Obter maior agilidade e qualidade no desenvolvimento não é algo dificil muito menos impossível. Basta usar as ferramentas e práticas corretas!&lt;br /&gt;&lt;br /&gt;Bons Web Services ;-)&lt;br /&gt;&lt;/span&gt;&lt;/span&gt; &lt;/div&gt;&lt;/div&gt;&lt;script src="http://b.scorecardresearch.com/beacon.js?c1=7&amp;amp;c2=7400849&amp;amp;c3=1&amp;amp;c4=&amp;amp;c5=&amp;amp;c6="&gt;&lt;/script&gt;&lt;script src="http://b.scorecardresearch.com/beacon.js?c1=7&amp;amp;c2=7400849&amp;amp;c3=1&amp;amp;c4=&amp;amp;c5=&amp;amp;c6="&gt;&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8571396175573944921-950322668545610320?l=architecture-journal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://architecture-journal.blogspot.com/feeds/950322668545610320/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8571396175573944921&amp;postID=950322668545610320' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8571396175573944921/posts/default/950322668545610320'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8571396175573944921/posts/default/950322668545610320'/><link rel='alternate' type='text/html' href='http://architecture-journal.blogspot.com/2010/11/excelencia-de-web-services-com-actional.html' title='Excelência de Web Services com Actional Diagnostics'/><author><name>Ricardo Ferreira</name><uri>http://www.blogger.com/profile/11930306647022714836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/-5T0r_5klxDA/Tn5CEvZpK0I/AAAAAAAABEg/MyTJuGi12ag/s220/ricardo-ferreira-Grande.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_xvsPdhzsV0E/TNVEanZD3ZI/AAAAAAAAA58/XXutIa36d5w/s72-c/fig1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8571396175573944921.post-302970042821308337</id><published>2010-08-21T06:24:00.000-07:00</published><updated>2010-08-21T06:31:54.733-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TDC 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='EII'/><category scheme='http://www.blogger.com/atom/ns#' term='EAI'/><category scheme='http://www.blogger.com/atom/ns#' term='Middleware'/><title type='text'>Master Data Mgmt. &amp; Virtualização de Dados em SOA</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;Ontem, dia 20 de Agosto de 2010, apresentei uma palestra no evento &lt;a href="http://www.thedevelopersconference.com.br/tdc/2010/sp/trilha-soa-e-cloud"&gt;TDC 2010&lt;/a&gt; sobre Master Data Management &amp;amp; Virtualização de Dados em SOA, que gostaria de compartilhar com as pessoas que assistiram e aqueles que porventura não puderam. Aos que puderam participar da minha apresentação, um muito obrigado pela presença.&lt;br /&gt;&lt;div style="width: 425px;" id="__ss_5024835"&gt;&lt;strong style="margin: 12px 0pt 4px; display: block;"&gt;&lt;a href="http://www.slideshare.net/jricardoferreira/tdc-2010" title="Master Data Management &amp;amp; Virtualização de Dados em SOA"&gt;Master Data Management &amp;amp; Virtualização de Dados em SOA&lt;/a&gt;&lt;/strong&gt;&lt;object id="__sse5024835" height="355" width="425"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=tdc2010-100821081930-phpapp02&amp;amp;stripped_title=tdc-2010"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;embed name="__sse5024835" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=tdc2010-100821081930-phpapp02&amp;amp;stripped_title=tdc-2010" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="355" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="padding: 5px 0pt 12px;"&gt;View more &lt;a href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/jricardoferreira"&gt;Ricardo Ferreira&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;Forte Abraço ;-)&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8571396175573944921-302970042821308337?l=architecture-journal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://architecture-journal.blogspot.com/feeds/302970042821308337/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8571396175573944921&amp;postID=302970042821308337' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8571396175573944921/posts/default/302970042821308337'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8571396175573944921/posts/default/302970042821308337'/><link rel='alternate' type='text/html' href='http://architecture-journal.blogspot.com/2010/08/master-data-mgmt-virtualizacao-de-dados.html' title='Master Data Mgmt. &amp; Virtualização de Dados em SOA'/><author><name>Ricardo Ferreira</name><uri>http://www.blogger.com/profile/11930306647022714836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/-5T0r_5klxDA/Tn5CEvZpK0I/AAAAAAAABEg/MyTJuGi12ag/s220/ricardo-ferreira-Grande.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8571396175573944921.post-2753092897907100836</id><published>2010-08-18T07:24:00.001-07:00</published><updated>2010-08-18T08:39:18.991-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JBoss ESB'/><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='ESB'/><title type='text'>Novidades no JBoss ESB 4.9</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_xvsPdhzsV0E/TGvtxOOYtoI/AAAAAAAAA4s/m6Y8KgWE8PU/s1600/novidades.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 200px; height: 137px;" src="http://2.bp.blogspot.com/_xvsPdhzsV0E/TGvtxOOYtoI/AAAAAAAAA4s/m6Y8KgWE8PU/s200/novidades.gif" alt="" id="BLOGGER_PHOTO_ID_5506756399278372482" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;Foi lançado recentemente a mais nova versão do JBoss ESB, a versão 4.9. Esta versão é um release muito importante para os usuários e clientes da plataforma de ESB da JBoss pois ela insere vários conceitos estratégicos que visam melhorar a usabilidade e poder da plataforma. Até o final deste ano, vários outros releases devem ser lançados também regados de novas features e características, algumas delas que já podem ser verificadas nos fóruns de discussão da tecnologia. Isso mostra como a Red Hat e a comunidade em geral está investindo nessa plataforma de barramento de serviços que ganha cada vez mais espaço em empresas do Brasil inteiro, muitas destas que hoje já até possuem contratos de suporte profissional com a Red Hat, devido a criticidade de suas soluções. Neste post, iremos verificar de forma prática algumas destas novidades da versão 4.9.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Provedor baseado em Apache Camel&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Sem dúvida, esta é a principal novidade da nova versão. Agora temos no JBoss ESB um provedor se baseia no projeto Apache Camel, o qual nos trás diversos adaptadores para os mais diferentes canais de transporte. Eis uma lista parcial do que pode ser feito com este novo provedor:&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Receber mensagens do Apache ActiveMQ&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Receber mensagens de qualquer broker AMQP (Ex: Red Hat MRG, RabbitMQ)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Receber mensagens via Atom Feed&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Exposição de POJO's e JavaBeans em mecanismos de registros&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Receber mensagens de mecanismos de Cache como o EHCache&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Expor serviços via CXF Web Services&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Expor serviços REST usando CXF Web Services&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Expor componentes EJB (mesmo EJB 3.0) via o ESB&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Receber mensagens via ApplicationEvents do Spring&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Receber mensagens via File, FTP, Email, etc&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Receber e enviar mensagens ao Gmail&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Ler e escrever em sistemas de arquivos HDFS&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Mensagens baseadas em HL7 usando o protocolo MLLP&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Realizar CRUD's usando iBatis&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Receber e enviar mensagens via IRC's&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Recever e enviar mensagens via JavaSpaces&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Integração com ServiceMix via JBI&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Efetuar operações usando JDBC&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Efetuar operações usando JPA e Hibernate&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Executar pesquisas em sistemas LDAP&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Enviar mensagens ao Nagios&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Expor serviços via RMI&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Enviar e receber mensagens usando SMPP (SMS)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Ler e escrever Unix Pipes usando Streams&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Integração com XMPP e Grabber&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;Como você pode verificar, o uso deste novo provedor aumenta significativamente o número de canais de transporte no qual o JBoss ESB passa a lidar, deixando-o sem dúvida alguma como um dos barramentos de serviços mais flexíveis do mundo. Para demonstrar como este novo provedor pode ser usado, vamos a um pequeno exemplo. Vamos criar um exemplo em que o ESB monitora um diretório do computador a espera por um arquivo qualquer:&lt;br /&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/535057.js?file=jboss-esb.xml"&gt;&lt;/script&gt;Repare a simplicidade de utilizar os recursos do Camel: Basta utilizar os atributos de "uri" e "to" comuns no framework Camel que tudo é perfeitamente integrado ao ESB, desde a inserção dos atributos nas propriedades da mensagem quanto a criação da mensagem "ESB Aware" para o pipeline.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Implementação de actions customizadas usando Anotações&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Outra novidade interessante é a criação de actions personalizadas. Agora, você pode usar 100% POJO's para definir suas actions, e não mais ter que estender classes abstratas, implementar interfaces ou definir construtores para receber um ConfigTree. Tudo agora pode ser feito usando anotações. Vamos a um exemplo. Vamos alterar o exemplo anterior para criar nosso próprio adaptador de impressão da mensagem. Implementa a seguinte classe Java:&lt;br /&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/535096.js?file=MyLogger.java"&gt;&lt;/script&gt;Repare que a única coisa a ser feita agora, é anotar um método como &lt;span style="font-style: italic;"&gt;@Process&lt;/span&gt;, para indicar qual método será usado para processar a mensagem. A configuração desta ação também é muito simples, permanece como se fazia nas versões anteriores:&lt;br /&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/535109.js?file=jboss-esb_2.xml"&gt;&lt;/script&gt;Outra questão interessante é a utilização de parâmetros. Agora, para consumir um parâmetro definido no arquivo jboss-esb.xml, basta usar a anotação &lt;span style="font-style: italic;"&gt;@ConfigProperty&lt;/span&gt; como no exemplo abaixo:&lt;br /&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/535117.js?file=gistfile1.txt"&gt;&lt;/script&gt;A definição destes parâmetros usando o arquivo de configuração permanece o mesmo: Apenas crie uma tag do tipo "property" dentro da definição de sua ação no arquivo jboss-esb.xml e boa, será injetado automaticamente nos atributos internos da sua classe de ação. Outra novidade interessante são os métodos de lifecycle da action. Agora você pode definir comportamentos no momento do deploy da ação e no momento do UnDeploy da ação usando as anotações &lt;span style="font-style: italic;"&gt;@Initialize&lt;/span&gt; e &lt;span style="font-style: italic;"&gt;@Destroy&lt;/span&gt;, ideais para quando você aloca recursos em memória ou em buffer e deseja descárrega-los no momento apropriado.&lt;br /&gt;&lt;br /&gt;Boas Integrações ;-)&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8571396175573944921-2753092897907100836?l=architecture-journal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://architecture-journal.blogspot.com/feeds/2753092897907100836/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8571396175573944921&amp;postID=2753092897907100836' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8571396175573944921/posts/default/2753092897907100836'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8571396175573944921/posts/default/2753092897907100836'/><link rel='alternate' type='text/html' href='http://architecture-journal.blogspot.com/2010/08/novidades-no-jboss-esb-49.html' title='Novidades no JBoss ESB 4.9'/><author><name>Ricardo Ferreira</name><uri>http://www.blogger.com/profile/11930306647022714836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/-5T0r_5klxDA/Tn5CEvZpK0I/AAAAAAAABEg/MyTJuGi12ag/s220/ricardo-ferreira-Grande.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_xvsPdhzsV0E/TGvtxOOYtoI/AAAAAAAAA4s/m6Y8KgWE8PU/s72-c/novidades.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8571396175573944921.post-683730463185695321</id><published>2010-07-26T15:58:00.000-07:00</published><updated>2010-07-26T16:33:03.208-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JBoss ESB'/><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='ESB'/><title type='text'>"SystemPrintln" Genérico no JBoss ESB</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_xvsPdhzsV0E/TE4UkJ2N2qI/AAAAAAAAA38/DP18Y0H9K6g/s1600/charles-schulz-peanuts-think-big.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 159px; height: 200px;" src="http://2.bp.blogspot.com/_xvsPdhzsV0E/TE4UkJ2N2qI/AAAAAAAAA38/DP18Y0H9K6g/s200/charles-schulz-peanuts-think-big.jpg" alt="" id="BLOGGER_PHOTO_ID_5498354806417119906" border="0" /&gt;&lt;/a&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;Um cliente a uns dias atrás me procurou para saber alguns detalhes técnicos do JBoss ESB, entre eles, sobre se existia uma forma "genérica" de imprimir passo a passo o processamento de uma mensagem. O que ele queria na prática, era que a cada ação executada no pipeline de um serviço, que a mensagem fosse exibida no log de mensagens do servidor. Segundo ele, criar uma ação do tipo &lt;span style="font-style: italic;font-family:verdana;" &gt;"SystemPrintln"&lt;/span&gt; logo após cada ação era algo inviável quando você possui um proje&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;to com mais de 20 serviços e com 10 ações por cada serviço. Irrefutávelmente eu concordei com ele :-)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;Resolvi então explorar este requisito através do recurso de filtros do JBoss ESB, uma funcionalidade bastante interessante mas pouco explorada na documentação da plataforma ou dos "samples" que acompanham o ESB. O recurso de filtros é uma forma de realizar um pré ou pós processamento a cada vez que uma mensagem é processada por uma ação de um pipeline qualquer. A estratégia de implementação dos filtros no JBoss ESB não é muito diferente da usad&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;a na &lt;a href="http://java.sun.com/products/servlet/Filters.html"&gt;API&lt;/a&gt; de &lt;a href="http://java.sun.com/products/servlet/"&gt;Servlets&lt;/a&gt; no Java EE. Em verdade, a abordagem é exatamente a mesma, exceto pelo fato de que o que está sendo filtrado não é uma requisição HTTP e sim, uma mensagem que pode estar em qualquer formato aceito pelos listeners do JBoss ESB, tais como JMS, SOAP, XML, EDI, TXT, JSON, etc.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_xvsPdhzsV0E/TE4WHNwtYHI/AAAAAAAAA4E/xuWdFKkM0gw/s1600/pipesfilters.jpg"&gt;&lt;img style="cursor: pointer; width: 200px; height: 62px;" src="http://2.bp.blogspot.com/_xvsPdhzsV0E/TE4WHNwtYHI/AAAAAAAAA4E/xuWdFKkM0gw/s200/pipesfilters.jpg" alt="" id="BLOGGER_PHOTO_ID_5498356508274810994" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;Para criar um filtro para o JBoss ESB, você deve criar uma classe que estenda a classe &lt;span style="font-style: italic;font-family:verdana;" &gt;org.jboss.soa.esb.filter.InputOutPutFilter&lt;/span&gt;. Esta classe encontra-se no arquivo JAR principal do JBoss ESB conhecido como jbossesb-rosseta.jar. Abaixo segue uma implementação que fiz para exibir a mensagem do pipeline no log do servidor. Para facilitar a implementação, usei a própria implementação de "SystemPrintln" que vem com o JBoss ESB para garantir que o mesmo tipo de lógica de log seja aplicada pelo filtro.&lt;br /&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/491432.js?file=GenericMessageLogger.java"&gt;&lt;/script&gt;Repare que fiz uma rescrita do método &lt;span style="font-style: italic;"&gt;onOutPut()&lt;/span&gt;, para lidar com o exato momento em que a mensagem já fora processada pela ação. Se você quiser realizar alguma lógica antes da execução da ação, sobreescreva o método &lt;span style="font-style: italic;"&gt;onInput()&lt;/span&gt; disponível na classe base estendida. Os argumentos de ambos os métodos são, respectivamente, a mensagem enviada ao pipeline do serviço (criada por alguns dos gateways ou roteada por outros serviços) e uma instância de uma Map que possui parâmetros adicionais criados pelo contexto do serviço, porventura, informações sobre o ambiente da mensagem antes de ser recebida pelo ESB, como exemplo, informações de um diretório FTP caso o gateway usado seja do tipo FTP.&lt;br /&gt;&lt;br /&gt;Para instalar este filtro no JBoss ESB, você deve editar o arquivo &lt;span style="font-style: italic;"&gt;$JBOSS_ESB_HOME/server/$seuProfile/deployers/esb.deployer/jbossesb-properties.xml&lt;/span&gt;. Na seção "filters", crie uma nova entrada de filtro como mostrado abaixo. Repare que para cada filtro existe um número associado. Este número representa a ordem do filtro na cadeia de processamento. Prefira criar seus filtros para serem executados sempre depois dos filtros internos do JBoss ESB.&lt;br /&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/491443.js?file=jbossesb-properties.xml"&gt;&lt;/script&gt;Você deverá criar um arquivo JAR contendo a implementação dos seus filtros e distribuir na pasta "lib" do deployer do JBoss ESB. Se você usa versões do JBoss ESB que rodam em versões inferiores à 5.0 do JBoss AS, talvez seja necessário colocar o JAR na pasta "lib"do seu profile.&lt;br /&gt;&lt;br /&gt;Pronto! Inicie seu JBoss ESB e faça os testes. Agora, toda vez que uma mensagem for executada por um pipeline, à cada execução de uma ação um registro de log da mensagem será exibido no console ou no arquivo de logs.&lt;br /&gt;&lt;br /&gt;Boas Integrações ;-)&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8571396175573944921-683730463185695321?l=architecture-journal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://architecture-journal.blogspot.com/feeds/683730463185695321/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8571396175573944921&amp;postID=683730463185695321' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8571396175573944921/posts/default/683730463185695321'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8571396175573944921/posts/default/683730463185695321'/><link rel='alternate' type='text/html' href='http://architecture-journal.blogspot.com/2010/07/systemprintln-generico-no-jboss-esb.html' title='&quot;SystemPrintln&quot; Genérico no JBoss ESB'/><author><name>Ricardo Ferreira</name><uri>http://www.blogger.com/profile/11930306647022714836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/-5T0r_5klxDA/Tn5CEvZpK0I/AAAAAAAABEg/MyTJuGi12ag/s220/ricardo-ferreira-Grande.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_xvsPdhzsV0E/TE4UkJ2N2qI/AAAAAAAAA38/DP18Y0H9K6g/s72-c/charles-schulz-peanuts-think-big.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8571396175573944921.post-3469792973703482098</id><published>2010-06-19T05:45:00.001-07:00</published><updated>2010-07-20T08:01:58.791-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Progress'/><category scheme='http://www.blogger.com/atom/ns#' term='BPM'/><title type='text'>BPO usando Savvion Modeler Parte 2</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_xvsPdhzsV0E/TBy-J56p87I/AAAAAAAAA3E/TsaReSlvHbM/s1600/business.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 200px; height: 150px;" src="http://3.bp.blogspot.com/_xvsPdhzsV0E/TBy-J56p87I/AAAAAAAAA3E/TsaReSlvHbM/s200/business.jpg" alt="" id="BLOGGER_PHOTO_ID_5484467523605361586" border="0" /&gt;&lt;/a&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;Na &lt;a href="http://architecture-journal.blogspot.com/2010/06/bpo-usando-savvion-modeler-parte-1.html"&gt;parte 1&lt;/a&gt; desta série de artigos, vimos alguns detalhes sobre o que é e o que implica BPO dentr&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;o das organizações. Vimos a importância sobre conhecer e melhorar contínuamente os processos vitais de uma organização em pró da melhorí&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;a operacional ou estratégica destas. Nesta segunda parte, vamos dedicar o artigo aos detalhes sobre &lt;span style="font-style: italic;"&gt;COMO&lt;/span&gt; realizar melhoría contínua de processos, conhecendo os detalhes por trás desta prática e aprendendo a como realizar as etapas de análise, modelagem e simulação de processos usando a ferramenta Savvion BPM Modeler. O entendimento desta série do artigo é de suma importância porque aqui veremos os detalhes de "dia a dia" de quem engaja em iniciativas de BPO, detalhes esses que normalmente não podem ser vistos em livros, documentações e palestras. Com isso, iremos neste artigo trabalhar com um processo simples para que os detalhes sejam fielmente compreendidos, tornando a leitura muito mais didática.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;Na &lt;a href="http://architecture-journal.blogspot.com/2010/06/bpo-usando-savvion-modeler-parte-3.html"&gt;parte 3&lt;/a&gt; desta série, iremos ver como os conceitos e práticas m&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;o&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;strados na &lt;a href="http://architecture-journal.blogspot.com/2010/06/bpo-usando-savvion-modeler-parte-1.html"&gt;parte 1&lt;/a&gt; e parte 2 podem ser aplicados a um processo de negócio real, que contêm detalhes e complexidades muito parecidos com outros processos que potencialmente você irá enfrentar. Para exercitar o que será mostrado aqui, você deverá p&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ossuir a versão 7.5 SP2 do Savvion Modeler. Este software poderá ser baixado dos repositórios da Progress caso você tenha este acesso ou licença de uso. Mãos à obra!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Entendendo o cenário que será usado como exemplo&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Para que possamos praticar os conceitos de BPO, temos que primeiro traçar u&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;m cenário de negócio. O cenário que iremos trabalhar será de uma aprovaç&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ão de requisição de material de uma empresa de fornecimento de energia elétrica. A idéia é que possamos mapear a situação onde um empregado da empresa solicita algum material que será usado para seu trabalho, como por exemplo, cartões de visita, um grampeador para sua mesa, ou até mesmo um laptop para trabalho remoto do escritório. Este cenário deverá mapear o momento que a requisição é feita, aprovada ou reprovada e operacionalizada dentro da compahia.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Começando a trabalhar: Iterações de análise de processo&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A primeira coisa a se fazer é realizar um ou mais trabalhos de análise sobre estes processos. Estas análises devem ser categorizadas em diferentes frentes&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; que a maioria dos escritórios de BPO devem ter mapeados de ante-mão. Exemplos destes tipos de análises s&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ão:&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Análise de Viabilidade: O processo merece ser entendido e/ou melhorado?&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Análise de Riscos: O processo representa quantos % do negócio da organização?&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Análise de Custos: Quanto custa, em termos de esforço e fin&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;anceiro, melhorar este processo?&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Análise de Impacto: Mudar ou melhorar este processo apresenta impactos em pessoas e TI?&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Estas análise normalmente são feitas com reuniões curtas entre os envolvidos e interessados no processo cujo formato são sessões de argumentações das categorias citadas. O insumo a ser criado é uma lista de argumentações que devem posteriormente serem respondidas e endereçacas as pessoas correspondentes. No caso particular da análise de custos, é interessante perguntar: "Quanto custa parar os envolvidos nos processos para melhorar isso?", "Se tiver que alterar sistemas da TI, quanto que isso me custa de tempo e dinheiro?", "É necessário&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; adquirir nov&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;os pacotes de software ou contratar pessoas para isso?", "Precisamos contratar uma consultoria do assunto do processo?"&lt;br /&gt;&lt;br /&gt;Assim que estas análises forem feitas, um relatório de embasamento deverá ser criado e enviado ao patrocinador do projeto. Ele deverá conseguir ver claramente quais os benefícios e impactos que um potencial investimento naquele processo irá ter. Deve ser possível também visualizar que tipo de melhoría será conseguida com aquilo. Isso é muito importante para efeitos de mobilização: Se um processo melhorado não apresenta benefícios, para que melhorá-lo? Se um sistema mapeia corretamente um fluxo da empresa (mesmo que não da melhor forma) por que atualizá-lo?&lt;br /&gt;&lt;br /&gt;Nos primeiros esforços de BPO numa empresa, é comum &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;constatar que nenhum benefício direto será alcançado. Isso acontece porque normalm&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ente os processos ainda não são corretamente compreendidos e com isso, a percepção sobre que benefícios se obtêm quando se melhora não são claros. Mas como dito anteriormente, investir algum tempo e dinheiro no entendimento dos processos internos além de ser a fundação para um bom BPO, é um investimento que trás grandes benefícios, um deles é a clara percepção que o negócio possa estar mal conduzido. Quando você para para analisar como você faz as coisas, você percebe o quanto pode estar certo ou o quanto pode estar errado. Um ponto positivo de se fazer BPO pela primeira vez é que você nem precisa de tanto esforço de análise para ver o que está errado: Revisando o processo pela primeira vez você já têm a clara percepção de direção. Quando você tenta melhorar um processo que você já compreende e entende, ai muitas das vezes é necessário investir algum tempo analisando diferentes cenários e possibilidades, muitas das vezes, até por pessoas de fora, ou seja, pessoas que não tenham os mesmos interesses que os seus e que tenha &lt;span style="font-style: italic;"&gt;exper&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-style: italic;"&gt;tise&lt;/span&gt; no tipo do processo.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;O que é na prática melhoría de processos?&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;br /&gt;Alterar um processo e perceber uma melhoría? Isso pode ser um passo bem desafiador se você nunca fez isso ou se você não têm conhecimentos sobre a organização. É comum observar pessoas argumentando sobre o que é na prática melhoría de pro&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;cessos, pois muitas pessoas efetivamente repetem a frase mas não entendem corretamente seu significado e influências. Conheço um bom punhado de "Analistas de BPM" que na prática não ajudam em absolutamente nada. Melhoría de processos têm a ver com duas palavrinhas simples: &lt;span style="font-style: italic;"&gt;Eficácia&lt;/span&gt; e &lt;span style="font-style: italic;"&gt;Eficiência&lt;/span&gt;. Você é &lt;span style="font-style: italic;"&gt;eficaz&lt;/span&gt; quando você desprende um conjunto de recursos disponíveis ou indisponíveis para um objetivo correto. Se você desprende recursos para objetivos incertos ou inviáveis, você não é eficaz. &lt;span style="font-style: italic;"&gt;Eficiência&lt;/span&gt; têm a ver com alocar o menor número possível de recursos e conseguir o mesmo bom resultado (ou resultado melhor) que você teria com um conjunto menor de recursos. Costumo falar que eficácia têm a ver com visão e eficiência têm a ver com experiência.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;Se você faz parte ou analisa um processo qualquer e conse&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;gue perceber que um dado processo é ou não é correto ou viável, você está tendo uma boa visão e portanto está sendo eficaz. O processo de escolha de uma lista de processos que devem ser melhorados têm a ver com visão. Em termos práticos, não somente escolher o processo correto, mas escolher o objetivo correto também é sinal de visão e de eficácia. Muitas das vezes, vemos empresas que possuem métodos de trabalho muito bons e uma boa base e equipe técnica qualificada, ingredientes estes que por si só apresentam sinais de um possível sucesso. Mas muitas destas empresas possuem objetivos pobres ou errôneos de forma que mesmo que conduzam os processos corretamente, eles trilham caminhos que não darão bons resultados. É o caso de grandes empresas que vemos no dia a dia que num dado momento são candidatas a falência em seu negócio. Os recursos eram bons, mas os objetivos não estavam bem traçados&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; ou corretos. Empresas que pedem para serem compradas o&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;u entram em processo de falência são bons casos destes. Faltou eficácia. Logo percebemos que podemos categorizar as empresas do mundo todo em 2 segmentos: As empresas que vão bem e as empresas que vão mal. As empresas que vão mal são aquelas que não possuem eficácia a fatalmente serão fadadas ao fracasso ou desligamento, e as empresas que vão bem são aquelas que possuem eficácia, e ainda estão no mercado disputando o espaço com outras no mesmo segmento. Estas empresas que vão bem, são aquelas que devem procurar ter mais eficiência.&lt;br /&gt;&lt;br /&gt;Se você possuem um negócio que está indo pro caminho certo, mas está com dificuldades de alavancar seu negócio perante o poder dos concorrentes, está na hora de revisar sua eficiência. Como dito antes, eficiência têm a ver com trazer melhores resultados com menores ou os mesmos recursos ou diferentes estratégias. Bons exemplos de melhores resultados com menores recursos é quando você é um fabricante de algum material e consegue aument&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ar sua fabricação diminuindo os recursos necessários ou alterando sua abordagem de produzir. Para conseguir isso, você precisa de uma estratégia. Vamos a um exemplo da vida re&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;al ...&lt;br /&gt;&lt;br /&gt;Imagine que você é do ramo de &lt;span style="font-style: italic;"&gt;Data Centers&lt;/span&gt;. Você possui sua cartela de clientes fixos, mais para aumentar sua cartela implica em aumentar seu custo operacional de telefonia ou de links dedicados. Seu concorrente faz a mesma coisa que você mas possuem a "vantagem" de também ser uma operadora de telefonia móvel e fixa que inclusive presta serviços pra você. Para que você faça seu negócio acontecer, você têm um custo de telefonia, para que seu concorrente faça o negócio dele acontecer, ele não possui um custo de telefonia e por isso, pode escalar mais. Posicionar portanto uma empresa sobre se ela é ou não mais competitiva é a questão de perguntar: Os recursos operacionais dela são mantidos por ela mesma (auto-suficiência) ou são mantidos &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;por terceiros? A empresa do concorrente portanto é muito mais eficiente que a sua, porque ela detêm os recursos operacionais necessários para o negócio.&lt;br /&gt;&lt;br /&gt;Produzir coisas têm a ver com aquisição de matéria prima ou i&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;nsumos. Se você produz alguma coisa e quer ser mais competitivo significa que você deve reavaliar com adquire sua matéria prima ou como você pode reduzir o custo desta aquisição. Uma outra forma de garantir que sua produção possa ser mais eficiente é trocando a matéria prima ou os recursos utilizados ou utilizando o conceito de recursos compartilhados. Compartilhar recursos sempre é uma abordagem que traz bons resultados de eficiência, não importa o contexto. Para os técnicos de plantão que estão lendo este artigo, pense por exemplo nos EJB's do tipo session: Quem escala mais, os SLSB's ou os SFSB's? Sem dúvida será aquele que tiver menor número de recursos alocados e maior número de recursos compartilhados.&lt;br /&gt;&lt;br /&gt;Acredito que depois desta explanação sobre eficácia e ef&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ici&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ência, melhoría de processos deva estar mais clara agora. Melhorar um processo implica primeiro e acima de tudo fazer com que o processo seja eficaz, e quando este for eficaz que ele seja mais eficiente. A busca constante por melhoría na prática é a busca constante pela eficiência, mas, somente se o processo estiver buscando os objetivos corretos. De nada adianta você construir um processo que seja demasiadamente eficiente se ele não refletir os objetivos e resultados corretos. E, antecipando um pouco do que veremos a seguir, conseguir ser eficiente é, ao contrário do que se pensa, muito mais simples do que conseguir ser eficaz. Como dito antes, eficácia têm a ver com visão, e eficiência têm a ver com experiência. Se você já passou por uma situação, você pode dar palpites sobre como melhorar algo. A experiência é algo que é concreto, que podemos vivenciar ao longo dos anos. Pode demorar, mas uma hora você adquire a experiência em algo para torná-lo mais eficiente. Ter visão é mais complicado, não é algo que você vivencia ou experimenta. É um dom!&lt;br /&gt;&lt;br /&gt;Você deve ter a sorte de ser uma pessoa de visão para sa&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ber que tipos de objetivos perseguir. Fazendo um breve paralelo com a vida real, existem muitas pessoas&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; estáveis e experientes que quando argumentadas sobre o que ela quer da vida ... não sabem responder. Isso porque lhes falta visão. E normalmente, as pessoas que não têm visão sobre a própria vida jamais irão ter visão sobre o seu negócio. Justamente por isso, algumas grandes empresas, consolidadas e até líderes no seu mercado, contratam o que chamamos de CEO: pessoas que vem para as empresas para tentar trazer a visão que falta para a equipe de diretoria e grupos acionistas. Não é surpresa, dito isso, que muitas grandes empresas possuem CEOs que na verdade não são os donos destas empresas, e, contextualizando no nosso país, não é surpresa que um presidente precise de tantos acessores para "ajudar" a conduzir o país. Os acessores são as pessoas de visão e portanto que trará a eficácia ;-)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Brincando com o Savvion BPM Modeler&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Agora vamos dar uma olhada na ferramenta de mode&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;lagem da Progress conhecida como Savvion BPM Modeler. Esta é sem dúvida uma das melhores ferramentas (senã&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;o a melhor) de modelagem de processos de negócio usando a notação BPMN. De fato, o Savvion BPM Modeler é bem mais do que isso, é uma suíte completa de BPO onde você pode praticar análise e simulação de processos e promover efetivamente melhoría de processos. Além disso, a ferramenta de modelagem é parte integrante de uma suíte maior de BPMS conhecida como &lt;a href="http://web.progress.com/en/savvion/savvion-businessmanager.html"&gt;Savvion Business Manager&lt;/a&gt;. Com esta suíte, você pode além de modelar e simular processos, transformar estes processos em aplicações corporativas completas com o mínimo de esforço possível. Mas vamos deixar a suíte BPMS da Progress para um próximo post, neste, &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;iremos focar efetivam&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ente em melhoría de processos usando técnicas de BPO. Para começar, inicie a ferramenta Savvion BPM Modeler para entendermos um pouco de como ela funciona.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_xvsPdhzsV0E/TEW0qabxM3I/AAAAAAAAA3s/0aEDDV4_2s8/s1600/fig1.JPG"&gt;&lt;img style="cursor: pointer; width: 200px; height: 135px;" src="http://2.bp.blogspot.com/_xvsPdhzsV0E/TEW0qabxM3I/AAAAAAAAA3s/0aEDDV4_2s8/s200/fig1.JPG" alt="" id="BLOGGER_PHOTO_ID_5495997561018856306" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_xvsPdhzsV0E/TEW301RDspI/AAAAAAAAA30/q88Qy8s2c88/s1600/fig2.JPG"&gt;&lt;img style="cursor: pointer; width: 200px; height: 118px;" src="http://2.bp.blogspot.com/_xvsPdhzsV0E/TEW301RDspI/AAAAAAAAA30/q88Qy8s2c88/s200/fig2.JPG" alt="" id="BLOGGER_PHOTO_ID_5496001038555263634" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;Continua ...&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8571396175573944921-3469792973703482098?l=architecture-journal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://architecture-journal.blogspot.com/feeds/3469792973703482098/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8571396175573944921&amp;postID=3469792973703482098' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8571396175573944921/posts/default/3469792973703482098'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8571396175573944921/posts/default/3469792973703482098'/><link rel='alternate' type='text/html' href='http://architecture-journal.blogspot.com/2010/06/bpo-usando-savvion-modeler-parte-2.html' title='BPO usando Savvion Modeler Parte 2'/><author><name>Ricardo Ferreira</name><uri>http://www.blogger.com/profile/11930306647022714836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/-5T0r_5klxDA/Tn5CEvZpK0I/AAAAAAAABEg/MyTJuGi12ag/s220/ricardo-ferreira-Grande.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_xvsPdhzsV0E/TBy-J56p87I/AAAAAAAAA3E/TsaReSlvHbM/s72-c/business.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8571396175573944921.post-5435301820228795988</id><published>2010-06-14T07:03:00.000-07:00</published><updated>2010-06-15T05:49:08.211-07:00</updated><title type='text'>BPO usando Savvion Modeler Parte 1</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_xvsPdhzsV0E/TBaIY5YOWeI/AAAAAAAAA20/VTgicUTAQlw/s1600/business.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 200px; height: 150px;" src="http://2.bp.blogspot.com/_xvsPdhzsV0E/TBaIY5YOWeI/AAAAAAAAA20/VTgicUTAQlw/s200/business.jpg" alt="" id="BLOGGER_PHOTO_ID_5482719557670820322" border="0" /&gt;&lt;/a&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;Toda organização possui (ou deveria possuir) um conjunto de objetivos estratégicos e diretrizes onde todos na organização atuam. Estes objetivos e diretrizes tomam diferentes formas e diferentes níveis: visão, missão, planos e dire&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;ção para os negócios, etc. Pessoas nestas organizações atuam colaborativamente e estão sujeitos as políticas e regulamentações, práticas e padrões relevantes e procedimentos estabelecidos para atingir estes objetivos. A entidade fundamental que reune todos estes elementos são os processos de negócio. Uma organização é em última análise, uma coleção de processos que determinam como a mesma opera, como ela gera seus rendimentos, como ela suporta seus clientes, etc. Como uma empresa se diferencia uma das outras têm a ver unicamente com seus processos de negócio. Neste caso, os processos de negócio de uma organização são ativos vitais e críticos que devem ser tratados como o bem mais valioso que existe. Sendo assim, eles devem ser gerenciados e mantidos apropriadamente. Para isso, os processos precisam ser reconhecidos, documentados, compree&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;ndidos e analisados antes que eles sejam automatizados e gerenciados. Este é o processo mais vital que fará com que os processos de negócio tenham a devida atenção que merecem. A automação destes somente fará com que a "roda possa girar" e fazer o dinheiro fluir, mas isso só acontecerá se os processos estiverem concisos.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;Para estabelecer este ciclo, se faz necessário o uso de ferramentas visuais de simples utilização que possa gerar modelos e uma linguagem de notaçã&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;o padrão e que este possa ser controlado num sistema de repositórios centralizado de acesso controlado. Desta forma, as pessoas envolvidas nos processos podem criar modelos, atualizar existentes, promover discussões sobre os modelos já criados e garantir que os processos estejam sempre íntegros e atualizados. Mais ainda, estas ferramentas devem prover recursos de simulações destes processos, de forma que as pessoas possam "observar" as diferentes combinações criadas, e os diferentes caminhos e alocações de recursos que um dado processo possa gerar.&lt;br /&gt;&lt;br /&gt;Uma vez que você tenha estabelecido este tipo de ferramenta em sua organização, em conjunto com os ciclos citados anteriormente, você poderá então oficialmente instituir um grupo responsável por BPO, sigla de "Business Process Optimization". Considerar um grupo de BPO dentro de qualquer organização de médio ou grande porte é sem dúvida uma forma de garantir sucesso de mercado e diferencial quanto aos concorrentes. Se você fizer iss&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;o e tiver uma pequena parcela de concorrentes que ainda não o façam (ou façam mas com pouca ou nenhuma seriedade) então você poderá colher os frutos de ser um líder no seu nicho de mercado. Em muitos casos, &lt;a href="http://en.wikipedia.org/wiki/Business_process_management"&gt;BPM&lt;/a&gt; é visto como algo extremamente dispendioso e dificil de justificar, principalmente quando se fala em alterações nas aplicações para acomodar a automação dos processos. Mas bem mais importante do que a fase de automação de processos é a fase de análise e melhoría destes. Instituir um grupo responsável por BPO numa empresa de médio ou grande porte é algo que de longe pode ser caro e pode (ou deve) ser tratado muito mais como um investimento do que como uma despesa.&lt;br /&gt;&lt;br /&gt;Com níveis adequados de maturidade nos processos, é interessante fechar o ciclo do BPM e promover a automação dos processos junto a TI. A just&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ificativa da mudança será simples e muito bem embasada. Boas estratégias de adoção de BPM devem incluir fases preliminares de observação e entendimento dos processos, seguido de propostas de melhoría e de melhorías em si, acordadas entre os interessados, aprovada pelos níveis de diretoria e fundamentada com dados estatísticos sobre redução de custos e recursos. Depois que estes primeiros passos forem dados, BPO poderá dar espaço a ciclos de automação e gerenciamento, fechando o que chamamos de ciclos de BPM. Dai o sentido da letra "M" do BPM.&lt;br /&gt;&lt;br /&gt;A idéia deste artigo é mostrar, em termos conceituais e práticos, como operacionalizar análise, modelagem e melhoría de processos através de simulações de cenários. Nesta primeira parte iremos nos ater os quesitos conceituais sobre processos de negócio, e na segunda parte iremos ver como modelar, analisar e simular um processo de negócio na prática, usando para isso a ferramenta &lt;a href="http://web.progress.com/en/savvion/process-modeler.html"&gt;Savvion BPM Modeler&lt;/a&gt; da &lt;a href="http://web.progress.com/en/index.html"&gt;Progress&lt;/a&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;A Necessidade de Análise e Modelagem de Processos de Negócio&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Processos são os insumos básicos que governam qualquer tipo de negócio. Alguns destes processos estão embutidos em aplicações comerciais (ERP's, CRM's) que capturam algumas funcionalidades, atividades e segmentos de um processo. Mas muitos destes processos que governam o negócio envolvem várias aplicações, vários sistemas e várias pessoas, sejam elas funcionários, clientes, parceiros ou fornecedores. Estes processos também não são formalmente definidos e documentados. Cada departamento ou organização pode potencialm&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ente definir seus próprios processos (ou segmentos destes processos) baseados em vários procedimentos, formulários, guidelines e outros documentos.&lt;br /&gt;&lt;br /&gt;As coisas podem ficar muito piores quando você têm processos que são distribuídos em diferentes organizações, como nos casos onde o processo se inicia num fornecedor de serviços, passa por um fornecedor de produtos e termina nas fronteiras dos clientes. O conhecimento sobre estes processos distribuídos estão espalhados entre vários gerentes de ne&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;gócio das organizações envolvidas. &lt;span style="font-style: italic;"&gt;Não existe um único lugar ou pessoa onde se possa aprender sobre estes processos&lt;/span&gt;. Se algumas destas pessoas se desligar da sua organização, o processo terá uma lacuna de conhecimento. Mais ainda, nenhum processo de negócio é uma ilha isolada, todos os processos de negócio estão embutidos ou &lt;span style="font-style: italic;"&gt;fazem parte de outros processos&lt;/span&gt; criando portanto camadas de processos dentro das organizações. Processos de camadas mais baixas normalmente são ditos &lt;span style="font-style: italic;"&gt;processos operacionais&lt;/span&gt; quando que processos de camadas mais altas são ditos &lt;span style="font-style: italic;"&gt;processos estratégicos&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_xvsPdhzsV0E/TBd2i2i5QiI/AAAAAAAAA28/cdekUcab1_c/s1600/camadasProcessos.JPG"&gt;&lt;img style="cursor: pointer; width: 200px; height: 86px;" src="http://2.bp.blogspot.com/_xvsPdhzsV0E/TBd2i2i5QiI/AAAAAAAAA28/cdekUcab1_c/s200/camadasProcessos.JPG" alt="" id="BLOGGER_PHOTO_ID_5482981412476371490" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;Dado este grande número de problemas relacionados a processos, se faz necessário uma abordagem pragmática que mantenha os processos livre destes tipos de problemas. Primeiro, deve-se manter os processos em repositórios controlados nas organizações, ou, se trata-se de processos inter-organizacionais, em repositórios mantidos por pessoas (empresas) comuns para as organizações envolvidas. Segundo, os modelos não podem ser estáticos. A abordagem deve se basear na construção inicial dos processos e na evolução constante destes processos. Para isso, as ferramentas envolvidas deverão possibilitar a constante mudança nos artefatos dos processos de forma distribuída, ou seja, possibilitar que diferentes pessoas possam alterar os artefatos simultâneamente. Além disso, é necessário também que as ferramentas possam prover links entre os processos, de forma que se um processo é um processo interno de outro (um sub-processo), o processo maior possa, quando simulado ou executado, executar o processo interno e esperar que ele termine até que ele possa dar prosseguimento no processo maior. É necessário também que a ferramenta possa ter como atividades, diferentes tipos de "caixinhas" que possam variar de atividades humanas a atividades sistêmicas.&lt;br /&gt;&lt;br /&gt;Deve ser possível por exemplo, que uma atividade seja operacionalizada por uma ação realizada por um dos sistemas da organização. Para isso, estas operações devem ser encapsuladas na forma de serviços e se tornarem disponíveis na forma de uma paleta de atividades: Todos os serviços da organização deverão estar registrados em algum sistema automatizado de registros de forma que possam aparecer na ferramenta de desenho de processos como uma paleta de possibilidades. Com isso, os donos dos processos podem pensar nas etapas dos processos em "caixinhas" que possuem um significado ou representação, sem se preocupar em como aquela caixinha quando executada, irá fazer seu trabalho. Há quem diga que &lt;span style="font-style: italic;"&gt;um processo é uma coleção de caixinhas ligadas umas nas outras que formam um caminho a ser percorrido&lt;/span&gt;. Assim devem ser os processos construídos, simples ao ponto de poderem ser definidos desta forma.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Benefícios do Uso de Análise e Modelagem de Processos&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Como mencionado anteriormente, organizações podem se beneficiar substancialmente realizando investimentos de análise, modelagem e melhoría nos seus processos de negócio. Estudos têm mostrado que mesmo que as organizações não tenham uma intenção formal de ter ciclos de BPM e de automatizar seus processos, apenas modelando e simulando os processos podem ajudar a melhorá-los consideravelmente. Mesmo que a melhoría não ocorra num primeiro momento, somente o esforço de modelar, documentar e entender os processos já é um ganho considerável. Muitas empresas não possuem entendimento dos seus processos e com isso, elas não podem evoluir e serem mais competitivas. &lt;span style="font-style: italic;"&gt;Se você não entende corretamente o que você faz, como você pode saber se você está fazendo certo ou errado?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Aplicando corretamente BPO numa organização, possibilita que você usufrua dos seguintes benefícios:&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Analistas do negócio, gerentes funcionais e diretores se tornam responsáveis pelos processos. Com essa autonomia, a decisão se torna mais simples e mais coesa;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Processos internos e inter-organizacionais serão melhor controlados e não mais irão existir somente quando as pessoas existirem: Na substituição da pessoa (recurso) o processo continua existindo e funcionando;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Previsão de funcionamento sem que a TI tenha que mostrar como se faz. Processos poderão ser analisados mesmo que não sejam automatizados pela TI. Isso possibilita maior agilidade na tomada de decisão, uma vez que toda a ciência, autonomia e responsabilidade está agora na área de negócios. Interações com a TI serão reduzidas a pedidos de automação concretos;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Suporte a iniciativas de &lt;span style="font-style: italic;"&gt;compliance&lt;/span&gt; tais como &lt;a href="http://en.wikipedia.org/wiki/Six_Sigma"&gt;Six Sigma&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/ISO_9000"&gt;ISO 9000&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Sarbanes%E2%80%93Oxley_Act"&gt;Sarbanes Oxley&lt;/a&gt;, etc;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Investimentos melhores justificados. Ao requisitar para a TI a automação de um processo que foi comprovadamente dito como "de sucesso", os fundos para isso serão providenciados rapidamente, isto é, se houver fundo disponível e aprovado para o item "Melhoría de Processos";&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Boas Melhorías :-)&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8571396175573944921-5435301820228795988?l=architecture-journal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://architecture-journal.blogspot.com/feeds/5435301820228795988/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8571396175573944921&amp;postID=5435301820228795988' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8571396175573944921/posts/default/5435301820228795988'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8571396175573944921/posts/default/5435301820228795988'/><link rel='alternate' type='text/html' href='http://architecture-journal.blogspot.com/2010/06/bpo-usando-savvion-modeler-parte-1.html' title='BPO usando Savvion Modeler Parte 1'/><author><name>Ricardo Ferreira</name><uri>http://www.blogger.com/profile/11930306647022714836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/-5T0r_5klxDA/Tn5CEvZpK0I/AAAAAAAABEg/MyTJuGi12ag/s220/ricardo-ferreira-Grande.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_xvsPdhzsV0E/TBaIY5YOWeI/AAAAAAAAA20/VTgicUTAQlw/s72-c/business.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8571396175573944921.post-2391281936361262961</id><published>2010-06-04T07:17:00.000-07:00</published><updated>2010-06-04T12:59:52.492-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SLA'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss ESB'/><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='ESB'/><title type='text'>Monitoramento de SLA's com JBoss ESB</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_xvsPdhzsV0E/TAkVpiWdlNI/AAAAAAAAA0s/qZoOqtCd2C8/s1600/grafico.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 200px; height: 200px;" src="http://3.bp.blogspot.com/_xvsPdhzsV0E/TAkVpiWdlNI/AAAAAAAAA0s/qZoOqtCd2C8/s200/grafico.jpg" alt="" id="BLOGGER_PHOTO_ID_5478934225012757714" border="0" /&gt;&lt;/a&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;Suponha que você po&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;ssui um ou mais ser&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;viços implementado&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;s no seu barramento e que&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt; &lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;deverão&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt; ser utilizados pelos &lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;seus clientes e parceiros. &lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;Par&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;a que &lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;você &lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;possa oferecer um serviço com um mínimo de segurança, você d&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;eve criar contratos de &lt;a href="http://en.wikipedia.org/wiki/Service_level_agreement"&gt;SLA&lt;/a&gt; &lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;(Service Level Agreement) com estes cli&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;entes e parceiros. Estes contratos normalmente &lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;regem condutas mínimas de utilização como percentual de disponibilidade do serviço, tempo de&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt; resposta mínimo, tempo de indisponibilidade do serviço e o tempo de recuperação deste caso haja falhas na operação. Isso se dá porque ou o cliente ou o parceiro possui um contrato de utilização&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt; do serviço (ou do negócio que está sendo&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt; prestado) c&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;om voc&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;ê, e estas regras de utilização são protegidas por multas que costumam ser bem desafiadoras do ponto de vista contratual. Para que você esteja preparado p&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;ara&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt; acomodar &lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;este tipo de situação, você&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt; dev&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;e ter fer&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;ramentas e tecnologias que possam lhe ajudar a mensurar estes itens quanto a viabilidade, e também controlar e monitorar estes eventos de indisponibilidade ou utilização de forma reativa ou preferencialmente, de forma pró-ativa.&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify; font-family: verdana;"&gt; &lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;O objetivo deste artigo é mostrar com&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;o, através do conjunt&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;o d&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;e tecnologias e plataformas da JBoss, podem&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;os oferecer este tipo "garantia" para os clie&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;ntes e &lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;parceiros, caso você esteja engajado neste tipo de negócio, que, em algumas verticais de negócio co&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;mo no ramo financeiro e principalmente o ramo das telecomunicações, se torna cada vez mais comum. Dezenas de operadoras brasileiras já possuem pelo menos um destes contratos co&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;m ou&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;tras empresas forne&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;cedores de conteúdo digital e afins. Para a vertical de governo, não é dificil imaginar este t&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;ipo de situação: Porventura, uma empresa que possui um serviço&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt; de nota fiscal eletrôni&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;ca possa querer fazer outsourcing não da aplicação, mas do serviço de processamento de notas fiscais pa&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;ra órgãos do governo e assim, acarretar em um ou mais contratos de&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt; SLA.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;Para implementar este tipo &lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;de&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt; cenário em suas instalaçõe&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;s&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;, você precisará essencialmente do &lt;a href="http://www.jboss.org/jbossesb"&gt;JBoss ESB&lt;/a&gt; versão 4.7 ou superior e a plataforma de g&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;erenciamento e monitoramento da JBoss conhecida como &lt;a href="http://www.jboss.org/jopr"&gt;JOPR&lt;/a&gt;, versão 2.3.1 ou superior. Se você de&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;seja possuir estas tecnologias a plataformas com o suporte e respaldo técnico da Red Hat&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt; [novamente a questão de SLA ;-)] você deve adquirir as subscrições do &lt;a href="http://www.jboss.com/products/platforms/soa/"&gt;SOA Platform&lt;/a&gt; 5.0 que contêm o ESB e do &lt;a href="http://www.jboss.com/products/jbosson/"&gt;JBoss Operations Network&lt;/a&gt; versão 2.3.1.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Entendendo o cenário, os SLA's e a arquit&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;etura da&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;&lt;span style="font-weight: bold; font-style: italic;"&gt; solução de demonstração&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;Tenho uma solução b&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;asead&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;a no JBoss ES&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;B que processa pedidos de contratos de seguros. Suscintamente falando, a soluçã&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;o rece&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;be&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt; estes pedidos d&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;e diferentes canais de transporte e de diferentes formatos de dados que&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt; vão desde documentos XML até mensagens baseadas em CSV lidas de um banco de dados relacio&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;nal. A idéia é qu&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;e estes pedidos s&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ejam convertidos em um formato comum para o ESB, ou seja, o p&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;adrão &lt;/span&gt;&lt;a style="font-family: verdana;" href="http://www.eaipatterns.com/CanonicalDataModel.html"&gt;&lt;span style="font-style: italic;"&gt;Canonical Data Model&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:verdana;"&gt; e que uma vez que a mensagem esteja neste formato &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;padrão, ela seja &lt;/span&gt;&lt;a style="font-family: verdana;" href="http://www.eaipatterns.com/DataEnricher.html"&gt;&lt;span style="font-style: italic;"&gt;enriquecida&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:verdana;"&gt; com um punhado de regras de negócios que são disparadas a partir do software &lt;/span&gt;&lt;a style="font-family: verdana;" href="http://www.jboss.com/products/platforms/brms/"&gt;JBoss BRMS&lt;/a&gt;&lt;span style="font-family:verdana;"&gt; (Business Rules Management System). Estas regras vão destes regras sobre cálculo de riscos da aplicação da proposta, quanto a regras de aprovação da mesma e descontos promocianais&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; criados pela equipe de marketing da empresa.&lt;/span&gt;&lt;/span&gt;  &lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Uma vez que a proposta esteja correta&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;mente processada e seja aprovada, ela é transformada numa cotação e é envia&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;da a diferentes ca&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;n&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ais de transporte pa&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ra fins de notificação e finalização da transação do proc&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;esso de&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; negócio, canais estes que vão desde filas JMS até tabelas de bancos de dados. &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;A figura abaixo sintetiza este cenário do ponto de vista do barramento de serviços:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_xvsPdhzsV0E/TAkz8xd9TgI/AAAAAAAAA00/CgCglPBOw4U/s1600/topologia.png"&gt;&lt;img style="cursor: pointer; width: 445px; height: 239px;" src="http://4.bp.blogspot.com/_xvsPdhzsV0E/TAkz8xd9TgI/AAAAAAAAA00/CgCglPBOw4U/s200/topologia.png" alt="" id="BLOGGER_PHOTO_ID_5478967540837076482" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Este processo de negócio supostamente foi contratado por um cliente da seguradora que deseja que alguns SLA's sejam definidos &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;e resguardados contratualmente entre a seguradora e o tal cliente. Os SLA's definidos para este processo &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;de negócio foram:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;SLA_1&lt;/span&gt;: Através do canal SOAP, o número de mensagens não processadas não deverá ser superior à 5.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;SLA_2&lt;/span&gt;: Através do canal FILE, o tempo de processament&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;o&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;não deverá extrapolar 5 segundos.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;SLA_3&lt;/span&gt;: Independente do canal de transporte (S&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;MS&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;, SOAP, S&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;MTP ou FILE), a cada 10 pedidos de seguro processados, um gerente de vendas do cliente&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; dev&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;e&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;rá ser notificado via e-mail.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Repare que para cada SLA demos um apelido para &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;que pos&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;samos referenciá-los futuramente no artigo. Grave estes apelidos para futura conferência do seu significado.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; A idéia é que possamos usufruir da excelente integração entre o JBoss ESB e o JBoss Operations Network para acomodar estes SLA's. As estratégias de configuração aqui &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;apresentad&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;as p&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;oder&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ão ser personalizadas para outros cenários de negócio e não se restringe somente a e&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ste cenário apresentado, uma vez que as métricas, alertas e eventos do JBoss ESB são tratados &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;pelo JBoss&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; O&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;N &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;de forma genérica.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Atendendo o "SLA_1" usando o JBoss Operations Network&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Para atender o SLA_1, temos que primeiramente co&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;n&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;figurar o JBoss ON para que ele gerencie automaticamente o uso médio da métrica "Overall Bytes Failed" que determina a quantidade de bytes que falharam na hora do processamento de uma mensagem. Isso é importante porque além da notificação sobre quanto o SLA é comp&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;rometid&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;o&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;, devemos poder proativamente observar o andamento deste tipo de cenário nas pla&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;taformas de e&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;xecução.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Para isso, acesse o serviço do JBoss ESB que será monitorado, e clique na métrica &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;"Overall Bytes Failed" existente na guia "monitor&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;" do JBoss ON.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_xvsPdhzsV0E/TAlCcGdpbeI/AAAAAAAAA08/X3e9YmtX6fM/s1600/fig1.JPG"&gt;&lt;img style="cursor: pointer; width: 200px; height: 97px;" src="http://1.bp.blogspot.com/_xvsPdhzsV0E/TAlCcGdpbeI/AAAAAAAAA08/X3e9YmtX6fM/s200/fig1.JPG" alt="" id="BLOGGER_PHOTO_ID_5478983472211652066" border="0" /&gt;&lt;/a&gt;    &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_xvsPdhzsV0E/TAlChg2Zs7I/AAAAAAAAA1E/0Dggr8OmlvA/s1600/fig2.JPG"&gt;&lt;img style="cursor: pointer; width: 200px; height: 106px;" src="http://3.bp.blogspot.com/_xvsPdhzsV0E/TAlChg2Zs7I/AAAAAAAAA1E/0Dggr8OmlvA/s200/fig2.JPG" alt="" id="BLOGGER_PHOTO_ID_5478983565194146738" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;Ao clicar na métrica, você será encaminhado para a visualização do gráfico de utilização da métrica. utilizando a barra de r&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;olagem do seu navegador, desça até o final da página onde você verá uma seção chamada "Metric Baseline &amp;amp; Expected Range". Nesta seção, você pod&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;e verificar e calcular qual é a taxa de utilização média da métrica. Clique no link "Change Value" para solicitar a computação da métrica e na sequência, clique em "Save Value".&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_xvsPdhzsV0E/TAlEjCPgvoI/AAAAAAAAA1c/rSBoHtIYhCk/s1600/fig3.JPG"&gt;&lt;img style="cursor: pointer; width: 200px; height: 102px;" src="http://4.bp.blogspot.com/_xvsPdhzsV0E/TAlEjCPgvoI/AAAAAAAAA1c/rSBoHtIYhCk/s200/fig3.JPG" alt="" id="BLOGGER_PHOTO_ID_5478985790360960642" border="0" /&gt;&lt;/a&gt;   &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_xvsPdhzsV0E/TAlEW2Hn8ZI/AAAAAAAAA1U/--fLWhALF8g/s1600/fig4.JPG"&gt;&lt;img style="cursor: pointer; width: 200px; height: 89px;" src="http://2.bp.blogspot.com/_xvsPdhzsV0E/TAlEW2Hn8ZI/AAAAAAAAA1U/--fLWhALF8g/s200/fig4.JPG" alt="" id="BLOGGER_PHOTO_ID_5478985580948222354" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;Agora que temos nosso baseline definido e marcado para 0 bytes, podemos criar um alerta que monitore as mensagens com erros de processamento. Para isso, irei criar um alerta para o se&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;rviço cujo endpoint é baseado em SOAP. Basta clicar na guia "Alert" e &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;definir um novo alerta usando as configurações da interface. Crie um alerta baseado na métrica "Overall Bytes Failed" e diga que você quer "tolerar" apenas 5% do baseline, ou seja, a primeira mensagem com falha já&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; irá alertar sobre mal funcionamento do processo de negócio e do SLA_1.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_xvsPdhzsV0E/TAlGufOzw7I/AAAAAAAAA1k/S91xagtisHQ/s1600/fig1.JPG"&gt;&lt;img style="cursor: pointer; width: 200px; height: 102px;" src="http://4.bp.blogspot.com/_xvsPdhzsV0E/TAlGufOzw7I/AAAAAAAAA1k/S91xagtisHQ/s200/fig1.JPG" alt="" id="BLOGGER_PHOTO_ID_5478988186144457650" border="0" /&gt;&lt;/a&gt;   &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_xvsPdhzsV0E/TAlGxhaQSVI/AAAAAAAAA1s/2LwGHw3a-JE/s1600/fig2.JPG"&gt;&lt;img style="cursor: pointer; width: 200px; height: 104px;" src="http://2.bp.blogspot.com/_xvsPdhzsV0E/TAlGxhaQSVI/AAAAAAAAA1s/2LwGHw3a-JE/s200/fig2.JPG" alt="" id="BLOGGER_PHOTO_ID_5478988238268942674" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Atendendo o "SLA_2" usando o JBoss Operations Network&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;O SLA_2 é um pouco mais exigente e por isso, merece uma configuração um tanto quanto diferente. Como trata-se de um SLA relacionado a performance, temos que configurar além do JBoss ON, o nosso barramento de serviços. O JBoss ESB a partir &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;d&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;a&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; versão 4.7 possui um recurso super interessante relacionado a monitoramento de serviços. Em suma, você pode definir tanto em nível de serviço quanto em níve de ação d&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;o pipeline dois tipos &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;de verif&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ica&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ções: Tempo de processamento e tamanho da mensagem.&lt;br /&gt;&lt;br /&gt;Para atender o SLA_2, eu defini no meu módulo de&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; configur&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ação do ESB (jboss-esb.xml) a propriedade "AlertTimeThreshold" &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;definindo seu valor para 5 segundos. Com isso, toda vez que aquele serviço receber uma mensagem não importando o canal de entrada (SOAP, JMS, File, FTP) ele irá cronometrar o tempo de processamento da mensagem, ou seja,&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; o tempo entre a data e hora de entrada da mensagem no barramento e o final da execução de todo o pi&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;peline definido para o serviço, isto é, sua cadeia de ações. Uma estratégia também muito &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;interessante é que isso pode ser feito em nível de ação. Você pode por exemplo, cronometrar o tempo que um&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;a transformação de SOAP para JAVA leva, o que impacta diretamente no tempo de processamento total do serviço.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_xvsPdhzsV0E/TAlJa2crjlI/AAAAAAAAA10/PxQE6qvNs5Y/s1600/figSettingSLA.png"&gt;&lt;img style="cursor: pointer; width: 200px; height: 108px;" src="http://2.bp.blogspot.com/_xvsPdhzsV0E/TAlJa2crjlI/AAAAAAAAA10/PxQE6qvNs5Y/s200/figSettingSLA.png" alt="" id="BLOGGER_PHOTO_ID_5478991147314155090" border="0" /&gt;&lt;/a&gt;   &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_xvsPdhzsV0E/TAlJeyrHy1I/AAAAAAAAA18/9gBs5Yq1pSs/s1600/figSettingSLA_Action.png"&gt;&lt;img style="cursor: pointer; width: 200px; height: 108px;" src="http://2.bp.blogspot.com/_xvsPdhzsV0E/TAlJeyrHy1I/AAAAAAAAA18/9gBs5Yq1pSs/s200/figSettingSLA_Action.png" alt="" id="BLOGGER_PHOTO_ID_5478991215020460882" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;As configurações de threshold funcionam da seguinte forma: Quando o JBoss ESB verifica que o "SLA" definido foi quebrado, ele cria uma entrada no MBean "MessageAlerts" que está disponivel dentro do JBoss ESB. Além disso, ele cria uma entrada no log de eventos do servidor usando a configuração padrão do Log4J. Com isso, o JBoss ON através do seu plugin de integração, pode interceptar estes eventos e gerar eventos específicos do JBoss ON, possibilitando assim, a criação e geração de alertas de SLA. Para que o JBoss ON possa interceptar os eventos gerados pelo JBoss ESB, você deve habilitar a leitura de eventos no JBoss ON. Para isso, clique no servidor e acesse a guia "Connection" disponivel no link "Inventory":&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_xvsPdhzsV0E/TAlLOJz5ilI/AAAAAAAAA2M/rPdBBNYCujY/s1600/figEnablingEvents_2.png"&gt;&lt;img style="cursor: pointer; width: 200px; height: 125px;" src="http://1.bp.blogspot.com/_xvsPdhzsV0E/TAlLOJz5ilI/AAAAAAAAA2M/rPdBBNYCujY/s200/figEnablingEvents_2.png" alt="" id="BLOGGER_PHOTO_ID_5478993128196770386" border="0" /&gt;&lt;/a&gt;      &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_xvsPdhzsV0E/TAlLIjN72wI/AAAAAAAAA2E/Impb5NGgi04/s1600/figEnablingEvents.png"&gt;&lt;img style="cursor: pointer; width: 200px; height: 125px;" src="http://1.bp.blogspot.com/_xvsPdhzsV0E/TAlLIjN72wI/AAAAAAAAA2E/Impb5NGgi04/s200/figEnablingEvents.png" alt="" id="BLOGGER_PHOTO_ID_5478993031937645314" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_xvsPdhzsV0E/TAlOqA_BxSI/AAAAAAAAA2U/6sQu2qm8XH4/s1600/fig3.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 200px; height: 119px;" src="http://1.bp.blogspot.com/_xvsPdhzsV0E/TAlOqA_BxSI/AAAAAAAAA2U/6sQu2qm8XH4/s200/fig3.JPG" alt="" id="BLOGGER_PHOTO_ID_5478996905398748450" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Uma vez que você tenha definido a configuração dos eventos, você pode criar um alerta baseado no evento usando a mesma estratégia usada anteriormente: Clicar na guia "Alert" e definir um novo alerta. Repare q&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ue para a definição do alerta é necessário definir que o filtro de expressão deve ser igual ou semelhante a "MessageAlert", nome do MBean que será escrito no log d&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;o servidor. A cada vez que uma nova entrada no log for escrita&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;, o agente do JBoss ON irá notificar sobre um evento do JBoss ESB, que será avaliado na expressão do alerta. Caso esta expressão s&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;eja avaliada como verdadeira, então um evento do JBoss ON será gerado e o alerta será executado. No caso especial do SLA_2, eu configurei meu alerta para notificar um &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;administrador de sistema que poderá realizar alguns diagnosticos no JBoss ESB e na sua estrutura geral de hardware e software, tudo isso, usando somente o JBoss ON.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Atendendo o "SLA_3" usando o JBoss Operations Network&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Para atender o SLA_3 é muito simples: Basta c&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;riar um aler&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ta no JBoss ON que depois de executar deverá zerar o contador da métrica "Message Count". O gerente de vendas deverá estar configurado no JBoss ON como um&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; usuário de credenciais limitadas e que somente receberá notificações:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_xvsPdhzsV0E/TAlSO3GrpUI/AAAAAAAAA2s/yZA0YrNtc80/s1600/fig4.JPG"&gt;&lt;img style="cursor: pointer; width: 200px; height: 114px;" src="http://2.bp.blogspot.com/_xvsPdhzsV0E/TAlSO3GrpUI/AAAAAAAAA2s/yZA0YrNtc80/s200/fig4.JPG" alt="" id="BLOGGER_PHOTO_ID_5479000836936541506" border="0" /&gt;&lt;/a&gt;      &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_xvsPdhzsV0E/TAlRhnYUbNI/AAAAAAAAA2k/SpN6xzdQ5bI/s1600/fig5.JPG"&gt;&lt;img style="cursor: pointer; width: 200px; height: 120px;" src="http://2.bp.blogspot.com/_xvsPdhzsV0E/TAlRhnYUbNI/AAAAAAAAA2k/SpN6xzdQ5bI/s200/fig5.JPG" alt="" id="BLOGGER_PHOTO_ID_5479000059621436626" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;OK, tecnicamente estou convencido, mas e qual o diferencial?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Muitos leitores do blog e amigos em geral porventura me questionam sobre qual a vantagem de se estabelecer uma arquitetura orientada a serviços baseadas em tecnologias JBoss. Bem, costumo começar a responder falando sobre a questão de custo: Se você não optar por contratar as subscrições da Red Hat para ter facilidades como garantia de continuidade da tecnologia e o suporte técnico, o custo é literalmente zero, ou melhor, alguns centavos referentes ao custo do download do software a partir dos repositórios do JBoss.ORG.&lt;br /&gt;&lt;br /&gt;Mesmo que você opte por contratar a Red Hat para ter suporte e todos os beneficios da subscrição, o custo ainda sim é super mais barato que as demais soluções. Acima de tudo, o custo indireto baseado em subscrições Red Hat é infinitamente mais vantajoso do que as demais soluções baseadas em software licençiado, uma vez que você não têm &lt;a href="http://en.wikipedia.org/wiki/Capital_expenditure"&gt;CAPEX&lt;/a&gt;, apenas &lt;a href="http://en.wikipedia.org/wiki/Operating_expense"&gt;OPEX&lt;/a&gt;, ou seja, você paga e recupera o valor pago a medida que usa o suporte ou atualiza o produto a partir da Red Hat.&lt;br /&gt;&lt;br /&gt;Outro ponto importante é a liberdade de escolha: Toda tecnologia JBoss é baseada em padrões abertos (JCP, OASIS, W3C, WS-I) e totalmente open-source baseado em LGPL, dando você a garantia de que não ocorrerá vendor Lock-In, nem mesmo impossibilidade de troca do fornecedor do software. Se você quiser mudar de tecnologia e arquitetura por qualquer motivo, sinta-se a vontade para fazê-lo que seu investimento não será perdido.&lt;br /&gt;&lt;br /&gt;Dito isso, outras soluções do mercado como &lt;a href="http://www.google.com.br/url?q=http://www.oracle.com/technology/products/integration/service-bus/index.html&amp;amp;sa=X&amp;amp;ei=4VUJTJ_lAoWKlwfBmLykDg&amp;amp;ved=0CB8QzgQoATAA&amp;amp;usg=AFQjCNEZeQplbEeWyl1el3S6DYVGbEUwSw"&gt;Oracle Service Bus&lt;/a&gt; e &lt;a href="http://www.softwareag.com/corporate/products/wm/soagovernance/webmethods_esb/overview/default.asp"&gt;webMethods ESB&lt;/a&gt; fazem tecnicamente a mesma coisa que as soluções JBoss, mas, se você deseja menor custo e garantia de portabilidade do investimento, pergunte-se: Por quê não JBoss?&lt;br /&gt;&lt;br /&gt;Bons SLA's!&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8571396175573944921-2391281936361262961?l=architecture-journal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://architecture-journal.blogspot.com/feeds/2391281936361262961/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8571396175573944921&amp;postID=2391281936361262961' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8571396175573944921/posts/default/2391281936361262961'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8571396175573944921/posts/default/2391281936361262961'/><link rel='alternate' type='text/html' href='http://architecture-journal.blogspot.com/2010/06/monitoramento-de-slas-com-jboss-esb.html' title='Monitoramento de SLA&apos;s com JBoss ESB'/><author><name>Ricardo Ferreira</name><uri>http://www.blogger.com/profile/11930306647022714836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/-5T0r_5klxDA/Tn5CEvZpK0I/AAAAAAAABEg/MyTJuGi12ag/s220/ricardo-ferreira-Grande.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_xvsPdhzsV0E/TAkVpiWdlNI/AAAAAAAAA0s/qZoOqtCd2C8/s72-c/grafico.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8571396175573944921.post-5978043707062908746</id><published>2010-04-25T12:31:00.000-07:00</published><updated>2010-04-25T15:38:11.802-07:00</updated><title type='text'>Enviando Mensagens do JBoss ESB para um SGBDR</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;Entender como funciona um ESB não é dificil. Todo ESB precisa dar suporte a três operações básicas: Receber mensagens de diversos canais de transporte (InBound), processar a mensagem recebida realizando uma ou mais operações &lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;de transformações e enriquecimentos (Internal Processing) e rotear a mensagem recebida e processada p&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;ara diverentes tipos de canais de transporte (OutBound). Essa seria a síntese de qualquer implementação de ESB do mercado, e o que mudaria, seria como um dado ESB faria estes três p&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;assos.&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify; font-family: verdana;"&gt; &lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;Veremos neste post, como podemos trabalh&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;ar a parte de roteamento de mensagens para um banco de dadas SQL, ou seja, a realização de uma operação de OutBound da mensagem do barramento para um servidor de banco de dados compatível co&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;m ANSI/SQL. Para isso, iremos utilizar uma implementação customizada que criei &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;para o JBoss ESB, que oferece recursos mais avançados do que as atuais estratégias do JBoss ESB, a &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;sab&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:verdana;"&gt;er, o &lt;a href="http://www.redhat.com/docs/en-US/JBoss_SOA_Platform/4.2.CP04/html/SOA_ESB_Message_Action_Guide/section-Notifier-NotifySQLTable.html"&gt;NotifySQLTable&lt;/a&gt; da action Notifier, e os &lt;a href="http://www.smooks.org/mediawiki/index.php?title=V1.3:Smooks_v1.3_User_Guide#Routing_to_a_Database_using_SQL"&gt;cartuchos de SQL&lt;/a&gt; do Smooks.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Qual os problemas das implementações atuais?&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;As implementações atuais do JB&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;oss ESB para OutBound de mensagens para bancos SQL sofrem de algumas limitações de utilização e usabilidade. O NotifySQLTable por exemplo, possui diversas limitações técnicas como o fato de oferecer&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; som&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ente a operação de INSERT para o usuário, e o fato de oferecer somente a conexão via JDBC (DriverManager) e não a possibilidade de conexão via pools de conexão JDBC o que implica diretamente em divers&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;as considerações de escalabilidade e robustez das soluções. Além&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; disso, todas as informações que o componente manda para o banco de dados são e&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;staticamente definidos no XML &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;do JBoss ESB,&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; tornando o seu uso pouco viável, uma vez que as informações que deverão ser enviadas para&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; o banco de dados constarão no pipeline do serviço em tempo de execução.&lt;br /&gt;&lt;br /&gt;O cartucho de SQL do Smooks em contra-partida resolve algumas das limitações do NotifySQLTable, como a de oferecer a possibilidade de conexão ao ban&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;co de dados via um pool de conexões JDBC. Porém ele ainda sim deixa a desejar em diversos pontos, como o de obrigar aos integradores de soluções a terem que escreve&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;r sentenças SQL b&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;aseadas em atributos dos beans transformados via Smooks, o que torna o desenvolvimento das soluções muito mais propenso a erros. Além disso, você deverá considerar que todos os dados que serão enviado&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;s ao banco de dados estarão no contexto do Smooks, ou seja, a sessão do Smooks para uma dada ação de transformação. Na maioria dos casos, os integradores de soluções desejam compor d&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ados &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;oriundos de enriquecimentos que se encontram dentro do pipeline da mensagem, fazendo co&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;m que o uso do cartucho do Smooks tenha como pré-condição o redese&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;nho das mensagens que serão enviadas para o ESB. Não menos importante, existe a questão moral de se utilizar uma transformação Smooks só para ter o comportamento de OutBound para um banco SQL. Além de ferir o design da solução, isso torna seu uso muito mais complicado do que o simples e puro, uso de uma action do ESB.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;SQLRouter: Solução "Simples Ass&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;im" para roteament&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;o de mensagens&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Um dos recursos mais poderosos e ao mesmo tempo simples do&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; JBoss ESB são seus routers. Além dos routers de endereçamento (ContentBasedRoute&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;r, &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;M&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;essageFilter, MessagePersister) existem os routers que encaminham as mensagens do pipeline para &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;algum canal de transporte específico, como o JMSRouter, o EmailRouter e o HTTPRouter. Trabalhando com o JBoss ESB por longos anos, sempre senti falta de um router que pegasse uma mensagem do ESB (ou fragmentos dela) e enviasse a um a tabela de um banco de dados SQL. Na maioria das vezes, tive que escrever uma action que fizesse isso para um cenário particular com pouco ou nenhum reuso da lógica de roteamento da mensagem.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Casos que justifiquem um router para SQL não faltam: De repente você precisa que o ESB sinalize uma aplicação via seu banco de dados&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;, e esta sinalizaçã&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;o pode ser a simples inserção de um registro, a atualização de um registro existente ou mesmo a remoção de um registro da tabela. Outro caso interessante é a de persistência de dados. Um&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;a me&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;nsagem do ESB pode conter parte dos dados que precisa ser enviado a um Web Service .NET,&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;outra parte precisa ser enviada a um endpoint FTP e outra parte precisa atualizar uma tabela de banco de dados, porém os três casos forma uma única operação atômica de persistência (uma transação) que precisa ser coordenada pelo pipeline de um serviço.&lt;br /&gt;&lt;br /&gt;Para estes casos, eu criei um SQLRouter, que além de acomodar os cenários descritos acima, resolve, de forma bem simples e didática, as limitações das implementações atuais de OutBound SQL do JBoss ESB. Atualmente não tenho esta implementa&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;çã&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;o em nenhum projeto open-source, mas assim que estiver eu posto aqui o link para &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;download gratuito.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; Neste m&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;eio tempo, se você precisar deste roteador, mande uma mensagem para jricardoferreira (at) gmail.com que disponibilizo para você ;-)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Um primeiro exemplo usando o SQLRouter&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Considere uma tabela de banco de dados para armazenamento de informações sobre clientes. A tabela deverá ter a seguinte estrutura:&lt;br /&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/378685.js?file=tabCliente.sql"&gt;&lt;/script&gt;Para fins de testes, crie esta tabela num banco de dados MySQL, PostgreSQL ou Firebird, Para inserir um registro nesta tabela através do&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; JBoss &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ESB,&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; você po&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;deria simplesmente declarar a seguinte action no seu pipeline:&lt;br /&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/378688.js?file=sqlRouterAction_1.xml"&gt;&lt;/script&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Repare que a action estabelece uma conexão com o banco de dados via JDBC, e com base nas informações declaradas na propriedade "col&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;umns", cria uma senteça SQL do tipo INSERT, conforme definido na propriedade "operation-type". &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Agora imagine que você precisa fazer a mesma operação, só que não quer conectar no banco de dados via JDBC puro, e sim, quer conectar usando um pool de conexões previamente configurado que&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; deve ser acessado através do nome JNDI "java:/sqlRouterDemoDS". Você poderia configurar o SQLRouter da seguinte forma:&lt;br /&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/378692.js?file=sqlRouterAction_2.xml"&gt;&lt;/script&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Outro recurso interessante deste SQLRo&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;uter é que o roteamento não deve ser somente uma operação de INSERT. Caso seja necessário, você pode c&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;riar as operações de UPDATE e DELETE apenas mudando a propriedade "operation-type".&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; Opcionalmente também, você pode visualizar no log do JBoss ESB a instrução SQL gerada, habilitado a propriedade "show-sql" para "true".&lt;br /&gt;&lt;br /&gt;Outro ponto importante do SQLRou&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ter é &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;que ele possibilidade que você escreva valores em colunas das tabelas oriundas da mensagem do pipeline. Nos exemplos anteriores, repare que sempre definimos estaticamente os valores a serem escritos nas colunas no arquivo de configuração do módulo ESB. Se quiséssemos recuperar estes valores da mens&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;agem do pipeline, poderíamos fazê-lo da seguinte forma:&lt;br /&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/378701.js?file=sqlRouterAction_3.xml"&gt;&lt;/script&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Repare que as colunas "PRIMEIRO_NOME" e "ULTIMO_NOME" &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;terão seus valores escritos a partir dos objetos que estiverem na mensagem c&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;om os ID's "primeiroNomeParam" e "ultimoNomeParam" respectivamente. Para estabelecer estes valor&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;es, você pode gravar na mensagem usando a API de actions do JBoss ESB da seguinte forma:&lt;br /&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/378705.js?file=sampleProcess.java"&gt;&lt;/script&gt;Dependendo do tipo de valor que você configura na&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; propriedade "operation-type" os valores das tags "column" serão usados de formas difere&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ntes. &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Se você habilita por exemplo uma operação de INSERT, tudo que for declarado nas tags "column" serão usado&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;s para inserir valores nos campos de uma tabela. Por exemplo, usando a operação de INSERT, a seguinte instrução SQL será gerada:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_xvsPdhzsV0E/S9Squm17CVI/AAAAAAAAAz8/oAdvS3daBY8/s1600/fig1.PNG"&gt;&lt;img style="cursor: pointer; width: 200px; height: 60px;" src="http://4.bp.blogspot.com/_xvsPdhzsV0E/S9Squm17CVI/AAAAAAAAAz8/oAdvS3daBY8/s200/fig1.PNG" alt="" id="BLOGGER_PHOTO_ID_5464179965584673106" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Caso você precisa gerar um UPDATE numa tabela de banco de dados, altere a propriedade "operation-type" para "UPDATE" e para os campos que você deseja atualizar, habilite o atributo "update" nas colunas desejadas. As demais colunas que não forem s&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;o&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;frer atualização irão compor a cláusula WHERE da instrução SQL gerada. Caso nenhuma coluna "não update" seja definida, nenhuma cláusula WHERE será gerada. Eis um exemplo:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_xvsPdhzsV0E/S9Ss6U7IyHI/AAAAAAAAA0E/Ag_lC1qlCqY/s1600/fig2.png"&gt;&lt;img style="cursor: pointer; width: 200px; height: 64px;" src="http://4.bp.blogspot.com/_xvsPdhzsV0E/S9Ss6U7IyHI/AAAAAAAAA0E/Ag_lC1qlCqY/s200/fig2.png" alt="" id="BLOGGER_PHOTO_ID_5464182365956393074" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;Para gerar um DELETE na tabela de banco de dados é mais simples ainda: Basta alterar a propriedade "operation-type" para "DELETE" e pronto. Caso você deseje filtrar a remoção gerando uma cláusula WHERE insira uma ou mais propriedades do tipo "column". Cada entrada de "column" se tornará uma condição da cláusula WHERE. Outro recurso interes&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;sante do SQLRouter para quando você deseja fazer um UPDATE ou DELETE, é que você pode estipular condições para a cláusula WHERE usando operadores SQL. O exemplo abaixo ativa todos os clientes que se chamarem "Ricardo" e que tenham CPF maior que zero:&lt;br /&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/378728.js?file=sqlRouterAction_4.xml"&gt;&lt;/script&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Um exemplo do inicio ao fim u&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;sando SQLRouter&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Agora que exploramos alguns dos detalhes por trás do SQLRouter, vamos ver como utilizá-lo num exemplo concreto. Para este exemplo, considere os seguintes componentes de software:&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;ul  style="text-align: justify;font-family:verdana;"&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;MySQL Server 5.1&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;JBoss ESB 4.7&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;MySQL JDBC Driver&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Eclipse + JBoss Tools 3.1&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;JDK 1.6+&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;A idéia do exemplo é que o ESB monitore um diretório compartilhado da rede procurando por um arquivo de processamento de pedido no format&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;o XML. Assim que tal arquivo for escrito no diretório, o ESB irá pegar os dados referente a um &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;cliente e g&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ravar no banco de dados fazendo um INSERT. Considere o seguinte módulo do ESB para configuração:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_xvsPdhzsV0E/S9SzRoaVmdI/AAAAAAAAA0M/8WcMTUyx5Wo/s1600/fig3.png"&gt;&lt;img style="cursor: pointer; width: 200px; height: 102px;" src="http://2.bp.blogspot.com/_xvsPdhzsV0E/S9SzRoaVmdI/AAAAAAAAA0M/8WcMTUyx5Wo/s200/fig3.png" alt="" id="BLOGGER_PHOTO_ID_5464189363394288082" border="0" /&gt;&lt;/a&gt;   &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_xvsPdhzsV0E/S9SzVdaswXI/AAAAAAAAA0U/cUdpOI7ePA8/s1600/fig4.png"&gt;&lt;img style="cursor: pointer; width: 200px; height: 106px;" src="http://4.bp.blogspot.com/_xvsPdhzsV0E/S9SzVdaswXI/AAAAAAAAA0U/cUdpOI7ePA8/s200/fig4.png" alt="" id="BLOGGER_PHOTO_ID_5464189429162492274" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_xvsPdhzsV0E/S9SzYYtB5XI/AAAAAAAAA0c/xEMAlFsg9IY/s1600/fig5.png"&gt;&lt;img style="cursor: pointer; width: 200px; height: 158px;" src="http://1.bp.blogspot.com/_xvsPdhzsV0E/S9SzYYtB5XI/AAAAAAAAA0c/xEMAlFsg9IY/s200/fig5.png" alt="" id="BLOGGER_PHOTO_ID_5464189479436805490" border="0" /&gt;&lt;/a&gt;   &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_xvsPdhzsV0E/S9SzbHpx_DI/AAAAAAAAA0k/D0CotmSjc64/s1600/fig6.png"&gt;&lt;img style="cursor: pointer; width: 200px; height: 160px;" src="http://4.bp.blogspot.com/_xvsPdhzsV0E/S9SzbHpx_DI/AAAAAAAAA0k/D0CotmSjc64/s200/fig6.png" alt="" id="BLOGGER_PHOTO_ID_5464189526399384626" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;A descrição completa do arquivo de configuração do módulo ESB encontra-se textualmente &lt;a href="http://gist.github.com/378741"&gt;aqui&lt;/a&gt;. Já o arquivo de configuração do Smooks que transforma de XML para Java pode ser adquirido &lt;a href="http://gist.github.com/378790"&gt;aqui.&lt;/a&gt; Para testar o exemplo, crie um arquivo XML no diretório especificado no arquivo de configuração como mostrado abaixo:&lt;br /&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/378742.js?file=cliente.xml"&gt;&lt;/script&gt;Você deverá também configurar um pool de conexões no JBoss ESB para que ele aponte para seu banco de dados de testes. Se você é um usuário de JBoss, isso não será um problema. Qualquer banco de dados pode ser usado para testes, uma vez que o SQLRouter fala com o banco de dados via JDBC puro.&lt;br /&gt;&lt;br /&gt;Boas Integrações ;-)&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8571396175573944921-5978043707062908746?l=architecture-journal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://architecture-journal.blogspot.com/feeds/5978043707062908746/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8571396175573944921&amp;postID=5978043707062908746' title='3 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8571396175573944921/posts/default/5978043707062908746'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8571396175573944921/posts/default/5978043707062908746'/><link rel='alternate' type='text/html' href='http://architecture-journal.blogspot.com/2010/04/enviando-mensagens-do-jboss-esb-para-um.html' title='Enviando Mensagens do JBoss ESB para um SGBDR'/><author><name>Ricardo Ferreira</name><uri>http://www.blogger.com/profile/11930306647022714836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/-5T0r_5klxDA/Tn5CEvZpK0I/AAAAAAAABEg/MyTJuGi12ag/s220/ricardo-ferreira-Grande.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_xvsPdhzsV0E/S9Squm17CVI/AAAAAAAAAz8/oAdvS3daBY8/s72-c/fig1.PNG' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8571396175573944921.post-1234131843030099767</id><published>2010-04-23T14:12:00.000-07:00</published><updated>2010-04-23T15:13:48.002-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Red Hat'/><category scheme='http://www.blogger.com/atom/ns#' term='Eventos'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><title type='text'>Evento JBoss In Bossa: Não Perca!</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Dias 07 e 08 de Maio acontecerá o maior evento de JBoss do Brasil dos últimos tempos. Serão dois dias de informações sobre tecnologias JBoss que estão sendo usados no Brasil e no mundo. É uma oportunidade única para você ficar por dentro sobre o que acontece no mundo Java e sobre os principais projetos open-source da Red Hat / JBoss.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://edgarsilva.com.br/wp-content/uploads/2010/04/aquecendo2010.png"&gt;&lt;img style="cursor: pointer; width: 670px; height: 510px;" src="http://edgarsilva.com.br/wp-content/uploads/2010/04/aquecendo2010.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Este evento terá um formato diferenciado. O dia 07 será reservado para workshops do tipo "hands-on" que irá capacitar os congressistas em vários dos assuntos que serão discutidos no dia de palestras. Neste caso, você terá os especialistas da JBoss do Brasil e autoridades do mundo Java ao seu dispor para que você aprenda praticando e tire suas dúvidas sobre os assuntos abordados. O dia 08 será voltado exclusivamente para as palestras que irão cobrir os assuntos mais interessantes do mundo atual, desde frameworks de desenvolvimento &lt;a href="http://seamframework.org/"&gt;Web&lt;/a&gt;, passando por questões de &lt;a href="http://www.jboss.org/gatein"&gt;portais&lt;/a&gt; e &lt;a href="http://www.jboss.org/jbossesb"&gt;EAI&lt;/a&gt;, chegando a informações sobre as novidades do &lt;a href="http://www.jboss.org/jbossas"&gt;JBoss Application Server&lt;/a&gt;, &lt;a href="http://www.jboss.com/products/jbosson/"&gt;JON&lt;/a&gt; /&lt;a href="http://www.jboss.org/jopr"&gt; JOPR&lt;/a&gt; e arquiteturas baseadas em CEP com &lt;a href="http://www.jboss.org/drools/drools-fusion.html"&gt;Drools Fusion&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Sem dúvida, serão dois dias de muita informação e capacitação, onde você terá a oportunidade de estar por dentro das principais tecnologias do mundo JBoss e aumentar ainda mais sua rede de relacionamentos profissionais ;-)&lt;br /&gt;&lt;br /&gt;Garanta já sua vaga: &lt;a href="http://www.jbossinbossa.com.br/2010/index.htm"&gt;http://www.jbossinbossa.com.br/2010/index.htm&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8571396175573944921-1234131843030099767?l=architecture-journal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://architecture-journal.blogspot.com/feeds/1234131843030099767/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8571396175573944921&amp;postID=1234131843030099767' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8571396175573944921/posts/default/1234131843030099767'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8571396175573944921/posts/default/1234131843030099767'/><link rel='alternate' type='text/html' href='http://architecture-journal.blogspot.com/2010/04/evento-jboss-in-bossa-nao-perca.html' title='Evento JBoss In Bossa: Não Perca!'/><author><name>Ricardo Ferreira</name><uri>http://www.blogger.com/profile/11930306647022714836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/-5T0r_5klxDA/Tn5CEvZpK0I/AAAAAAAABEg/MyTJuGi12ag/s220/ricardo-ferreira-Grande.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8571396175573944921.post-7449361214096212332</id><published>2010-03-12T13:28:00.000-08:00</published><updated>2010-03-13T09:37:25.581-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Red Hat'/><category scheme='http://www.blogger.com/atom/ns#' term='Messaging'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss ESB'/><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='ESB'/><title type='text'>Integrando MRG Messaging e o JBoss ESB</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_xvsPdhzsV0E/S5qzCPhPewI/AAAAAAAAAzU/vwLixXu2qTY/s1600-h/redhat.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 50px; height: 50px;" src="http://4.bp.blogspot.com/_xvsPdhzsV0E/S5qzCPhPewI/AAAAAAAAAzU/vwLixXu2qTY/s200/redhat.png" alt="" id="BLOGGER_PHOTO_ID_5447863550365104898" border="0" /&gt;&lt;/a&gt;&lt;span style="font-family: verdana;font-family:verdana;font-size:85%;"  &gt;Suponha que você tenha um componente EJB (um Stateless Session Bean) que forneça alguma funcionalidade de negócio&lt;/span&gt;&lt;span style="font-family: verdana;font-family:verdana;font-size:85%;"  &gt; que de&lt;/span&gt;&lt;span style="font-family: verdana;font-family:verdana;font-size:85%;"  &gt;va ser ac&lt;/span&gt;&lt;span style="font-family: verdana;font-family:verdana;font-size:85%;"  &gt;essada por diversos canais de transporte. Conforme visto em outros artigos deste blog, usando um ESB você pode habilitar este componente EJB para escutar diversos tipos de canais que o mesmo suporte. No caso particular do JBoss ESB, você pode habilitar tal componente EJB criando um serviço interno que o encapsule (Usando por exemplo o adaptador EJBProcessor) e expô-lo usando qualquer um dos vários provedores que o mesmo suporte, tais como JMS, File, FTP, Socket, HTTP, SOAP, Hibernate, etc.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;Uma estratégia interessante que pode potencializar a habilitação de um componente EJB (ou qualquer outro tipo de componente do legado) é fazer com que o JBoss ESB escute um Broker AMQP. Fazendo isso, qualquer aplicação que enviar uma mensagem para o Broker terá&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; sua mensagem processada pelo JBoss ESB que pode, através dos seus mais div&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ersos adaptadores, entregar a mensagem a um canal particular. A principal vantagem desta estratégia, em oposição a&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; de que o próprio Broker entregue as mensagens, é que o ESB pode "preparar" a mensagem antes dela ser entregue. Como parte das funções de um ESB é a de fornecer mecanismos de transformação, você pode receber a mensagem pelo ESB, &lt;a href="http://eaipatterns.com/MessageTranslator.html"&gt;adaptá-la&lt;/a&gt; apropriadamente para ai sim, entregá-la ao canal de destino.&lt;br /&gt;&lt;br /&gt;Neste artigo, irei mostrar como isso pode ser feito&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; usando como Broker AMQP o &lt;a href="http://www.redhat.com/mrg/messaging/"&gt;MRG Messaging&lt;/a&gt;, e como ESB o &lt;a href="http://www.jboss.com/products/platforms/soa/"&gt;JBoss ESB&lt;/a&gt;. O exemplo será baseado num cenário de negócio não muito diferente dos vividos no dia a dia de diversas empresas do ramo de telecomunica&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ções.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Um cenário do mundo de telecomunicações&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Uma dada empresa provedora de serviços de internet, tv e telefonia possui uma plataforma baseada em JEE que cuida de todo o processo de aprovisiona&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;mento de clientes. Em particular, a mesma disponibiliza um componente EJB do stipo SL&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;SB que recebe um pedido de ativação de um ponto e configura-o junto as plataformas de engenharia da empresa.&lt;br /&gt;&lt;br /&gt;Uma dada aplicação feita em Python precisa solicitar a ativação de um ponto do cliente diretamente neste componente EJB, mas devido as diferenças e restrições tecnológicas, isso tornou-se um problema emergente. Para contornar o problema, a empresa resolveu utilizar as facilidades que a plataforma MRG Messaging oferece quanto aos aplicações Python &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;sobre conectividade. O programa Python foi modificado então para enviar uma requisição de ativação no formato XML para o Broker AMQP:&lt;br /&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/330825.js?file=programaPython.py"&gt;&lt;/script&gt;Repare que o programa, cria uma requisição baseada &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;em XML que contêm o código do assinante (o campo 'customerKey'), se o cliente deseja ponto de internet (o&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; campo 'internet'), se o cliente deseja ponto de TV (o campo 'tv') e se o cliente deseja ponto de telefone (o campo 'phone'). As informações sobre internet, tv e telefone são "flags" booleanas no estilo C++, onde "0" indica falso, e "1" indica verdadeiro. A idéia é que esta requisição seja transformada em uma requisição RMI/IIOP para o seguinte componente EJB:&lt;br /&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/330834.js?file=AprovisionadorBean.java"&gt;&lt;/script&gt;Este componente EJB, possui um método chamado "executarAtivacao" que aceita um único argumento: Uma instância da classe &lt;span style="font-style: italic;"&gt;com.redhat.mrg.demo.ty&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-style: italic;"&gt;pes.PedidoAtivacao&lt;/span&gt;. Segue abaixo o descritivo desta classe para conferência e implementação:&lt;br /&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/330838.js?file=PedidoAtivacao.java"&gt;&lt;/script&gt;Veremos então como fazer com que a mensagem XML recebida pelo Broker AMQP seja processada pelo JBoss ESB de forma que ela seja transformada e&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;m uma chamada ao componente EJB implantando num servidor de aplicações J2EE sob o nome JNDI &lt;span style="font-style: italic;"&gt;Aprovisionado&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-style: italic;"&gt;rBean/remote&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Configurando o JBoss ESB para escutar mensagens do MRG Messaging&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;O JBoss ESB integra de forma transparente com diversas soluçõ&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;es de mensageria, entre elas o ActiveMQ, JBoss Messaging, Websphere MQ e OracleAQ. Integrar com o MRG Messaging não poderia ser diferente. Basicamente, você deve configurar um provedor do tipo JMS que estabelece uma conexão com o MRG Messaging através de algum dos modelos de mensagens suportados (FanOut, Direct, Topic). Definido o provedor, você pode&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; dec&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;larar um ou mais buses (canais de transporte) que apontam para filas internas do Broker AMQP. Segue abaixo um módulo ESB criado para o cenário proposto:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_xvsPdhzsV0E/S5vL5JfPpdI/AAAAAAAAAzk/YzQZFNkXhy4/s1600-h/teste3.png"&gt;&lt;img style="cursor: pointer; width: 200px; height: 128px;" src="http://1.bp.blogspot.com/_xvsPdhzsV0E/S5vL5JfPpdI/AAAAAAAAAzk/YzQZFNkXhy4/s200/teste3.png" alt="" id="BLOGGER_PHOTO_ID_5448172356894696914" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_xvsPdhzsV0E/S5vNFeaxWfI/AAAAAAAAAzs/l9-u3hLnSt4/s1600-h/teste4.png"&gt;     &lt;img style="cursor: pointer; width: 200px; height: 122px;" src="http://4.bp.blogspot.com/_xvsPdhzsV0E/S5vNFeaxWfI/AAAAAAAAAzs/l9-u3hLnSt4/s200/teste4.png" alt="" id="BLOGGER_PHOTO_ID_5448173668183136754" border="0" /&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/330844.js?file=jboss-esb.xml"&gt;&lt;/script&gt;Repare que foi declarado um bus chamado "mrgChannel" que é vinculado ao serviço "AtivacaoProxyService" através do listener "mrgListener", conforme você pode ver na lista de listeners do serviço. Este serviço realiza duas transformações baseadas em Smooks (msgTrans1 e msgTrans2) que transformam a mensagem XML recebida (enviada pelo programa Python) na instância da classe &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-style: italic;"&gt;com.redhat.mrg.demo.types.PedidoAtivacao &lt;/span&gt;&lt;span&gt;que deverá ser passada como parâmetro ao EJB de aprovisionamento&lt;/span&gt;&lt;span style="font-style: italic;"&gt;. &lt;/span&gt;&lt;span&gt;O trabalho de invocar o componente EJB é feito pelo adaptador EJBProcessor, que realiza uma conexão JNDI com o servidor de aplicações e realiza um lookup do componente remoto para execução.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span&gt;A primeira transformação muda o XML recebido para um documento XML que define tipos mais próximos ao Java, mudando por exemplo os flags de utilização para instâncias válidas de um &lt;span style="font-style: italic;"&gt;java.lang.Boolean&lt;/span&gt;. A listagem abaixo mostra como esta transformação deve ser feita:&lt;br /&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/330857.js?file=smooks-trans1.xml"&gt;&lt;/script&gt;Foi utilizado para esta transformação um cartulho do tipo XSL que aplica um template XSLT no documento XML da mensagem. O restante da transformação fica por conta do script XSLT fornecido no cartucho. A segunda transformação é mais simples, ela apenas lê o documento XML resultante da primeira transformação e converte-o em um objeto Java:&lt;br /&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/330858.js?file=smooks-trans2.xml"&gt;&lt;/script&gt;Uma vez que a mensagem esteja no formato Java, isto é, como uma instância da classe &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-style: italic;"&gt;com.redhat.mrg.demo.types.PedidoAtivaca&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-style: italic;"&gt;o, &lt;/span&gt;&lt;span&gt;o adaptador EJBProcessor realiza uma invocação RMI/IIOP para o componente EJB hospedado num servidor de aplicações. Abaixo segue o screenshot da minha máquina, que mostra o exemplo sendo executado e a saída do console do servidor de aplicações:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_xvsPdhzsV0E/S5rAEFPa5PI/AAAAAAAAAzc/HhL0h8fORqk/s1600-h/teste.png"&gt;&lt;img style="cursor: pointer; width: 200px; height: 125px;" src="http://3.bp.blogspot.com/_xvsPdhzsV0E/S5rAEFPa5PI/AAAAAAAAAzc/HhL0h8fORqk/s200/teste.png" alt="" id="BLOGGER_PHOTO_ID_5447877875616900338" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span&gt;&lt;br /&gt;Boas Integrações ;-)&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8571396175573944921-7449361214096212332?l=architecture-journal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://architecture-journal.blogspot.com/feeds/7449361214096212332/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8571396175573944921&amp;postID=7449361214096212332' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8571396175573944921/posts/default/7449361214096212332'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8571396175573944921/posts/default/7449361214096212332'/><link rel='alternate' type='text/html' href='http://architecture-journal.blogspot.com/2010/03/integrando-mrg-messaging-e-o-jboss-esb.html' title='Integrando MRG Messaging e o JBoss ESB'/><author><name>Ricardo Ferreira</name><uri>http://www.blogger.com/profile/11930306647022714836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/-5T0r_5klxDA/Tn5CEvZpK0I/AAAAAAAABEg/MyTJuGi12ag/s220/ricardo-ferreira-Grande.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_xvsPdhzsV0E/S5qzCPhPewI/AAAAAAAAAzU/vwLixXu2qTY/s72-c/redhat.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8571396175573944921.post-2976012656057025625</id><published>2010-03-09T12:06:00.001-08:00</published><updated>2010-04-07T05:57:11.259-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Red Hat'/><category scheme='http://www.blogger.com/atom/ns#' term='Messaging'/><category scheme='http://www.blogger.com/atom/ns#' term='AMQP'/><title type='text'>Enterprise Messaging usando Red Hat MRG</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_xvsPdhzsV0E/S5k5S03UQPI/AAAAAAAAAx0/UwamNS1XEn4/s1600-h/redhat.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 50px; height: 50px;" src="http://3.bp.blogspot.com/_xvsPdhzsV0E/S5k5S03UQPI/AAAAAAAAAx0/UwamNS1XEn4/s200/redhat.png" alt="" id="BLOGGER_PHOTO_ID_5447448219872411890" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;O Red Hat MRG é uma pl&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ata&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;form&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;a integrada que combina alta performance, computação distribuída e mensageria in&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;teligente baseada em padrões de mercado. Em termos práticos, MRG sigifica: Messaging, Real-Tim&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;e e Gr&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;id. O MRG teve seu anúncio em dezembro de 2007, e seu lançamento oficial em 19 de junho &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;de&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; 2008, durante a conferência do Summit 2008. Atualmente ele se encontra na versão 1.2 e possui diversas melhorías da versão original, muitas delas voltadas a que&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;stões de segurança e certificação com plataformas de hardware e software. Neste artigo, irei mostrar como o Red Hat MRG funciona, em especial, a parte referente a mensageria baseada em AMQP. Mas antes disso, deixe-me apresentar, mesmo que suscintamente, a plataforma MRG como um todo.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Red Hat MRG&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;O MRG é uma proposta corporativa para trazer trê&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;s caraterísticas essenciais do mundo enterprise para dentro de um sistema operac&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ional que dispensa apresentações: Red Hat Enterprise Linux. A idéia básica é fazer co&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;m que o próprio sistema operacional RHEL tenha features relacionadas a mensageria, processamento e&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;m tempo real e processam&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ento de CPU distribuído. Com isso, clientes de diversos segmentos como telec&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;omunicações, finanças e governo podem realizar um &lt;span style="font-style: italic; font-weight: bold;"&gt;único&lt;/span&gt; investimento muito mais &lt;span style="font-weight: bold; font-style: italic;"&gt;estratégico&lt;/span&gt;, tendo uma subscrição qu&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;e elimina a necessidade de licenças em produtos diferentes como por exem&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;plo, o IBM Websphere MQ (MQSeries).&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_xvsPdhzsV0E/S5k8zOD3JmI/AAAAAAAAAx8/cSpWa4_TTN8/s1600-h/fig1.JPG"&gt;&lt;img style="cursor: pointer; width: 200px; height: 158px;" src="http://3.bp.blogspot.com/_xvsPdhzsV0E/S5k8zOD3JmI/AAAAAAAAAx8/cSpWa4_TTN8/s200/fig1.JPG" alt="" id="BLOGGER_PHOTO_ID_5447452074926614114" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;Conforme dito anteriormente, o MRG é composto de três componentes. São eles:&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-style: italic;"&gt;Messaging&lt;/span&gt;: Solução de mensageria baseada no padrão AMQP e capaz de executar milhões de mensagens por segundo. A principal caracteristica do Messaging é a capacidade de receber e entregar mensagens de d&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;iferentes aplicações e linguagens, sem precisar sacrificar recursos corporativos de soluções de mensageria como garantia de entrega, transações, segurança do canal e das mensagens bem como alta perfor&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;mance.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-style: italic;"&gt;Real-Time&lt;/span&gt;: O real-time é o elemento respons&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ável por dar presivibilidade no processamento de aplicações em cima do k&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ernel&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; do RHEL&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;. Atra&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;vés de&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; um kernel otimizado, é possível dar menor latência no processamento de carg&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;as p&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;esadas e aind&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;a sim, dar um comportamento previsível do ciclo total do processamento. Do ponto de vista de aplicações Java, o real-time também poss&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ibilita um melhor aproveitamento dos CPUs quanto a execução de coletas de lixo, evitando por exemplo grandes pausas de coleta (Full GC) e deteriorização da performance com a realocaç&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ão de objetos e&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ntre as ge&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;rações.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-style: italic;"&gt;Grid&lt;/span&gt;: Computação em grade não é um a&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ssunto n&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ovo, mas representa um tipo de solução que com o advento da virtualização e da computação nas nuvens possibilita crescimentos de poder de processamento em altos níveis.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; A principal caracteristica do Grid é possibilitar que um processamento pesado seja &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;distribuíd&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;o e coordenado entre vários nós sem que a separação físíca de CPUs seja um vilão&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; quando p&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;erformance e presibilidade sejam cruciais. &lt;a href="http://www.youtube.com/watch?v=kPi8ickYN84"&gt;Nesta&lt;/a&gt; apresentação, você pode percebe&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;r por exemplo, como uma renderização pode ser processada de forma mais rápida utilizando vários recursos virtuais baseados no Amazon EC2.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Para saber mais sobre o Red Hat MRG, vo&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;cê p&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ode consultar on-line no &lt;a href="http://www.redhat.com/mrg/"&gt;site&lt;/a&gt; da Red Hat. Existem diversos documentos, papers e ativos sobre o MRG disponíveis. Vamos agora dar foco em ênfase a parte relacionada a mensageria do MRG.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;MRG Messaging&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;A um certo tempo atrás, escrevi &lt;a href="http://architecture-journal.blogspot.com/2009/04/integrando-plataformas-heterogeneas.html"&gt;este&lt;/a&gt; artig&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;o que f&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ala sobre o protocolo AMQP. Na época, mencionei a plataforma Red Hat Messaging que seria a implementação do AMQP pela Red Hat. Atualmente, esta implementação faz parte do produto &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Re&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;d Hat MRG, apesar de poder ser adquirido separadamente através de subscrições exclusivas.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;O AMQP possibilita que diferentes linguagens de programação possam trocar mensagens utilizando um broker que implementa as especificações ditadas pela iniciativa AMQP. Neste caso, podemos ter portanto diferentes implementações deste broker por diversos fornecedores, sem que a interoperabilidade seja sacrificada. Como&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; analogia, pense por exemplo nas especificações do JEE, e nas diferentes implementações de servidores de aplicação, como JBoss, WebLogic e Websphere. Cada uma das soluções perte&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;nte a &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;um fornece&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;dor &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;particular, mas todos eles possuem uma stack básica que é padrão (ditada por um consórci&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;o) e&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; que&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;permite que as aplicações possam ser escritas de uma forma padronizada e uniforme.&lt;br /&gt;&lt;br /&gt;Assim funciona implementações do AMQP. Você pode usar brokers de diferentes fabricantes que todos eles irão poder trocar mensage&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ns entre si. Algumas das implementações existentes de brokers AMQP são o &lt;a href="http://www.imatix.com/"&gt;iMatix OpenAMQP&lt;/a&gt;, &lt;a href="http://www.redhat.com/mrg/"&gt;Red Hat MRG&lt;/a&gt;, &lt;a href="http://qpid.apache.org/"&gt;Apache Qpid&lt;/a&gt; e &lt;a href="http://www.rabbitmq.com/"&gt;RabbitMQ&lt;/a&gt;. Todos eles, possibilita que mensagens sejam enviadas e&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; e&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ntregues através da mesma pilha de software, que possui implementações para linguagens diversas como Python, C++, Ruby, CSharp e claro, Java.&lt;br /&gt;&lt;br /&gt;Porém, cada implementação possui sua&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;s espec&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ificidades, e a do Red Hat MRG com certeza é os altos níveis de desempenho e performance, &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;bem como a previsibilidade de processamento das mensagens, graças a integração nativa com o Gr&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;d &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;e&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; o R&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;eal-time. As principais características do Red Hat MRG são:&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Modelos de mensageria baseados em P2P, Publish/Subscribe e Async&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Mensageria com alta disponibilidade&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Transações locais e distribuíd&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;as&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Multiplos clientes: J&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ava, CSha&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;rp, C++&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;, Python, Ruby, linguagens de Scripts&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Ferramentas de gerenciamento e consoles de mon&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;itoramento&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Federação de Brokers, ideal para nodos&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; geograficamente distribuídos&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Atenticação baseada em SASL&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;4 padrões de roteamento de mensag&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;e&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ns, incluindo XQuery&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Acesso direto a AIO para durabilidade de mensagens e Journaling&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Broker C++ otimizado para o RHEL int&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;egrado com Grid e Real-time&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;E muito, mas muito mai&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;s coisas ...&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Instalando o Red Hat MR&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;G Messaging&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;Instalar o Messaging não pode ser mais s&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;imples quando você usa RHEL. Abra um console e entre com suas credenciais de super usuário (root). Feito isso, execute o seguinte comando:&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;yum groupinstall "MRG Messaging"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;Este grupo de pacotes instala vários c&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;omponentes do Messaging como o Broker, os stubs necessários para que clientes possam con&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ectar n&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;o Broke&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;r e as stacks das linguagens de programação. Para quem não usa o RHEL e usa um Red Hat alternativo (Fedora, CentOS), o repositório que define este grupo não estará disponível. Neste &lt;a href="http://www.redhat.com/docs/en-US/Red_Hat_Enterprise_MRG/1.2/html/Messaging_Installation_Guide/sect-Messaging_Installation_Guide-Installing_RHM-Available_Packages_mdash_RPM.html"&gt;link&lt;/a&gt;, você pode consultar os pacotes necessários e instalá-los individualmente&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Depois que os pacotes forem instalados, você pode verificar se tudo está correto iniciando o Broker. Para isso, abra um terminal e execute o se&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;guinte comando:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;/usr/sbin/qpidd -t&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Este comando inicia o broker na porta 5672 e exibe uma série de mensagens no console (resultado do parâmetro -t de "trace") referentes as cargas e c&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;arregamentos feitos. Verifica se a mensagem "notice Broker running" aparece. Se aparecer, significa que o broker está pronto para receber e processar mensagens. Para interromper a execução &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;do broker, basta teclar "Ctrl + C" no console. Caso a porta 5672 já esteja sendo u&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;sada por outr&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;o pro&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;cesso, é possível configurar o broker em outra porta. Para rodar o broker na porta 8888 por exemplo, exe&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;cute o seguinte comando:&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;/usr/sbin/qpidd -t -p 8888&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Alguns exemplos usando Red Hat MRG&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt; Messaging&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Vamos agora verificar como podemos fazer uso do MRG Messaging. Para isso, irei mostrar várias aplicações escritas em linguagens diferent&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;es que trocam mensagens através do Broker. Para este primeiro teste, execute o br&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;oker &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;na port&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;a p&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;adrão. Vamos criar um programa em Python que conecta no broker e espera por mensagens numa fila. Crie um programa em Python como mostrado abaixo:&lt;br /&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/329594.js?file=ConsumidorUsandoPython.py"&gt;&lt;/script&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Este programa realiza uma conexão com o broker, e define uma fila chamada "message_queue". Na sequência, é criado uma ligação entre&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; esta fila e o nome "routing_key" para que conexões baseados no protocolo "direct" possa ser efetuado.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Abra um console, e execute este progra&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ma com o seguinte comando:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;python ConsumidorUsandoPython.py&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Para executar este pro&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;grama, você pre&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;cisará ter o interpretador do python instalado, bem como os stubs do AMQP. Agora vamos criar um produtor de mensagens em Python. Crie o seguinte programa:&lt;br /&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/329602.js?file=ProdutorUsandoPython.py"&gt;&lt;/script&gt;Este programa Python faz um processo de co&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;nexão&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; sem&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;elhante ao consumidor, mas a sua ação é de enviar uma mensagem para a chave "routing_key". Assim que esta mensagem chegar no broker, ele irá roteá-la para a fila mapeada a esta chave. Execute este outro programa usando o seguinte comando:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;python ProdutorUsandoPython.py&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Assim que a mensagem for envi&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ada ao broker, o consumidor será notificado da sua entrega e irá exibir no console o resultado d&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;a mensagem enviada. O screenshot abaixo da minha máquina mostra este cenário:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_xvsPdhzsV0E/S5lSRn908VI/AAAAAAAAAyE/2NYm_Y5Oirw/s1600-h/fig2.png"&gt;&lt;img style="cursor: pointer; width: 200px; height: 125px;" src="http://2.bp.blogspot.com/_xvsPdhzsV0E/S5lSRn908VI/AAAAAAAAAyE/2NYm_Y5Oirw/s200/fig2.png" alt="" id="BLOGGER_PHOTO_ID_5447475687020884306" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;Agora vamos deixar as coisas um pouco mais interessantes. Vamos criar um produtor usando Java. Para isso, escreva o seguinte programa Java usando a API do JMS:&lt;br /&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/329613.js?file=AMQPDirectProducer.java"&gt;&lt;/script&gt;Repare que o programa Java carrega algumas propriedades de conexão de um arquivo de propriedades. Antes de executar este programa, crie o seguinte arquivo:&lt;br /&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/329618.js?file=direct.properties"&gt;&lt;/script&gt;Execute este programa Java. Você deverá ver a &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;seguinte saída dentro do consumidor Python:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_xvsPdhzsV0E/S5lVY8JmClI/AAAAAAAAAyM/M5Phfsb-Y6U/s1600-h/fig3.png"&gt;&lt;img style="cursor: pointer; width: 200px; height: 125px;" src="http://1.bp.blogspot.com/_xvsPdhzsV0E/S5lVY8JmClI/AAAAAAAAAyM/M5Phfsb-Y6U/s200/fig3.png" alt="" id="BLOGGER_PHOTO_ID_5447479111232916050" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;Para finalizar estes testes com o broker, vamos fazer algo um &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;pouco fora da caixa: Consumir as mensagens do broker usando C# .NET. Vou deixar &lt;a href="http://gist.github.com/329638"&gt;aqui&lt;/a&gt; o código fonte do programa CSharp que fiz, e vou apenas mostrar a ex&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ecução do produtor Python e o consumidor .NET para maior clareza. Mas repare no código fonte disponibilizado o quão simples é criar uma aplicação cliente para AMQP.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_xvsPdhzsV0E/S5lW-tniNGI/AAAAAAAAAyU/EYZhSR0fXGk/s1600-h/fig4.png"&gt;&lt;img style="cursor: pointer; width: 200px; height: 125px;" src="http://4.bp.blogspot.com/_xvsPdhzsV0E/S5lW-tniNGI/AAAAAAAAAyU/EYZhSR0fXGk/s200/fig4.png" alt="" id="BLOGGER_PHOTO_ID_5447480859678618722" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Como funciona o modelo de troca de mensagens?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;No AMQP, existem vários modelos de troca de mensagens. O modelo mais usado e conhecido sem dúvida é o de FanOut. No FanOut, cada fila é vinculada a um nome para o Broker, e um consumidor deve enviar suas mensagens para este nome. O nome, representa o vínculo da fila no Broker, e fornece portanto um acess&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;o&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; direto entre a fila e o consumidor da mesma.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_xvsPdhzsV0E/S5lYoeCGh4I/AAAAAAAAAyc/UTUflawqkd4/s1600-h/fig5.png"&gt;&lt;img style="cursor: pointer; width: 200px; height: 137px;" src="http://3.bp.blogspot.com/_xvsPdhzsV0E/S5lYoeCGh4I/AAAAAAAAAyc/UTUflawqkd4/s200/fig5.png" alt="" id="BLOGGER_PHOTO_ID_5447482676561217410" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;Uma abordagem parecida com a FanOut é a Direct. Através do modelo de Direct, você enviada mensagens para um nome virtual que possui uma chave associada. Tanto o nome quanto a chave são vínculados a fila inter&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;na do broker, e o mesmo só autoriza a entrega da mensagem na fila (ou seu consumo) se o programa cliente enviar a chave correta.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_xvsPdhzsV0E/S5lZOF1lFkI/AAAAAAAAAyk/jMApjVHWwnI/s1600-h/fig6.png"&gt;&lt;img style="cursor: pointer; width: 200px; height: 119px;" src="http://1.bp.blogspot.com/_xvsPdhzsV0E/S5lZOF1lFkI/AAAAAAAAAyk/jMApjVHWwnI/s200/fig6.png" alt="" id="BLOGGER_PHOTO_ID_5447483322901272130" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Outro modelo também muito utilizado é o de tópicos. A idéia de tópicos também é baseada em chaves vínculadas a fila do broker, porém, várias chaves podem definir "assuntos" que diferentes filas e diferentes consumidores podem estar interessados:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_xvsPdhzsV0E/S5lZ60YLtwI/AAAAAAAAAys/gbjjpz6I9jQ/s1600-h/fig7.png"&gt;&lt;img style="cursor: pointer; width: 200px; height: 108px;" src="http://2.bp.blogspot.com/_xvsPdhzsV0E/S5lZ60YLtwI/AAAAAAAAAys/gbjjpz6I9jQ/s200/fig7.png" alt="" id="BLOGGER_PHOTO_ID_5447484091308685058" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Federação de Brokers: Integrando empresas usando AMQP&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;br /&gt;Um dos recursos mais interessantes do MRG Messaging é a capacidade de federação. Em linhas gerais, você pode "ligar" dois ou mais brokers fazendo com que produtores e consumidores de diferentes localizações p&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ossam trocar mensagens utilizando um dos modelos mostrados anteriormente.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_xvsPdhzsV0E/S5lbL83c8CI/AAAAAAAAAy0/_eGKnhsqdkU/s1600-h/fig8.png"&gt;&lt;img style="cursor: pointer; width: 200px; height: 142px;" src="http://3.bp.blogspot.com/_xvsPdhzsV0E/S5lbL83c8CI/AAAAAAAAAy0/_eGKnhsqdkU/s200/fig8.png" alt="" id="BLOGGER_PHOTO_ID_5447485485156724770" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;Através deste recurso, você pode ter por exemplo um broker AMQP (MRG Messaging ou outro) rodando em Nova York escutando eventos de trading e bolsa de valores, e ter um broker MRG Messaging rodando em São Paulo, exibindo as mensagens de Nova York para os diversos consumidores (Java, Python, C++) quase em tempo real.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;OK, este MRG Messaging parece interessante, mas e a performance disso?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Números explicam melhor que palavras, logo, nada melhor para falar &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;de performance do que mostrar b&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;enchmarks baseados em cenários de hardware e software. Segue abaixo alguns números que mostram a capacidade de processamento do MRG Messaging num dado cenário montado pela equipe do MRG Messaging:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_xvsPdhzsV0E/S5ldrhR4BFI/AAAAAAAAAy8/DWhMxjTGVdo/s1600-h/fig9.png"&gt;&lt;img style="cursor: pointer; width: 200px; height: 136px;" src="http://2.bp.blogspot.com/_xvsPdhzsV0E/S5ldrhR4BFI/AAAAAAAAAy8/DWhMxjTGVdo/s200/fig9.png" alt="" id="BLOGGER_PHOTO_ID_5447488226530427986" border="0" /&gt;&lt;/a&gt;    &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_xvsPdhzsV0E/S5ldzY0hP5I/AAAAAAAAAzM/WFk8egh-IPM/s1600-h/fig11.png"&gt;&lt;img style="cursor: pointer; width: 200px; height: 127px;" src="http://2.bp.blogspot.com/_xvsPdhzsV0E/S5ldzY0hP5I/AAAAAAAAAzM/WFk8egh-IPM/s200/fig11.png" alt="" id="BLOGGER_PHOTO_ID_5447488361698770834" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_xvsPdhzsV0E/S5ldvQfcmiI/AAAAAAAAAzE/tE58vg8psRA/s1600-h/fig10.png"&gt;&lt;img style="cursor: pointer; width: 200px; height: 126px;" src="http://1.bp.blogspot.com/_xvsPdhzsV0E/S5ldvQfcmiI/AAAAAAAAAzE/tE58vg8psRA/s200/fig10.png" alt="" id="BLOGGER_PHOTO_ID_5447488290743425570" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;É realmente viciante trabalhar com o MRG Messaging, e espero que esta brilhante solução esteja sendo usada nos servidores de várias empresas do Brasil pois as possibilidades são infinitas. Se você achou este produto interessante e acha que ele pode ser bem utilizado na sua empresa, entre em contato comigo no e-mail ricardo.ferreira (at) redhat.com para falarmos mais afundo e com maior nível de detalhes. Terei grande prazer em ajudá-los ;-)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8571396175573944921-2976012656057025625?l=architecture-journal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://architecture-journal.blogspot.com/feeds/2976012656057025625/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8571396175573944921&amp;postID=2976012656057025625' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8571396175573944921/posts/default/2976012656057025625'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8571396175573944921/posts/default/2976012656057025625'/><link rel='alternate' type='text/html' href='http://architecture-journal.blogspot.com/2010/03/enterprise-messaging-usando-red-hat-mrg.html' title='Enterprise Messaging usando Red Hat MRG'/><author><name>Ricardo Ferreira</name><uri>http://www.blogger.com/profile/11930306647022714836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/-5T0r_5klxDA/Tn5CEvZpK0I/AAAAAAAABEg/MyTJuGi12ag/s220/ricardo-ferreira-Grande.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_xvsPdhzsV0E/S5k5S03UQPI/AAAAAAAAAx0/UwamNS1XEn4/s72-c/redhat.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8571396175573944921.post-4716194886296242722</id><published>2010-02-17T09:35:00.000-08:00</published><updated>2010-02-17T13:11:35.212-08:00</updated><title type='text'>MetaMatrix Platform na Prática!</title><content type='html'>&lt;div face="verdana" style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_xvsPdhzsV0E/S3xKNg_gwOI/AAAAAAAAAxs/SjUxOBIusM8/s1600-h/figx.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 200px; height: 50px;" src="http://1.bp.blogspot.com/_xvsPdhzsV0E/S3xKNg_gwOI/AAAAAAAAAxs/SjUxOBIusM8/s200/figx.jpg" alt="" id="BLOGGER_PHOTO_ID_5439304046011793634" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; &lt;span style="font-family:verdana;"&gt;"&lt;span style="font-style: italic;"&gt;Você conhece alguém de Roraima?&lt;/span&gt;" Essa é uma frase comum quando queremos enfatizar que algo ou alguém jamais foi visto ou se há dúvidas se ele realmente existe. E olha que de fato, eu não conheço nínguem de Roraima ... acredito realmente que ela efetivamente não exista. Brincadeiras a parte, este post será dedicado a mostrar na prática, o que é a &lt;/span&gt;&lt;a style="font-family: verdana;" href="http://www.jboss.com/products/platforms/dataservices/"&gt;plataforma de Data Services&lt;/a&gt;&lt;span style="font-family:verdana;"&gt; da Red Hat conhecida mundialmente como MetaMatrix, e&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt; conhecida internamente como JBoss Data Services Platform. Acredito que muitas pessoas já ouviram coisas sobre o MetaMatrix, alguns já experimentaram seus conceitos na prá&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;tica através do projeto &lt;a href="http://www.jboss.org/teiid"&gt;Teiid&lt;/a&gt;, mas poucos, o viram realmente em sua plenitude, com todos os seus recursos, e até mesmo num cenário real. O MetaMatrix é líder mundial de soluções de EII (Enterprise Information Integration) porém sofre do mal de Roraima: Ele é bem pouco difundido e conhecido. Vou tentar explicá-lo através de uma demonstração que criei usando o MetaMatrix Platform versão 5.5, disponível para assinantes da subscrição da Red Hat, e que daqui um tempo, estará integralmente disponivel no site da JBoss.ORG no projeto Teiid.&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Um cenário típico para o MetaMatrix&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;O propósito geral do MetaMatrix é ser uma plataforma para i&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ntegração de dados. Com este objetivo em mente, ele pode ser usado p&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ara resolver N problem&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;as comuns no mundo dos dados. O cenário mais trivial possível seria por exemplo, usá-lo como Firewall de dados. Imagine por exemplo que você possui milhares de bases de dados (pos&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;sivelmente de d&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;iferentes fabric&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;antes) e que, você tenha informações nestas bases que sejam sigilosas. Mas você pr&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ecisa dar acesso a um grupo de aplicações para que estas via SQL possam re&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;cuperar e modificar dados.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; Usando o MetaMatrix, você pode consolidar estes dados num banco de dados virtual&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;, e este poderia s&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;er acessado por estas aplicações.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Outro cenário interessante é a de MDM (Mast&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;er Data Management). Uma questão crucial para muitas organizações é possuir uma visão 36&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; graus de uma dada informação, geralmente clientes e produtos. No ramo bancário por exemplo, é de extrema importânc&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ia que você tenha uma visão holistica sobre determinada informação (um cliente por ex&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;emplo)&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; para que você ganhe maior agilidade. A um tempo atrás por exemplo, participei de um projeto &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;de&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; automação de uma empresa do ramo de cartões, cujo problema era que um atendimento demorava cerca de 24 minutos por cliente(quase 15 minutos a mais do que o SLA contratado) e essa demora se dava &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;porque as informações do cliente, faturas, atendimento de call center e dados de transações de cartões residiam em sistemas diferentes, alguns destes baseados em mainframe. Logo,&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; aten&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;der u&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;m cliente era uma tarefa árdua para as pobres atendentes. Na ocasião, o projeto era justamente de criar uma interface adminstrativa que reunia dados de sistem&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;as SQL, mainframe, sistemas em Websphere e Delphi, que reunia tudo isso numa úni&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ca tela, &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;bastando que o atendent&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;e digitasse o CPF do cliente. Através do MetaMatrix, isso também é possív&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;el.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Agregar dados de diferentes fontes de dados não é algo&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; inovador. Sistemas baseados em OLAP ou Data warehouse já usam este conceito. Ma&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;s este tipo de solução sofre de dois problemas graves: Primeiro as &lt;span style="font-weight: bold; font-style: italic;"&gt;informações não são&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt; de tempo real&lt;/span&gt;, os dados são atualizados quando programas ETLs são disparados (normalmente num período onde os transacionais estão em "descanso") e segundo, os dados são somente para consumo e leitura, &lt;span style="font-weight: bold; font-style: italic;"&gt;eles nã&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;o podem ser modificados&lt;/span&gt;. Usando o MetaMatrix, você agrega várias fontes de da&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;dos e &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ainda consegue ter dados em tempo real porque a transformação é online, e o acess&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;o as fontes de dados é feito por conectores especiais que possibilitam transações na camada de&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; EIS. Criar por&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;t&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;anto soluções de BAM ou BI tendo o MetaMatrix como fundação é algo a se c&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;onsiderar, uma vez que o &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;nível da informação se torna ainda mais interessante.&lt;br /&gt;&lt;br /&gt;Vários cenários são interessa&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ntes para uso do &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;MetaMatrix, e é justamente isso que o torna tão poderoso. Para fins de demonstraçã&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;o, considere o seguinte cenário: Uma empresa de seguros de vida possui um setor de atendimento que ne&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;cessita visualizar todas as informações relativas a um cliente numa única interface rica escrita preferenc&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ialmente para estações de trabalho Windows. As informações a serem visualizadas são:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;1) Os dados pessoais do cliente, atualment&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;e mantidos por um sistema PHP acessando o MySQL&lt;br /&gt;2) Os dados de contato do cliente, atualmente man&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;tidos &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;p&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;or um sistema Perl acessando o PostgreSQL&lt;br /&gt;3) Os dados de apólices armazenad&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;os no DB2 do CICS, que exporta diariamente dados para TXT&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;A interface criada, originalmen&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;te usando&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; a&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; plataforma .NET, em especial, usando a tecnologia de Windows Forms é mostrada abaixo. Repare q&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ue a consulta feita é baseada apenas no CPF do cliente, e todas as informações citadas são re&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;unidas n&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;esta interface rica.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_xvsPdhzsV0E/S3wxgQcNvSI/AAAAAAAAAv8/DRyvSQO_ijU/s1600-h/fig2.JPG"&gt;&lt;img style="cursor: pointer; width: 200px; height: 136px;" src="http://1.bp.blogspot.com/_xvsPdhzsV0E/S3wxgQcNvSI/AAAAAAAAAv8/DRyvSQO_ijU/s200/fig2.JPG" alt="" id="BLOGGER_PHOTO_ID_5439276880195599650" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_xvsPdhzsV0E/S3wyq8AJX5I/AAAAAAAAAwE/AZXRuZ1WMdE/s1600-h/fig3.JPG"&gt;        &lt;img style="cursor: pointer; width: 200px; height: 136px;" src="http://3.bp.blogspot.com/_xvsPdhzsV0E/S3wyq8AJX5I/AAAAAAAAAwE/AZXRuZ1WMdE/s200/fig3.JPG" alt="" id="BLOGGER_PHOTO_ID_5439278163199352722" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_xvsPdhzsV0E/S3wxgQcNvSI/AAAAAAAAAv8/DRyvSQO_ijU/s1600-h/fig2.JPG"&gt;    &lt;/a&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;Bem, a pergunta seria: Como todos este&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;s dados vieram parar numa aplicação cliente feita em .NET? E a resposta curta (e óbvia) seria: Atravé&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;s do MetaMatrix. Vamos ver como foi o processo de construção deste projeto de Data Services&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; e como os dados foram disponibilizados.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Importação de Fontes de Dados, Criação de Entidades virtuais, VDBs&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A primeira coisa a se fazer num projeto de federação de dados&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; usando o MetaMatrix é realizar a importação de todas as fontes de dados que comporão um data service. Isso é feito através da ferramenta MetaMatrix Designer, um ambiente visual baseado no Eclipse altamente&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; pro&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;dutivo.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_xvsPdhzsV0E/S3wznOXk6pI/AAAAAAAAAwM/lMUsRVg7oWI/s1600-h/fig1.JPG"&gt;&lt;img style="cursor: pointer; width: 200px; height: 132px;" src="http://3.bp.blogspot.com/_xvsPdhzsV0E/S3wznOXk6pI/AAAAAAAAAwM/lMUsRVg7oWI/s200/fig1.JPG" alt="" id="BLOGGER_PHOTO_ID_5439279198921616018" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;O modelo de trabalho do MM Designer é muito simples: Você cria um projeto de data services, constitui suas fontes (origens) dos dados, cria uma ou mais entidades virtuais &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;(views) compostas das fontes de dados, e depois integra tudo isso num banco de &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;dados virtual conhecido como VDB, sigla de Virtual Database. A i&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;mportação do&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;s dados é feita por um pro&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;cesso 100% visual e bem pouco complicado.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_xvsPdhzsV0E/S3w3Gc3DYXI/AAAAAAAAAwU/7Ov4SvE0ZVw/s1600-h/fig4.JPG"&gt;&lt;img style="cursor: pointer; width: 118px; height: 200px;" src="http://3.bp.blogspot.com/_xvsPdhzsV0E/S3w3Gc3DYXI/AAAAAAAAAwU/7Ov4SvE0ZVw/s200/fig4.JPG" alt="" id="BLOGGER_PHOTO_ID_5439283033922560370" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_xvsPdhzsV0E/S3w3Usf3rCI/AAAAAAAAAwc/ORm-yGXB5EU/s1600-h/fig5.JPG"&gt;         &lt;img style="cursor: pointer; width: 200px; height: 174px;" src="http://4.bp.blogspot.com/_xvsPdhzsV0E/S3w3Usf3rCI/AAAAAAAAAwc/ORm-yGXB5EU/s200/fig5.JPG" alt="" id="BLOGGER_PHOTO_ID_5439283278638459938" border="0" /&gt;     &lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_xvsPdhzsV0E/S3w3hn9v0eI/AAAAAAAAAwk/pgpyahmuMdQ/s1600-h/fig6.JPG"&gt;&lt;img style="cursor: pointer; width: 166px; height: 200px;" src="http://4.bp.blogspot.com/_xvsPdhzsV0E/S3w3hn9v0eI/AAAAAAAAAwk/pgpyahmuMdQ/s200/fig6.JPG" alt="" id="BLOGGER_PHOTO_ID_5439283500759896546" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;Depois que todas as fontes de dados são importadas para dentro de um projeto do MM Designer, é possível criar as entidades virtuais, ou seja, os data services. Data Services são como views de um banco de dados, só que são baseadas em tabelas, views ou procedures de diferentes tipos de bancos de dados ou de até mesmo coisas que não se&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;jam bancos de dados, como sistemas de caixinha (Excel, PeopleSoft, Siebel, Oracle EBS), tecnologias (SOAP, HTTP, JMS) e formatos (XML, EDI, TXT). Através do MetaMatrix e seus conectores, qualquer &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;fonte de dados vira um potencial data service, possibilitando inclusive, que transformações sejam a&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;plicadas aos data services. Abaixo segue um exemplo de como, du&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;as ent&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;idades virtuais&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; for&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;am constituíd&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;as das fontes de dados importadas, a saber, a tabela "TAB_CLIENTE" do MySQL, a tabela "TAB_ENDERECO" também do MySQL, a tabela "CONTATO" a partir de um a&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;rquivo TXT e a tabela "TAB_APOLICE" do PostgreSQL.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_xvsPdhzsV0E/S3w5nhUfcnI/AAAAAAAAAws/DJOZCOFDSC4/s1600-h/fig7.JPG"&gt;&lt;img style="cursor: pointer; width: 200px; height: 94px;" src="http://4.bp.blogspot.com/_xvsPdhzsV0E/S3w5nhUfcnI/AAAAAAAAAws/DJOZCOFDSC4/s200/fig7.JPG" alt="" id="BLOGGER_PHOTO_ID_5439285801078714994" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_xvsPdhzsV0E/S3w6d_Ow7XI/AAAAAAAAAw0/lUVBFrLFo0A/s1600-h/fig8.JPG"&gt;     &lt;img style="cursor: pointer; width: 200px; height: 126px;" src="http://2.bp.blogspot.com/_xvsPdhzsV0E/S3w6d_Ow7XI/AAAAAAAAAw0/lUVBFrLFo0A/s200/fig8.JPG" alt="" id="BLOGGER_PHOTO_ID_5439286736820694386" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_xvsPdhzsV0E/S3w7dIgKTUI/AAAAAAAAAw8/IaRjt74U5ow/s1600-h/fig9.JPG"&gt;     &lt;img style="cursor: pointer; width: 200px; height: 134px;" src="http://1.bp.blogspot.com/_xvsPdhzsV0E/S3w7dIgKTUI/AAAAAAAAAw8/IaRjt74U5ow/s200/fig9.JPG" alt="" id="BLOGGER_PHOTO_ID_5439287821641338178" border="0" /&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Criado os data services, é hora de consolidar tudo num VDB. Criei um VDB e inserir todos meus data services, web services e fontes de dados nele. A partir do VDB criado, por dentro do MM Designer, você pode testar se suas entidades virtua&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;is estão funcionando corretamente. Basta compilar o VDB e solicitar a execução de testes.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_xvsPdhzsV0E/S3w9WNPeNVI/AAAAAAAAAxE/qPos4Udq4qE/s1600-h/fig10.JPG"&gt;&lt;img style="cursor: pointer; width: 200px; height: 104px;" src="http://1.bp.blogspot.com/_xvsPdhzsV0E/S3w9WNPeNVI/AAAAAAAAAxE/qPos4Udq4qE/s200/fig10.JPG" alt="" id="BLOGGER_PHOTO_ID_5439289901677688146" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_xvsPdhzsV0E/S3w9lWWIEEI/AAAAAAAAAxM/qfImsOOa-O8/s1600-h/fig11.JPG"&gt;     &lt;img style="cursor: pointer; width: 200px; height: 107px;" src="http://4.bp.blogspot.com/_xvsPdhzsV0E/S3w9lWWIEEI/AAAAAAAAAxM/qfImsOOa-O8/s200/fig11.JPG" alt="" id="BLOGGER_PHOTO_ID_5439290161819553858" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Deployment: A hora mais temida de todas. Será?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Além do MM Designer, a plataforma MetaMatrix é também composta por dois outros elementos. Uma deles é o MetaMatrix Server, ou simplesmente, MM Server. É ele que mantêm os bancos de dados virtuais no ar e que faz todo o acesso as fontes de dados. O MM Server é na prática, um servidor de banco de dados como qualquer outro. Você conecta com ele, realiza autenticações, cria bases de dados (virtuais), executa consultas SQL, ele cria Query Plans para consultas pesadas ... enfim, tudo o que um SGBDR possui, ele também têm. É possível inclusive, criar stored procedures e trigger dentro dele usando a implementação de SQL dele nativa.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;A única coisa que o difere dos demais bancos de dados, é que ele além disso, é um middleware de integração, que através dos conectores acessa várias fontes de dados, e pode, expor estes dados através de SQL (sua abordagem padrão) ou via SOAP, expondo as entidades virtuais na forma de Web Services.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;O outro elemento da plataforma MetaMatrix é o MetaMatrix Console, ou simplesmente, MM Console. Ele é a interface gráfica de gerenciamento do MM Server. Através dele, você pode fazer deployments, gerar estatísiticas dos VDBS, parar e reiniciar conectores de EIS e claro, gerenciar questões de autenticação e autorização dos usu&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ários. Fazer o deploymento de um VDB no MM Server é uma questão realmente trivial. Vamos aos detalhes. Primeiro, você deverá conectar no MM Console. O servidor do MetaMatrix deverá estar sendo executado em algum computador da rede que o MM Console possa acessar.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_xvsPdhzsV0E/S3xBg2d1IRI/AAAAAAAAAxU/ZBItJnM8rr8/s1600-h/fig12.JPG"&gt;&lt;img style="cursor: pointer; width: 200px; height: 113px;" src="http://3.bp.blogspot.com/_xvsPdhzsV0E/S3xBg2d1IRI/AAAAAAAAAxU/ZBItJnM8rr8/s200/fig12.JPG" alt="" id="BLOGGER_PHOTO_ID_5439294482588967186" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;Estando logado no MM Console, basta clicar no item "Virtual Databases" e clicar no botão "Import VDB" para importar o banco de dados virtual que você criou. O mesmo VDB pode ser importando diversas vezes. Cada processo de import gera uma nova versão do VDB, o que torna o MetaMatrix ainda mais poderoso: Você pode ter várias versões do seu banco de dados em produção.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_xvsPdhzsV0E/S3xCylm3qYI/AAAAAAAAAxc/FRnTZ2qxPoc/s1600-h/fig13.JPG"&gt;&lt;img style="cursor: pointer; width: 200px; height: 113px;" src="http://4.bp.blogspot.com/_xvsPdhzsV0E/S3xCylm3qYI/AAAAAAAAAxc/FRnTZ2qxPoc/s200/fig13.JPG" alt="" id="BLOGGER_PHOTO_ID_5439295886812752258" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;Depois de importar seu VDB, você deverá configurar os parâmetros especiais dos conectores que você usou durante a etapa de projeto. Por exemplo, como eu importei dados oriundos de uma base MySQL, outra PostgreSQL e de um arquivo TXT, uma instância de cada um destes conectores me foi gerada pelo MM Designer e incorporada dentro do VDB. Como o ambiente de desenvolvimento pode ser ligeiramente diferente do ambiente de produção, talvez se faça necessário a re-configuração dos parâmetros de acesso a dados a cada uma destas fontes de dados, dados como URL de conexão, endereço IP, usuários e senhas. Feito isso, seu banco de dados virtual está pronto para receber conexões de aplicações via SQL ou SOAP.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Acessando o banco de dados virtual criado via JDB&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;C&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Para fins de testes, criei este pequeno programa Java que realiza uma conexão com meu servidor do MetaMatrix, realiza uma consulta em minha entidade virtual "Cliente" e exibe os dados retornados no console. Repare que a consulta feita é uma consulta padrão baseada no puro e simples SQL. Nenhum código "mirabolante" teve que ser criado, e reparando nos imports da classe, dá pra ver que nada mais do que o JDK e o driver JDBC do MetaMatrix (que acompanha o produto) são necessários para criar um cliente destes. Um ponto interessante a se notar também, é que dentro do JAR que contêm o driver JDBC do MetaMatrix, existe uma classe de dialeto do Hibernate, portanto, é possível também criar clientes em Hibernate e JPA acessando MetaMatrix, caso desenho O.O de aplicações seja imperativo em sua organização.&lt;br /&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/306939.js?file=ClienteJDBC.java"&gt;&lt;/script&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Acessando o banco de dados virtual criado via SOAP&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Finalmente, através do MetaMatrix é possível acessar as entidades virtuais através de SOAP. Se no seu VDB você habilitou esta opção, fazendo a distribuição dos XSDs que definem seu endpoint e os tipos complexos dos data services (facilmente gerados pelo MM Designer) você pode disponibilizar qualquer data service via SOAP. A infra-estrutura necessária para isso será ter um servidor de aplicações ou contêiner de Servlets que possa rodar um pequeno programa WAR (Web Archive). O MM Server disponibiliza uma aplicação Web Java que atua como Gateway entre o servidor de aplicações e o servidor do MetaMatrix.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Ao fazer o deploy deste pequeno WAR no servidor de aplicações de sua escolha, você apenas instrui a aplicação a saber qual é o endereço IP e porta que o MM Server estará escutando. Feito isso, basta acessar a seguinte URL: &lt;a href="http://192.168.0.1:8080/metamatrix-soap/"&gt;http://192.168.0.1:8080/metamatrix-soap/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Onde "192.168.0.1" é o servidor de aplicações que você escolheu para ser o gateway de SOAP. Ao acessar esta URL, você irá se deparar com a seguinte interface Web:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_xvsPdhzsV0E/S3xHGDwv9SI/AAAAAAAAAxk/UjbjbgJafHM/s1600-h/fig14.JPG"&gt;&lt;img style="cursor: pointer; width: 200px; height: 134px;" src="http://2.bp.blogspot.com/_xvsPdhzsV0E/S3xHGDwv9SI/AAAAAAAAAxk/UjbjbgJafHM/s200/fig14.JPG" alt="" id="BLOGGER_PHOTO_ID_5439300619371279650" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;Clicando no link "Discover MetaMatrix Web Services" você fará com que a pequena aplicação Web (O Gateway) acesso o MM Server e pesquise em sua base de UDDI interna sobre os Web Services publicados. Uma lista será apresentada na tela com o resultado da consulta, e cada item da lista, terá um endereço WSDL disponibilizando, criado automaticamente pelo MM Server. Dai pra frente, qualquer requisição SOAP enviada para um destes endpoints, será enviada diretamente para o MM Server.&lt;br /&gt;&lt;br /&gt;E desta forma, com as entidades virtuais (Cliente e Apólice) disponibilizadas via SOAP, pode ser criado o cliente rico em .NET. Acredito que este post mostrou um pouco do poder e robustez da plataforma MetaMatrix, que é a fundação do JBoss Data Services Platform disponibilizado pela Red Hat via subscrições. Se você achou esta solução interessante, e consegue ver soluções suas baseadas nela, não hesite em procurar a Red Hat do Brasil que possamos lhe auxiliar no que for preciso. Tão em breve, toda esta plataforma estará disponível para a comunidade. Neste meio tempo, é uma boa pedida exercitar os conceitos do MetaMatrix através do projeto Teiid.&lt;br /&gt;&lt;br /&gt;Forte abraço e até a próxima!&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8571396175573944921-4716194886296242722?l=architecture-journal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://architecture-journal.blogspot.com/feeds/4716194886296242722/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8571396175573944921&amp;postID=4716194886296242722' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8571396175573944921/posts/default/4716194886296242722'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8571396175573944921/posts/default/4716194886296242722'/><link rel='alternate' type='text/html' href='http://architecture-journal.blogspot.com/2010/02/metamatrix-platform-na-pratica.html' title='MetaMatrix Platform na Prática!'/><author><name>Ricardo Ferreira</name><uri>http://www.blogger.com/profile/11930306647022714836</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/-5T0r_5klxDA/Tn5CEvZpK0I/AAAAAAAABEg/MyTJuGi12ag/s220/ricardo-ferreira-Grande.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_xvsPdhzsV0E/S3xKNg_gwOI/AAAAAAAAAxs/SjUxOBIusM8/s72-c/figx.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8571396175573944921.post-5160772018666028583</id><published>2010-02-16T07:31:00.000-08:00</published><updated>2010-02-16T14:49:37.319-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Rules'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='Guvnor'/><category scheme='http://www.blogger.com/atom/ns#' term='BRMS'/><category scheme='http://www.blogger.com/atom/ns#' term='Drools'/><title type='text'>Drools Guvnor em 7 Passos!</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;Regras de negócio é u&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;m assunto que permeia a engenharia de software a décadas. E mesmo com o passar dos anos, ainda é um assunto de suma importância para todos os projetistas de software. Muitas soluções surgiram no mercado par&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;a fomentar este tema, e em muitas destas ferramentas e soluções, regras de&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt; n&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;egó&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;cio eram tratad&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;as co&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;mo &lt;span style="font-weight: bold; font-style: italic;"&gt;mecanismos auxiliares a construção do software&lt;/span&gt;. Se formos ele&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;ncar alguma coisa q&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;u&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;e&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt; todas elas tenham em comum, todos irão apontar o fato da questão de separação&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt; de respo&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;nsabilidades. Regras de negócio devem ser isoladas da construção de software de forma que este se mostre mais produtivo, e portanto, mais eficaz e com maior valor agregado.&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify; font-family: verdana;"&gt; &lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:lucida grande;"&gt;&lt;span style="font-family:verdana;"&gt;Agora, separar regras de negócio do código da&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:lucida grande;"&gt;&lt;span style="font-family:verdana;"&gt;s aplicações é de fato, uma ação que melhora ou promove a engenharia de software a um patamar mais elevado? Estudos mostram que pessoas estão cada vez mais preocupadas com o domínio d&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:lucida grande;"&gt;&lt;span style="font-family:verdana;"&gt;e suas org&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:lucida grande;"&gt;&lt;span style="font-family:verdana;"&gt;anizações (o conceito das empresas) e cada vez menos preocupadas em como explicar isso em t&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:lucida grande;"&gt;&lt;span style="font-family:verdana;"&gt;erm&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:lucida grande;"&gt;&lt;span style="font-family:verdana;"&gt;os de código. Métodos como o DDD (Domain-Driven Design) auxiam projetistas de software a criarem &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:lucida grande;"&gt;&lt;span style="font-family:verdana;"&gt;software baseado em domínios conhecidos. E quanto a separação de responsabilidades,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:lucida grande;"&gt;&lt;span style="font-family:verdana;"&gt; bem, todos devem concordar que, isso não é nada revolucionário. A mais de 30 anos que e&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:lucida grande;"&gt;&lt;span style="font-family:verdana;"&gt;xistem diversas formas de se conseguir separação de código de regras de negócio, uma d&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:lucida grande;"&gt;&lt;span style="font-family:verdana;"&gt;elas é colocando &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:lucida grande;"&gt;&lt;span style="font-family:verdana;"&gt;as re&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:lucida grande;"&gt;&lt;span style="font-family:verdana;"&gt;gras em procedures e gatilhos de bancos de dados, processo este qu&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:lucida grande;"&gt;&lt;span style="font-family:verdana;"&gt;e é mais antigo que eu. Outra f&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:lucida grande;"&gt;&lt;span style="font-family:verdana;"&gt;orma é de se colocar regras em componentes e não mais em objetos, possibilitando que o m&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:lucida grande;"&gt;&lt;span style="font-family:verdana;"&gt;ercado &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:lucida grande;"&gt;&lt;span style="font-family:verdana;"&gt;de componentes possa crescer ainda mais. Tecnologias de componentes como CORBA, EJB, COM e por que não Web Services são excelentes candidatos para este feito.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:lucida grande;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;Lembro com certa saudade, a época em que comecei&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt; a aprender Enterprise Java Beans. Na época, eles prometiam ser a forma padrão com que componentes r&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;emetiam regras de negócios que pudessem ser de facto, reutilizáveis. A tecnologia estava ali em pró dest&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;e feito, mas por alguma razão, isso foi longe de ser o objetivo principal dos EJBs. O me&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;smo se aplica para as demais tecnologias. Ainda com relação a separação de responsabilidades, reg&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;ras f&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;oram ainda projetadas para rodarem em &lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;camadas (Layers) adjacentes as camadas de aplica&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;ção, de forma &lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;que estas pudessem ser isoladas dos impactos das mudanças de requisito e vice-versa. Enfim, posso escrever linhas e mais linhas sobre todas as evoluções e esforços criados a partir das regra&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;s de negócio, e em todas que eu citar, haverão com certeza seu efeito colateral e seu c&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;l&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;aro fracasso, porque até hoje, &lt;span style="font-weight: bold; font-style: italic;"&gt;regras de negócio não tiveram a verdadeira atenção e respeito que deveriam ter&lt;/span&gt;. E esta é a razão para que regras de neg&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;ócio ainda s&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;eja motivo de vergonha e piad&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;a&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt; para a maioria dos projetistas de software. Se você chegar com um CTO e falar &lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;(mais uma vez) sobre isolamento de regras de negócio em pró de maior produtiv&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;i&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:lucida grande;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family: verdana;"&gt;dade, você com certeza irá notar um semblante de desprezo do seu rosto. &lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic; font-family: verdana;"&gt;Isso acontece porque as pessoas estão desacreditadas&lt;/span&gt;&lt;span style="font-family: verdana;"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;O ponto é, você não deve se preocupar demasiadam&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;ente com&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt; separação de regras e código, &lt;span style="font-weight: bold; font-style: italic;"&gt;porque isso já pode ser feito com inúmeros recu&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;rsos a mais de 30 anos&lt;/span&gt;. Você não deve achar que as regras de negócio são a chave para seu probl&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;ema de produtividad&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;e de desenvolvimento, porque em média, &lt;span style="font-weight: bold; font-style: italic;"&gt;elas representam 30% do esforço d&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;a construção d&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;e um software&lt;/span&gt;. Você não deve ter processos rígidos que controlem a mudança&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt; das regras, porque elas, &lt;span style="font-weight: bold; font-style: italic;"&gt;naturalmente mudarão com frequência e intensidadade&lt;/span&gt;. E acima de tudo, você não deve achar que conhece regras de negócio melhor que as pessoas do negócio porque vo&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;cê, no final das con&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;tas, &lt;span style="font-weight: bold; font-style: italic;"&gt;é um nerd que possui um bom conhecimento de&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;&lt;span style="font-weight: bold; font-style: italic;"&gt; lógica e programaçã&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;o, mas pouco ou nenhum senso crítico para questões não técni&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;cas&lt;/span&gt;. E com base neste erro é que outro erro é g&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;erado: De afastar as pessoas de negócio do projeto de construção&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt; de si&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;stemas &lt;span style="font-weight: bold; font-style: italic;"&gt;por achar que elas mais atrapalham que ajudam&lt;/span&gt;. Finalmente, a questão mais importante de todas. Não ache que desenvolvimento de &lt;span style="font-weight: bold; font-style: italic;"&gt;software é a coisa mais import&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;ante para uma empresa&lt;/span&gt;. Software, é um investimento caro, que pouco trás &lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;resultado (hi&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;stóricamente falando) e que ajuda muito mais a sistematizar processos (torná-los repetitidos, contro&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;lados e previsíveis) do que efetivamente, trazer melhorías para as organizações. Toda empre&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;sa quer melhorar seus pro&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;cessos, redu&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;zir suas despesas e se reinventar periodicamente para atingir um ún&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;ico objetivo: Mais lucro, mais rentabilidade!&lt;br /&gt;&lt;br /&gt;O conhecimento no negócio e o intelecto que está p&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;or trás de toda organização é que lhe produz formas de ganhar mais dinheiro. E &lt;span style="font-weight: bold; font-style: italic;"&gt;este intelecto se exte&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;rio&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;riza na formas de regras de negócio&lt;/span&gt;. As regras representam o conhecimento por trás de um g&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;rupo de processos, e os processos representam as etapas a serem seguidas para se atingir u&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;m objetivo de negócio. A mensagem então a ser entendida e aceita é: &lt;span style="font-weight: bold; font-style: italic;"&gt;Processos e regras são muito mais i&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;mportantes que código&lt;/span&gt;. E por isso, você como projetista de software deve investir mais tempo criando ou usando recursos que ajudem neste quesito, porque é ele que irá efetiv&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;amente, trazer dif&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;eren&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;cial para a TI.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;&lt;br /&gt;O que tudo isso têm a ver com o Drools Guvnor&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;?&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt; O ponto deve ser que assim como projetistas de software, pessoas não técnicas devem poder cr&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;iar e inventar. Pessoas de negócio devem poder criar suas estratégias, documentar seu con&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;hecimento, &lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;co&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;mpartilhar suas decisões, gerenciar todo esse conhecimento e acima de tudo, &lt;span style="font-weight: bold; font-style: italic;"&gt;poder fazer tudo isso, sem o&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;&lt;span style="font-weight: bold; font-style: italic;"&gt; auxílio da TI&lt;/span&gt;. E é ai que entra o Drools Guvnor e o JBoss BRMS, como ferramentas que poss&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;ibilitam esse foque mais acentuado em regras e conhecimento e muito menos, em baboseiras como s&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;eparação de código e blá blá blá. Com o Guvnor, é possível que eles possam criar a se r&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;einventar, mas a&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;inda sim possibilitando que a TI possa usufruir dos seus esforços reutilizando (ou aferindo) as regras criadas por eles.&lt;br /&gt;&lt;br /&gt;Neste post irei mostrar como instalar, c&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;onfigurar e criar um exemplo simples no Drools Guvnor, a plataforma de regras web&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt; do framework D&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;rools. O &lt;a href="http://www.jboss.org/drools/drools-guvnor.html"&gt;Drools Guvnor&lt;/a&gt; é um sub-projeto do Drools que está ganhando um espaço cada vez maior no mercado de tecnologia da informaç&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;ão, especialmente sua versão enterprise suportada, que&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt; é o &lt;a href="http://www.jboss.com/products/platforms/brms/"&gt;JBoss BRMS&lt;/a&gt;. A cada cliente que faço uma&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt; demonstração do produto, todos enxergam inúmeras possibilidades a serem ex&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;ploradas, por se tratar de um software que além de robusto e estável, é bem simples de usar.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;1) Baixe a última versão do Drools Guvnor&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;A primeira coisa a se fazer é montar um ambiente para a plataforma Guvnor. Para isso, você deverá ter uma cópia do mesmo. Baixe uma versão estável do&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt; Drools Guvnor do site da JBoss da comunidade. Você pode baixar o Guvnor já com o servidor de aplicação (opção StandAlone) ou poderá baixar o mesmo "avulso", onde apenas um .WAR será disponibilizado. Para estes testes, faça o downloa&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;d da versão avulsa. Para este post, usei &lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;a versão 5.0 GA do Guvnor, e um JB&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;oss AS versão 4.2.3 GA. Utilize o JDK 5.X para estes testes, incluindo o cli&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;ente Java.&lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;2) Instale o pacote em alguma in&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;s&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;tância&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;&lt;span style="font-weight: bold; font-style: italic;"&gt; do J&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Boss AS&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;A instalação do Guvnor não pode ser mais simple&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;s: Apenas copie o arquivo .WAR baixado para a pasta deploy do seu JBoss AS. Inicie &lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;o servidor JBo&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;ss e repare quando o módulo Web for reconhecido pelo JBoss Deployer. Ele irá criar o se&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;guinte contexto web: &lt;a href="http://localhost:8080/drools-guvnor"&gt;http://localhost:8080/drools-guvnor&lt;/a&gt;&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;3) Crie um pacote de negócios e um pequeno modelo de domínio&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Acesse a URL do Guvnor, e você deverá ver uma interface de login. Para ter a&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;ces&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;so a plataformas de regras, primeiro você deverá realizar um&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;a autenticação. Para testes, use o usuário default do Guvnor que é o "admin" cuja senha também&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt; é "admi&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;n".&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center; font-family: verdana;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_xvsPdhzsV0E/S3rKuBIrt_I/AAAAAAAAAuA/9MwPQBFigpQ/s1600-h/fig1.JPG"&gt;&lt;img style="cursor: pointer; width: 200px; height: 66px;" src="http://4.bp.blogspot.com/_xvsPdhzsV0E/S3rKuBIrt_I/AAAAAAAAAuA/9MwPQBFigpQ/s200/fig1.JPG" alt="" id="BLOGGER_PHOTO_ID_5438882391930943474" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center; font-family: verdana;"&gt; &lt;/div&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;&lt;br /&gt;Depois que você efetuar a autenticação, você será encaminhado para a int&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;erface principal do Guvnor. Nela, você poderá v&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;er que existe um menu na lateral esquerda da tela com opções como "Browse", "Knowledge Bases", "QA", "Package Snapshots" e "Administration". Neste post não iremos dar detalhes específicos sobre todas as funcionalidades do Guvnor, a documentação do mesmo deverá ser suficiente caso você precise disso. Ire&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;mos foca&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;r na parte mais importante do Guvnor, que é o conceito de Knowledge Bases. Knowle&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;dge Bases ou "Bases de Conhecimento" são repositório&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;s de informações sobre regras, domínios, testes e fatos. Elas são &lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;operacionalizadas através do conceito de pacotes, ou seja, repositórios de coisas relacionadas. Logo, para começar a utilizar o Drools Guvnor, você deverá criar um ou mais pacotes de&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt; conhec&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;im&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;ento.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;Vamos criar um pacote de conhecimento de testes. O cenário se&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;rá o seguinte: Imagine que você deseja criar um conjunto de regras e p&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;roc&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;essos sobre notas &lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;fiscais eletrônicas. A idéia é que todo conhecimento sobre notas fiscais eletrônicas esteja dentro deste pacotes que iremos criar. Para criar um pacote, clique em "Knowledge Bases" e no botão suspens&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;o que aparece (O botão "Create New") escolha "Create New -&gt; New Packag&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;e". Uma janela será aberta para que você entre com algumas informações sobre o pacote. Entre com as inform&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;ações conforme a figura abaixo e clique em "Create Package".&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: center; font-family: verdana;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_xvsPdhzsV0E/S3rNAOQtZMI/AAAAAAAAAuI/z-NMCQCpWkk/s1600-h/fig2.JPG"&gt;&lt;img style="cursor: pointer; width: 200px; height: 98px;" src="http://2.bp.blogspot.com/_xvsPdhzsV0E/S3rNAOQtZMI/AAAAAAAAAuI/z-NMCQCpWkk/s200/fig2.JPG" alt="" id="BLOGGER_PHOTO_ID_5438884903715169474" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;&lt;br /&gt;Depois que você confirma&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;r a criação do pacote, o Drools Guvnor irá atualizar sua interface e você poderá ver que seu novo pacote "nfe" já possui itens interno&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;s &lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;a serem criados, a saber, os itens que formarão a sua base de conhecimento sobre notas fiscais eletrônicas&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style="text-align: center; font-family: verdana;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_xvsPdhzsV0E/S3rOJL8Ha2I/AAAAAAAAAuQ/su-Va7iF5aU/s1600-h/fig3.JPG"&gt;&lt;img style="cursor: pointer; width: 200px; height: 186px;" src="http://4.bp.blogspot.com/_xvsPdhzsV0E/S3rOJL8Ha2I/AAAAAAAAAuQ/su-Va7iF5aU/s200/fig3.JPG" alt="" id="BLOGGER_PHOTO_ID_5438886157222374242" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;&lt;br /&gt;Temos que formar nossa "opnião" sobre notas fiscais eletrônicas. Para isso, temos que formular nossas idéias e conceitos sobre o que está relacionado a notas fiscais. Isso é feito criando-se um domínio ou mapeamento de idéias sobre um determinado assunto. Todos aqueles substantivos que giram em torno de um determinado assunto são potenciais domínios a serem mapeados. Por exemplo, se você refletir um pouco sobre notas fiscais eletrônicas, irá mapear claramente em sua cabeça o processo de requisição de notas fiscais. Alguem pede a nota, e alguem fornece a nota. E neste cenário, duas informações são vitais: O valor da nota, e um status que informe a situação do pedido da nota. Podemos então colocar em nossa&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt; base de c&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;onh&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;e&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;cimento a idéia sobre "PedidoNotaFiscal" que possui como informações vitais, o "valor" e o "status" da nota. Vamos então modelar este substantivo.&lt;br /&gt;&lt;br /&gt;Clique novamente no botão suspenso "C&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;reate New" e &lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;agora, escolha a opção "New Declarative Model". será aberto uma janela para c&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;riação &lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;de&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt; u&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;m novo modelo. Entre com as informações abaixo e clique no botão "OK".&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;&lt;br /&gt;&lt;/span&gt;&lt;div style="text-align: center; font-family: verdana;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_xvsPdhzsV0E/S3rQwKp7-fI/AAAAAAAAAuY/C5TzTSCdlBo/s1600-h/fig4.JPG"&gt;&lt;img style="cursor: pointer; width: 200px; height: 119px;" src="http://4.bp.blogspot.com/_xvsPdhzsV0E/S3rQwKp7-fI/AAAAAAAAAuY/C5TzTSCdlBo/s200/fig4.JPG" alt="" id="BLOGGER_PHOTO_ID_5438889025915845106" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;&lt;br /&gt;O que acabamos de criar foi um modelo declarativo. Um modelo declarativo é uma forma do Drools Guvnor onde podemos modelar nossos domínios usando um editor visual Web que gera um ou mais tipos baseados em XML. Pense, análogamen&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;te falando, n&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;estes tipos como se fossem DynaActionForms do Struts, ou seja, elementos que representam entidades de um aplicativo, mas que você não quis escrever uma classe Java para isso. Caso você queira usar uma classe Java para representar seus domínios, usando por exemplo, tipos baseados em POJOs, você poderia escolher a opção "Create New -&gt; Upload POJO Model JAR" mas iremos deixar isso para um próximo artigo.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;Será aberto no editor visual do Guvnor uma interfa&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;ce onde você poderá criar um ou mais tipos complexos, conhecidos dentro do Guvnor como "Fact Types" ou simplesmente, tipos. Para criar nosso domínio, clique no botão "Add new Fact Type". Será &lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;aberto uma janela de popup para que você entre com o nome do seu domínio. Escrev&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;a "Pedid&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;o&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;N&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;otaFiscal" e clique em "OK".&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;Seu novo domínio será colocado dentro da interface. Se você o expandir, irá ver que abaixo dele aparece um botão "Add Field". Neste botão você poderá configurar&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt; todas as caracteristicas do seu domínio como por exemplo o valor da nota fiscal. Clique no botão "Add Field". Será apresentado uma janela como abaixo:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style="text-align: center; font-family: verdana;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_xvsPdhzsV0E/S3rXD2-9EuI/AAAAAAAAAug/mLIomDTr8gU/s1600-h/fig5.JPG"&gt;&lt;img style="cursor: pointer; width: 200px; height: 48px;" src="http://1.bp.blogspot.com/_xvsPdhzsV0E/S3rXD2-9EuI/AAAAAAAAAug/mLIomDTr8gU/s200/fig5.JPG" alt="" id="BLOGGER_PHOTO_ID_5438895961302438626" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;&lt;br /&gt;Na caixa "Field Name" entre com "valorNota"&lt;/span&gt;&lt
