
"O JBoss é bom, mas dá muito trabalho mexer com ele." ... "O problema do JBoss é que você deve fazer tudo usando XML" ... "Gosto do JBoss ESB, mas ele não me trás produtividade" ... "O AquaLogic é melhor porque consigo construir soluções SOA visualmente" ...
Estas são algumas frases que infelizmente, ainda são ditas pelos usuários de JBoss. As soluções JBoss com o passar dos anos foram (e ainda são) referência no que tange a inovação tecnológica, alinhamento com especificações do JCP e para os desenvolvedores de longa data, uma plataforma simples e estável para aplicações críticas. Mas quando falamos de aspectos de desenvolvimento de soluções, estamos falando de utilizar ferramentas e tecnologias que nos ajudem a fazer as coisas mais rápido, com maior segurança e com maior produtividade.
Vamos refletir um pouco sobre isso. Produtividade está relacionado com diversos aspectos. Um deles, e IMO, o principal deles, é conhecer a tecnologia. Se você entende bem a tecnologia que você usa para construir soluções, você será produtivo, mesmo não usando ferramentas visuais. Pessoas não experimentadas na tecnologia JBoss (e JEE em geral) quando usam o JBoss para construir aplicações, têm a sensação de que as coisas são muito dificeis e complicadas, e que uma ferramenta bonita e visual iria ajudar muito as coisas. Se a frase "Ignorância é uma benção" for realmente verdade, então isso faria sentido.
Mas descordo neste aspecto. Usar ferramentas bonitas e visuais apenas escondem detalhes que você deveria conhecer e o faz não explorar todo o poder da tecnologia. Já usei diversas soluções de JEE, SOA e BPM de diferentes fabricantes (além de JBoss) e em minha experiência, nenhuma delas, seja BEA, IBM, webMethods, Oracle ou TIBCO fugiu da situação: "Quando você precisa de algo mais audacioso e diferente, você precisa abrir a caixa e mecher no motor". Se você usa somente o trivial das ferramentas, você está usando somente as features que o fabricante quer que você use. Você é induzido a aplicar uma linha de raciocínio que lhe restringe possibilidades, que deixa você fechado quanto a personalização de soluções.
OK, mas o que têm isso a ver com JBoss? Bem, a mensagem a ser entendida é a seguinte: JBoss promove soluções que funcionam e que produzem valor. Pensamos primeiro em resolver os problemas do que resolver os problemas de uma forma elegante. Temos a ciência que, resolver problemas é um processo que envolve a exploração de possibilidades, a exaustão de características. Se focarmos somente na criação de soluções bonitas e "produtivas", não iremos atingir nosso principal objetivo: Fornecer tecnologias que resolvem problemas.
Por isso, em JBoss tudo é possível. Tudo é personalizável, tudo é adaptável. Mas, entendemos que depois dessa missão cumprida, temos também que fornecer soluções bonitas e agradáveis e que possibilitem a exploração do aspecto chave do JBoss: Resolver problemas. Como disse antes, já pude trabalhar com soluções de SOA de diferentes fabricantes, e sempre tive a necessidade (em todas elas) e abrir a caixa e adaptá-las para resolver problemas. E tendo isso em mente, tenho a impressão de que estas soluções são muito boas, porque elas são bonitas, mas você precisa abrir a caixa, você consegue fazê-lo para resolver problemas.
A cultura que ainda não é clara para a maioria das pessoas é que, assim com estas soluções de outros fabricantes, em JBoss, você também têm além de uma plataforma que resolve problemas, um ambiente robusto, produtivo e elegante para o desenvolvimento de soluções. Mas a parte mais infeliz disso tudo é que, JBoss hoje possui um legado de percepção ... a percepção de que ele é pé duro, feio e improdutivo. Poucas pessoas sabem que, em JBoss, temos soluções tão elegantes quanto, temos wizards, temos designers, temos modeladores, assim como nossos concorrentes. E por esta impressão que nossos clientes têm, é que a Red Hat faz nos últimos anos um trabalho árduo de mostrar que nossas soluções são competitivas no aspecto elegância e beleza, e não só, em tecnologia que resolve problemas.Neste post, irei mostrar como criar uma solução SOA de integração relativamente complexa, usando para isso, nenhum código Java, nenhum código XML e nenhuma das técnicas do tipo "Copie para a pasta Deploy ..." para implantação da solução. Usaremos o JBoss SOA Platform, a versão enterprise do JBoss ESB + Drools + jBPM da Red Hat Middleware. A impressão ao final deste post é que você, usuário ou cliente de JBoss, veja o poder que nossa solução têm, e que você possa apreciar como podemos ser produtivos com JBoss, bastando para isso, conhecer os produtos certos ;-)
Conhecendo um pouco de JBoss Enteprise Middleware
Para criarmos nosso projeto, iremos usar o JBoss Developer Studio. O JBDS é na verdade uma suíte integrada da JBoss baseado no Eclipse que possui ferramentas para criação de diferentes soluções. JBoss separa suas soluções em verticais tecnológicas. Exemplos destas verticais são: JBoss Enterprise Platform (JBoss AS + Hibernate + Seam), JBoss Portal Platform (JBoss AS + Portal + Bridge), JBoss SOA Platform (JBoss AS + jBPM + ESB + Drools), JBoss BRMS (JBoss AS + Drools + Guvnor), JBoss Data Services Platform (JBoss AS + MetaMatrix + MetaMatrix Designer + MetaMatrix Server), JBoss Web Server (Tomcat + Apache HTTP Server), JBoss Communications Platform (JBoss AS + Mobicents), JBoss Operations Network (JOPR + Plugins).
Cada uma destas plataformas possui um fim muito bem definido, seja SOA, portal ou federação de dados. Para auxiliar o desenvolvimento de todas estas "verticais", temos o JBoss Developer Studio, uma suíte de desenvolvimento baseado no eclipse que fornece plugins e features interessantes para cada uma destas plataformas. Todas estas soluções são oferecidas nas comunidades JBoss.ORG gratuitamente. Entretanto, você também adquirir as mesmas soluções com um pouco mais de estabilidade, certificação e segurança jurídica através das subscrições. As subscrições são um modelo de negócio baseado em open source que a Red Hat utiliza para prover aos seus clientes coisas como:
- Suporte 24 x 7. Você não precisa mais procurar respostas no Google, ligue num 0800 da Red Hat, e conte com suporte em português dado por um técnico certificado.
- Suporte Legal: Se você cria soluções baseadas em Open Source, você pode usar a Red Hat como asseguradora legal da sua solução.
- Confiança. Com medo de que o framework seja descontinuado? A Red Hat garante 7 anos da solução datado do contrato de subscrição.
- Certificação. Releases baseados em subscrição possuem certificação de fabricantes de hardware e sistemas operacionais, dando maior garantia em seu deployment.
- TCO (Total Cost Ownership). O produto é seu, mesmo sem a subscrição. Red Hat não vende software, ela vende confiança e estabilidade. Se seu contrato expira depois de um ano, você continua usando o software, fazendo com que seu custo capital (CapEX) seja sempre menor.
Estas são algumas das várias características que a subscrição te dá. Mas não iremos falar nisso aqui em exastão, irei reservar este assunto para outro post. Seja o JBoss Developer Studio, ou o JBoss SOA Platform, ambos podem ser adquiridos via modelo de subscrição. Na sequência, irei mostrar como, usando o JBDS e o SOA Platform, construir uma solução SOA de forma simples e rápida. Dúvidas e interesse no modelo de subscrição, me consulte em particular no e-mail ricardo.ferreira@redhat.com.
Criando uma solução SOA no JBoss Developer StudioPense na seguinte solução: Imagine que você tenha que criar uma aplicação de integração que precise receber um arquivo XML contendo um pedido de compra. Este arquivo será posto num diretório que você deverá ficar monitorando continuamente. Quando o arquivo for posto no diretório, você deverá ler este arquivo, recuperar seu conteúdo, e exibi-lo no console da aplicação. Depois de exibir o conteúdo, você precisará copiar este arquivo para uma outra pasta (uma pasta de saída) e assim que copiar para outra pasta, colocar um sufixo no arquivo para informar que o arquivo fora processado.
Pensou no cenário? Imagine você implementando tudo isso em Java. Com certeza daria um pouco de trabalho, principalmente se você avaliar aspectos mais críticos como: Tamanho do arquivo pode estourar o JVM, cópia do arquivo com locks do sistema operacional, exibição correta do conteúdo considerando regras de encoding, etc. Iremos constrir tudo isso usando apenas o JBoss Developer Studio como ferramenta de desenvolvimento, e o JBoss SOA Platform como ESB de execução da solução. Irei considerar que você já têm ambos os produtos instalados no seu computador.
Primeiro, inicie seu SOA Platform por dentro do JBoss Developer Studio. Para isso, clique com o botão direito no servidor e selecione a opção "Start". Agora vá no menu "File->New->Other" e escolha a opção "ESB/ESB Project". Na caixa do nome do projeto, digite "jboss-soa-simples", e na caixa "Target Runtime" escolha "JBoss SOA Platform 4.3". Clique no botão "Finish".
Assim que você concluir a criação do projeto, será apresentado o editor visual do projeto de ESB. Através deste editor, você cria e configura tudo de uma solução de integração do SOA Platform.
Clique com o botão direito na opção "Providers" e escolha o item "New->JMS Provider". Iremos configurar um provider do tipo JMS que irá definir nosso canal de mensagens. Na caixa "Name" entre com "JBoss Messaging" e na caixa "Connection Factory" entre com "ConnectionFactory". Clique no botão "Next". Na caixa "Channel ID" entre com "jmsChannel". Clique no botão "Finish".
Navegue até o item "jmsChannel->Filter". Será aberto a edição dos detalhes do canal de mensagens. Na primeira caixa "Destination Name" entre com "queue/testQueue".
Clique com o botão direito novamente no item "Providers", escolha a opção "New->FS Provider". Iremos criar um provider do tipo File para que possamos monitorar o diretório que irá receber o arquivo XML do pedido de compra. Na caixa "Name" digite "File Provider". Clique no botão "Next". Na caixa "Channel ID" entre com "fsChannel". Clique no botão "Finish".
Navegue até o item "jmsChannel->Filter". Será aberto a edição dos detalhes do canal de mensagens. na caixa "Directory" entre com um diretório válido do seu computador. Na caixa "Input Suffix" entre com "pedidoCompra.xml". Na caixa "Post Delete" selecione a opção "false". Na caixa "Post Directory" entre com algum diretório válido do seu computador, diferente do diretório de entrada. Na caixa "Post Suffix" entre com ".OK".
Salve as configurações. Até agora, fizemos toda a configuração dos nossos providers que cuidarão do aspecto de receber a mensagem, e entregar a mensagem de saída. Agora, iremos passar para a parte do processamento da mensagem, ou seja, a parte referente ao pipeline de execução. Para isso, iremos configurar um serviço dentro do ESB. Clique com o botão direito do mouse na opção "Services" e escolha a opção "Add Service". Na caixa "Name" entre com "PedidoService". Na caixa "Category" entre com "Proxy Services". Na caixa "Description" entre com "Serviços de Processamento de Pedidos". Clique no botão "Finish".
Será criado duas opções abaixo do serviço: "Listeners" e "Actions". Clique com o botão direito no item "Listeners" e escolha a opção "New->JMS Listener". Na caixa "Name" entre com "jmsListener" e na caixa "Channel ID Ref" seleciona a opção "jmsChannel". Clique no botão "Finish". Clique novamente com o botão direito no item "Listeners" e escolha a opção "New->FS Listener". Na caixa "Name" entre com "fsListener" e na caixa "Channel ID Ref" selecione "fsChannel". Clique no botão "Finish".
Selecione o item "fsListener". Quando você fizer isso, será exibido o editor de propriedades deste listener. Na caixa "Is Gateway", selecione a opção "true". Na caixa "Schedule Frequency", entre com "5". Este é o tempo em segundos que o diretório ser monitorado.
Selecione o item "Actions". No editor de propriedades que se abre, selecione a opção "OneWay" na caixa "MEP". Clique com o botão direito no item "Actions" e escolha a opção "New->System Println". Na janela que se abre, entre com "printMsg" na caixa "Name" e "Pedido de Compra" na caixa "Message". Com estes passos, configuramos o que será feito quando a mensagem chegar no pipeline de execução do serviço dentro do ESB.
Salve as configurações. Nosso projeto está pronto. Agora precisamos implantar o novo módulo dentro do ESB e realizar os testes. Para fazer a implantação, clique com o botão direito no SOA Platform, e escolha a opção "Add and Remove Projects". Selecione o projeto "jboss-soa-simples" e clique no botão "Add" para adicioná-lo dentro do SOA Platform. Feito isso, clique no botão "Finish".

Depois que você implantar o novo módulo ESB dentro do SOA platform, você poderá ver que o módulo foi corretamente instalado analisando o log do servidor. Deverá aparecer um conjunto de logs com os da listagem abaixo.
Faça um teste. Crie um arquivo XML chamado "pedidoCompra.xml" com qualquer conteúdo (Como não iremos processar o XML, o conteúdo não importa neste exemplo) e copie este arquivo para o diretório de entrada que está sendo monitorado pelo SOA Platform. Após alguns segundos, o ESB vai reconhecer o arquivo, e a seguinte mensagem será mostrada no console do servidor:
E claro, depois que esse log for exibido, verifique o diretório de entrada, deverá estar vazio. Se você olhar no diretório de saída, você irá encontrar um arquivo chamado "pedidoCompra.xml.OK", indicando que o arquivo fora processado com sucesso.
Conclusão
Neste post, vimos que é possível construir soluções críticas de uma forma simples e produtiva, usando para isso as soluções JBoss Enterprise. Dado este post, gostaria de fomentar a seguinte pergunta:
Você ainda acha que JBoss é improdutivo?
Boas Soluções ;-)