Este post é, na verdade, uma proposta de atividade que estou enviando para o evento FLISOL/DF, edição 2013. Esse evento é de fundamental importância para a comunidade que atua com software livre no Brasil, especialmente no Distrito Federal, onde desenvolvedores Java vem trabalhando com softwares dessa categoria há muito tempo, sejam eles disponibilizados pelos grupos Apache, JBoss, GlassFish, etc. Sendo assim, eu considero de extrema relevância uma apresentação na forma de oficina/tutorial que demonstre como uma aplicação, com requisitos corporativos, pode ser construída e implantada em produção, partindo da montagem do ambiente de desenvolvimento para uma equipe, até sua instalação num ambiente que garanta alta disponibilidade, tolerância a falhas e capacidade para atender alta demanda transacional. Tudo isto, é claro, utilizando softwares livres e a especificação Java EE 6.
A proposta é um tutorial de quatro (4) horas que atenda tanto ao público que trabalha com desenvolvimento, quanto ao público que atua na área de infraestrutura. Ambos sairão ganhando e mais integrados pois, para os programadores, será uma ótima oportunidade de entenderem, de forma prática, como conceitos não funcionais (como tolerância a falhas, balancemento de cargas) são trabalhados pela equipe de infraestrutura. De forma similar, essa última equipe poderá ter uma idéia mais clara sobre como os servidores de aplicações, instalados e configurados por eles, oferecem os serviços que atendem aos requisitos de negócio dos sistemas que são implantados.
A estrutura que proponho para esse tutorial é a seguinte:
- Duas (2) horas para explicações relativas a montagem e o desenvolvimento de uma aplicação Java EE 6;
- Uma (1) hora para explicações relativas a montagem e implantação da aplicação num ambiente de produção privado;
- Uma (1) hora para explicações relativas a montagem e implantação da aplicação num ambiente de cloud computing;
Desenvolvendo uma aplicação Java EE 6 (2 horas)
Montando um ambiente de desenvolvimento (~ 30min)
Nesta parte do tutorial eu cobrirei a montagem de um ambiente de desenvolvimento partindo da criação de uma máquina virtual utilizando o VirtualBox, seguindo pela instalação de um sistema operacional GNU/Linux, de uma versão livre do JDK (OpenJDK), de servidores de aplicações (JBoss AS e GlassFish), de ambientes integrados de desenvolvimento (IDEs), de uma ferramenta para a gerência de versões (Git), de um banco de dados (MySQL) e de ferramentas para o auxílio na construção de aplicações Java (Maven, Nexus e Forge).
Links para alguns artigos, tutoriais e documentos (vários de autoria própria) que serão referenciados e/ou utilizados nas demonstrações desta parte:
- http://blog.ladoservidor.com/2013/02/utilizando-um-arquivo-kickstart-para.html
- http://blog.ladoservidor.com/2013/02/criando-uma-vm-centos-via-linha-de.html
- http://blog.ladoservidor.com/2013/02/criando-e-utilizando-um-mirror-local-do.html
- http://a.ladoservidor.com/tutoriais/maven-nexus/index.html
- http://forge.jboss.org/
- http://toolscloud.com
Desenvolvendo a aplicação (~ 1h e 30 min)
Após a montagem do ambiente eu explicarei a construção de uma aplicação (app) Java EE, do zero e passo a passo, numa abordagem guiada por testes (TDD). Esta app poderá ser executada nas últimas versões de servidores de aplicações Java como o GlassFish e o JBoss. APIs Java EE como CDI, JSF, JPA e EJB serão a base para a construção desta app. Tudo será explicado, detalhadamente, na dose de tempo permitida.
Links referenciados nesta parte:
- https://oracleus.activeevents.com/connect/sessionDetail.ww?SESSION_ID=5064
- http://a.ladoservidor.com/tutoriais/arquillian-shrinkwrap/index.html
Implantando a aplicação num ambiente de produção próprio (1 hora)
A implantação de uma aplicação em produção envolve pegar uma última versão tagueada, testada e gerada automaticamente por um ambiente de integração contínua e, através de scripts, publicar esta versão em uma ou várias instâncias de servidores de aplicações em execução. Neste ponto, os desafios também são grandes pois são necessários procedimentos automáticos (que possibilitem rollback) e cuidados relativos a disciplina de gerência de mudanças.
Nesta parte do tutorial eu dicutirei tais procedimentos e, além disto, explicarei como (em máquinas virtuais já preparadas) podemos atingir requisitos não funcionais como alta disponibilidade e volume transacional (através de clusters, balanceadores de carga, etc).
Algumas ferramentas discutidas/apresentadas:
Links referenciados nesta parte:
- http://blog.ladoservidor.com/2010/11/tutorial-montando-e-testando-um-cluster_25.html
- http://blog.ladoservidor.com/2010/11/tutorial-montando-e-testando-um-cluster.html
Implantando a aplicação num ambiente de cloud computing (1 hora)
Como será discutido, a montagem de um ambiente de produção que suporte requisitos não funcionais cada vez mais exigentes é cara, lenta, e demanda mão de obra muito especializada. Muitas vezes, a solução mais rápida para ter uma aplicação implantada em produção suportando características como tolerância a falhas e alta disponibilidade é a contratação ou a instalação de ambiente de cloud computing. Hoje em dia, existem várias alternativas (livres ou proprietárias) para isto.
Nesta parte do tutorial eu falarei sobre o OpenShift, um ambiente de cloud computing PAAS open source da Red Hat, e como utilizá-lo para implantar a aplicação que criei na primeira parte deste tutorial.
Links para esta parte: