Como Fiz o EncomendaZ 3.0 – Parte 1

Antes de mais nada, quer tirar dúvidas sobre este post? Acompanhe-me no Twitter: @marlonscarvalho. Agora, vamos ao que interessa. O EncomendaZ foi um projeto que surgiu meio que do nada. A primeira versão eu fiz só para aprender um pouco sobre programação com Swing. Aliás, eu sou fanzarço de programação desktop e não curto muito “programação orientada a tags”. A primeira versão você encontra até hoje no Google Code, neste endereço: http://code.google.com/p/encomendaz/. Foi uma versão sem muitas pretensões, mas acredito que já aconteceu com você também: você faz um programa, algumas pessoas começam a usar e elogiar mas você acha que podia ter feito melhor. E foi assim comigo. Resolvi, então, fazer uma nova versão, só que desta vez bem melhor.

O sucesso da versão 2.0 me fez pensar na versão 3.0. Fui bastante relutante em lançar ela, pois daria um trabalho monstro fazer. Mas eu fiz. E, desta vez, a motivação foi aprender ainda mais a programar para desktop, desta vez usando frameworks diferentes e padrões de projeto bastante conhecidos. Eu já tinha vontade de descrever todo o processo de criação desta versão. Sei que muitas pessoas também curtem programação desktop, mas não sabem por onde começar. Aliás, ultimamente você só encontra referências para programação Web. Parece que tudo é Web hoje em dia e sistemas desktop morreram. Pra mim, pura balela.

Eu vejo mais um mundo onde serviços estão na internet e aplicativos, seja desktop, mobile ou web, os consome. Tem aplicativos que são muito mais fáceis de serem usados no Desktop. São mais práticos, elegantes, tem mais funcionalidades, são rápidos e podem funcionar offline. O que é errado é criar aplicativos desktop “autocontidos”. Ou seja, tem seu próprio banco de dados, não compartilha dados com outros aplicativos. Enfim, falo dos “aplicativos ilha”: vivem em seu próprio mundo e esquecem o resto. Mas, hoje, todo mundo só pensa em fazer aplicativo pra browser, como se fosse a bala de prata. Estão errados.

O meu objetivo é criar uma sequência de posts descrevendo todo o processo criativo que levou à concepção da versão 3.0, que você pode usar através do Webstart, clicando aqui. O código fonte do EncomendaZ 3.0 está disponível no Bitbucket e você pode baixar, usar, brincar… Espero que estes posts sejam úteis para você.

Código fonte da camada de apresentação: https://bitbucket.org/alienlabz/encomendaz-swing
Código fonte do core: https://bitbucket.org/alienlabz/encomendaz-core

Primeiro, vamos listar as tecnologias envolvidas. São muitas:

  1. Maven para gerenciar o projeto;
  2. Eclipse Indigo como ambiente de desenvolvimento;
  3. Java/Swing para a camada de apresentação;
  4. Framework Demoiselle;
  5. Hibernate para persistência;
  6. HSQLDB para armazenar os dados;
  7. Velocity para geração dos templates de e-mail;
  8. Jasypt para criptografia de senhas e etc;
  9. Apache Commons E-mail para o envio de e-mail;
  10. Barbecue para a geração do código de barras;
  11. JasperReports para a geração dos relatórios;
  12. Jide OSS para alguns componentes de tela;
  13. HTTPClient da Apache para conexão com a internet;
  14. Quartz para o agendamento de tarefas;
  15. MigLayout para a criação de formulários;
  16. SwingX para componentes de tela;
  17. L2FProd para ter o componente de barra de ações lateral;
  18. Insubstantial para os temas Swing;
  19. JCalendar para ter um calendário bonito no Swing;
  20. JBusyComponent para ter um “Loading” tipo o Ajax em Web;
  21. Zeus JSCL para ter um componente mais amigável para exibir erros;
  22. Java WebStart para publicação.

Vou tentar justificar o uso de cada uma destas tecnologias. Ou não. 🙂 São muitas e talvez eu não consiga chegar até o final. Vou começar justificando o uso do Framework Demoiselle. Você conhece? Não? Pois saiba que você deveria dar uma chance a ele. E não foi só porque eu participei da equipe que o criou, mas porque é um ótimo framework, de fato. O Demoiselle teve sua concepção inicial no Serpro, mas hoje já é usado por diversas empresas, incluindo aí outros órgãos governamentais, como: TRT, MPU, Prodeb, Fundação Luís Eduardo Magalhães e por aí vai.

E estas empresas não o estão usando por imposição. Ninguém é obrigado a usar o Demoiselle. Usam porque gostaram e tecnicamente é um ótimo framework. Quer entrar em contato com a equipe do Demoiselle? Primeiro, use a lista de discussão. Depois, acesse o fórum. E também tem os @zyc, @wegneto, @e_saito e @Atiboni no Twitter para vocês tirarem dúvidas. 🙂

E como foi que o Demoiselle facilitou no EncomendaZ? Simples:

  • Injeção de Dependência com Weld é o bicho! 🙂 Nada de criar exaustivas fábricas;
  • As classes de template para CRUD diminuíram consideravelmente a quantidade de código para escrever;
  • O POM (Maven) parent do Demoiselle para aplicações Desktop simplificou a criação do projeto;
  • O controle de transações é fácil e extensível. Não fosse por isso, eu não teria conseguido resolver alguns problemarços que apareceram!
  • O ResourceBundle próprio do Demoiselle, com substituição de palavras-chave é uma mão na roda;
  • Já fornece algumas validações comuns no Brasil através do componente demoiselle-validation.

Eu poderia citar outras, mas estas aí já são suficientes. O que posso dizer é que o Demoiselle está funcionando rock-solid no EncomendaZ 3.0 e nenhum erro reportado até hoje foi proveniente dele. Contudo, tive alguns probleminhas e vou citar eles em breve. No próximo post, vou descrever o principal padrão de projeto que usei: Passive View. É um ótimo padrão e, em conjunto com o Demoiselle, forma a base do aplicativo.

Preguiça, Desmotivação, Novidades…

É o seguinte: depois de tanto tempo sem escrever, resolvi voltar a postar no blog, nem que seja um post ridículo. E eis aqui um post ridículo. Parei de escrever por diversos motivos, desde a mais pura e genuína preguiça até a desmotivação. Preguiça não é um problema, basta saber viver com ela em harmonia. Preguiça faz bem. O prejudicial sempre é o excesso, seja lá do que for. E eu tive preguiça em excesso. A parte da desmotivação é uma história complexa, sem graça e que não estou com vontade de contar.

Mas, vamos aos fatos. Muitas coisas aconteceram e eu gostaria de contar algumas e largar alguns comentários inocentes e escrotos ao mesmo tempo. Vou começar do mais recente, pois está fresco na memória. Fiz uma palestra no evento de comemoração dos 10 anos do Eclipse e que aconteceu na UNIRB. O comentário pertinente é que eu realmente não tinha a mínima ideia do que falar por lá. E inventei um tema. Não saiu como eu gostaria, mas tudo bem. A parte ruim é que o auditório estava vazio. Gatos pingados apenas. Mas nada que me surpreenda, pois Salvador é isso aí mesmo. Basta ver como eventos do porte do LinguÁgil e Maré de Agilidade recebem pouquíssimas pessoas. Se liga no vídeo aí embaixo.

Segundo fato de relevância para ser comentado é que… esqueci. Então, vamos ao terceiro fato de relevância a ser comentado. Como meu último post foi em Junho, saibam que eu fiz 34 anos em 17 de agosto. O quarto fato de relevância a ser comentado é que eu fui para o FISL12 e fiz lá uma apresentação sobre o Demoiselle 2. O que eu posso comentar é que o evento é do caralho, Porto Alegre é fria pra porra e eu já xinguei o suficiente para este post. Veja aí os vídeos da palestra e se emocione.



Quinto fato a ser comentado é que fiz também uma apresentação no LinguÁgil 2011. Muito louca, aliás. Foram 4 pessoas, cada uma defendendo “sua” linguagem ou ambiente de programação preferido. Como não poderia deixar de ser, eu protegi o Android. Mas, era tudo armação, a alma do LinguÁgil não é sacanear com o gosto de um ou de outro sobre uma linguagem. Então, se emocione pela segunda vez neste post, vendo o vídeo aí embaixo.

E está bom. O que eu tinha pra dizer, está dizido. Já já eu volto com um post menos idiota. Ponto final.