Translate

quarta-feira, 26 de junho de 2013

Desenvolvendo uma aplicação com PostgreSQL, JBoss 7.1.3 + Maven 3 + JEE 6 + Arquillian + Flex 3 + Graniteds 3 - Part I

Fala galera! Bem, hoje pretendo iniciar uma série de artigos demonstrando como criar uma aplicação juntando todas estas tecnologias: PostgreSQL, JBoss 7.1.3, Maven 3, JEE 6, JBoss Arquillian, Flex 3 com Graniteds 3.

Vou começar dando uma breve explicação de porque decidi juntar todas estas tecnologias.

  • PostgreSQL - Um banco de dados bastante maduro no mercado, amplamente utilizado na comunidade open source, adotado fortemente em setores do governo brasileiro e com muitos recursos que lembram o Oracle.
  • JBoss 7.1.3 - Um servidor de aplicações largamente utilizado, maduro e bem consolidado no mercado. Mantido pela respeitada Red Hat. É free e open source apesar de possuir uma versão EAP que pode ser licenciada para aquisição de suporte e atualização. Infelizmente não faz parte deste artigo cobrir todas as capacidades do jboss, mas você pode encontrar excelentes informações nos sites http://jbossdivers.wordpress.com/http://middlewaremagic.com/jboss/http://www.mastertheboss.com/ entre outros.
  • Maven 3 - Um gerenciador de dependências, organizador de projetos, automatizador de builds e testes e muito mais. O maven realmente ajuda bastante no processo de desenvolvimento de softwares. Também não está no escopo deste artigo cobrir mais detalhes sobre o maven.
  • JEE 6 - A idéia é desenvolver uma aplicação utilizando apenas as bibliotecas do JEE 6 para funcionalidades como injeção de dependência, inversão de controle, interceptação, controle transacional, datasource através de JNDI, JPA, segurança, mensagens. Buscarei ao máximo demonstrar o uso da especificação JEE 6 para satisfazer nossas necessidades e farei uso ao máximo que puder do middleware.
  • Arquillian - Ou JBoss Arquillian é uma excelente ferramenta para testes em ambientes de integração como servidores de aplicação por exemplo. O arquillian auxilia em muito concentrar os testes onde queremos focar e permite executar nosso código dentro de um container real. Não está no escopo deste artigo demonstrar todas as funcionalidades do arquillian mas você pode obter excelente informação no site http://arquillian.org/.
  • Flex 3 - Este talvez seja o ponto mais polêmico das escolhas. Aqui vale a pena contar uma breve historinha. Se você é ligado ao mundo de desenvolvimento mobile deve ter ouvido falar que em algum momento um engenheiro da adobe publicou num blog que a adobe abandonaria o flash player para os browsers de dispositivos móveis. Bem, esta foi uma gota que caiu no meio do oceano e chegou até a praia como um verdadeiro tsunami. Choveram informações desencontradas e afirmações sem base que contaram com a falta de esclarecimento da adobe... enfim, o que muitos deram como certo foi que a adobe iria descontinuar o flash e consequentemente o framework flex. Infelizmente muita gente abandonou o framework e algumas empresas voltaram atrás com projetos. Pois bem, logo em seguida a adobe concretizou a doação para a fundação apache do projeto flex sdk para que esta o evolua, ainda que a adobe mantenha engenheiros seus focados no projeto. Hoje o projeto está sendo tocado pela fundação apache. No site http://flex.apache.org/ você pode se atualizar. Em resumo, mais de um ano depois que se espalhou na net que o flash/flex havia acabado o projeto continua firme e forte e os sistemas desenvolvidos nesta plataforma continuam funcionais e fazendo uso das atualizações do flash player. Hoje eu não só utilizo em projetos novos como também evoluo projetos antigos que sinceramente não vejo o menor motivo para trocar. A tecnologia se encaixa perfeitamente ao ambiente de meus clientes, não há qualquer impedimento técnico para execução do sistema web, o cliente está satisfeito e seus requisitos devidamente atendidos e tenho domínio da tecnologia. Ha sim, e a escolha pelo 3 ao invés do 4 é pura e simplesmente didática. Considero o flex 3 mais maduro e mais fácil de entender que o flex 4.
  • Graniteds 3 - Bem, este aqui é outro cara que também merece um pouco de explicação. Lembro-me perfeitamente que quando comecei a trabalhar com flex por meados de 2008~2009 haviam poucas informações e opções de RPC para flex e java. Já existia o blazeds e um concorrente próximo era o graniteds. Na época em que tentei usar o granite não tive sucesso e seus recursos eram mais fracos que o oferecido pelo blazeds, sem mencionar que o blazeds era mantido pela própria adobe como amostra gratis de seu caríssimo life cycle data service. Pois bem, o tempo foi passando e com o uso constante do blazeds muitas mazelas foram aparecendo e tivemos que recorrer a tratamentos caseiros como o Number -> Double zero, problemas de serialização, lazyloading do hibernate entre outros pequenos e contornáveis problemas. A questão mais importante é que o projeto blazeds parou no tempo enquanto o granite se reinventou. O pessoal da http://www.graniteds.org fez um trabalho formidável na restruturação do framework e vem mantendo-o desde então. Confesso que fiquei impressionado com a quantidade de recursos presentes no framework e como ele resolveu muitos dos problemas que tinhamos. No momento da escrita deste artigo a ultima versão disponibilizada é a 3.0.0.M2.
Bem, tecnologias explicadas a parte podemos começar nossa aventura. A intenção desta série de artigos é construir uma aplicação que gerencie eventos. O sistema deve ser capaz de cadastrar participantes e trabalhadores dos eventos, bem como guardar as atividades de cada trabalhador, alocar os participantes em quartos e permitir consultas em base histórica. 

Vamos primeiramente configurar o básico de nossa base de dados, deixaremos que a nossa implementação de persistência crie as tabelas para nós. Em seguida vamos configurar nosso servidor de aplicação, afinal, temos que ter em mente que estamos desenvolvendo nossa aplicação para ser executada sobre um servidor de aplicação então, nada mais natural que entendermos e fazermos uso de seus recursos. Depois configuraremos nossas entidades, pretendo usar o modelo tradicional ainda que bastante controverso e também apelidado de "entidade anêmica". Para não ficarem tão "anêmicas" anotaremos nossas classes com validações de integridade. Não pretendo tratar de questões como DDD nestes artigos. Com o avançar do projeto aplicaremos a divisão de camadas em nosso projeto separando interesses como persistência, regras de negócio com o uso de serviços, controladores para tratamento de requisições externas e a camada visual modular utilizando recursos do flex enriquecido pelo graniteds.

Para podermos desenvolver este projeto precisaremos de:
  • Oracle JDK 1.7
  • eclipse indigo (ou superior) com os plugins
    • maven
    • graniteds
    • jboss tools
    • Flash Builder IDE - aqui é a parte desfavorável do flex, para ser produtivo você tem que contar com a ide do flash builder que é paga. Para estudantes e profissionais liberais isso se torna um custo difícil de retorno, por outro lado para empresas não se trata de um custo tão significativo. Felizmente a adobe concede a estudantes licenças de uso com algumas limitações. Por outro lado é possível desenvolver sem a necessidade do flash builder ide, você pode escrever todo seu código e compilar com a sdk do flex através de linha de comando ou scripts ant. Nos exemplos estarei usando o flash builder IDE.
  • JBoss Application Server 7.1.3
  • Postgres 9.2
  • Apache Maven 3.0.5
  • Apache Ant 1.8.4
Vamos sempre usar a política de nunca reinventar a roda, a não ser por dois motivos:
  1. A roda que existe não rola e é meio quadrada.
  2. Não temos conhecimento da roda.
Assim sendo, não iremos relacionar aqui tópicos como:
  • Como instalar e configurar o postgres
  • Como instalar jdk
  • como instalar e configurar o eclipse
  • como instalar o maven
  • como instalar o ant
Certamente trataremos de tópicos relevantes para nossos artigos, todos os demais podem facilmente ser obtidos na net onde encontrarão materiais com bastante qualidade em sua grande maioria na língua inglesa mais também há excelentes artigos escritos no idioma português.

Vamos começar a brincadeira?

segunda-feira, 24 de junho de 2013

Estou na faculdade e Preciso de um estágio! O que preciso fazer? Quais os primeiros passos para me tornar um desenvolvedor?

Fala galera. Bem, este post na verdade é uma dica para os que estão começando com a carreira de desenvolvimento. Venho constantemente sendo indagado por colegas que estão entrando na área e querendo saber como proceder, alguns cursando 2° ou 3° período do curso. Para começar eu sugiro que deem uma lida no post "Minha historinha", nele eu relato um pouco de minha experiência e possivelmente pode lhe ajudar.

Tenho acompanhado atentamente alguns novos bacharéis que buscam seu lugar ao sol na vasta área de TI. Pelo fato de já ter participado na escolha de alguns processos seletivos e também de ministrar aulas em algumas universidades pude acompanhar de perto muitos destes novos profissionais. A situação é um tanto delicada pois pude observar um verdadeiro abismo entre a academia e o mercado de trabalho. É fato que a função da academia não é lhe fornecer o conhecimento específico em determinada ferramenta para que você saia de lá especialista em uma linguagem X ou Y. A visão acadêmica é muito mais abrangente e aprofunda bastante conceitos que vão te ajudar a se nortear. É muito importante saber o porquê das coisas ao invés de simplesmente saber fazer.

Por desconhecimento ou desentendimento desta função da academia, muitos jovens então entrando na faculdade e esperam sair de lá como especialistas em desenvolvimento ou infraestrutura. Daí é inevitável a frustração quando se deparam com a realidade do mercado de trabalho. Poucas são as empresas que ainda oferecem estágio para profissionais iniciantes. Tenho acompanhado algumas seleções e o que percebo é que as empresas levam muito em consideração que um jovem pode dar muitos passos na carreira de desenvolvimento sem necessariamente terem adquirido aquele conhecimento pela faculdade.
Em minha opinião eu concordo em parte com esta premissa. Posso dizer por experiência própria que todos os bons profissionais de TI que conheço são autodidata. Acredito sim ser possível adquirir certo nível de conhecimento fora da academia e se especializar em algo mais focado no mercado de trabalho. Por outro lado algumas pessoas sentem mais dificuldade em aprender determinado assunto sozinhas e sentem mais segurança com o apoio de um instrutor.

O fato é que seja autodidata ou através de cursos extra o universitário ou profissional iniciante deve buscar especialização. E isso exige muita dedicação. Envolve por exemplo deixar as festinhas de final de semana de lado, a farra durante a semana deixa de existir, o passeio na praia tem que ser cancelado, observar pela janela do quarto os amigos saindo pra bater bola enquanto você vai passar o dia e possivelmente a noite enfiado nos livros e em frente a um computador (sem facebook, orkut, google+, etc...).
Posso afirmar também que não conheço um só bom profissional de TI que não invista no mínimo de 4 a 16 horas semanais em estudos e atualizações.

Meus conselhos para esta moçada que está chegando é:
  1. Não ignore o conhecimento acadêmico, ele será sua base.
  2. Não se limite ao conhecimento acadêmico. Lembre-se que a academia não é onde você quer chegar mas sim um local que lhe apontará para onde você deve ir.
  3. Faça cursos extras em tecnologias de mercado como Java web e frameworks como (hibernate, spring, jsf, structs).
  4. Comece a desenvolver projetos para resolver situações que você vivencia cotidianamente. Imagine o Joaquim da padaria, o quanto você poderia ajudá-lo com um software para gerir seu negócio.
  5. Não se prenda a tecnologia. Aprenda conceitos, metodologias e processos de desenvolvimento.
  6. Desenvolva capacidade de análise e não se limite a ser um mero implementador de códigos.
  7. Inscreva-se em no mínimo 5 grupos de desenvolvedores. Para java aqui no Brasil temos excelentes grupos como GUJ, javafree entre outros.
  8. Faça assinatura de revistas especializadas na área de seu interesse, como MundoJ, Java Magazine. Não se engane, se você acha caro pagar por estes produtos verá que uma saidinha sua final de semana vai embora o preço de uma assinatura anual.
  9. Mantenha sempre contato com a comunidade.
  10. Não queira abraçar o mundo. Escolha uma linguagem e estude muitos conceitos e metodologias com esta linguagem. Isto lhe dará proficiência na linguagem além é claro de facilitar o aprendizado do ciclo de vida de desenvolvimento.
  11. Se está estudando determinado assunto, inicie e termine com o mesmo material antes de partir para outro. É muito comum pesquisar sobre determinado assunto e colher vários materiais de fontes diferentes. O ideal é ler fonte por fonte antes de formar uma opinião sobre o assunto.
Bem pessoal, é isso ai. Sintam-se a vontade para questionar ou criticar se for o caso.

Que Deus abençoe a todos.

Arquiteto de Softwares? Como fui chegar aqui?

Fala galera! De que vale ter um blog se você não consegue postar nada? Me fiz esta mesma pergunta e em resposta estou iniciando minhas aventuras de blogger.

Este post na verdade é uma historinha que venho recentemente repetindo para alguns jovens da igreja que faço parte e outros colegas que pretendem seguir o mesmo ramo.

Bem, eu começo sempre contando um pouquinho de minha trajetória. Atuo com desenvolvimento desde 2000, ou seja, lá se vão alguns anos de envolvimento com a área. Iniciei minha caminhada muito antes de entrar em uma universidade, comecei brincando com VBA dentro do excel e em seguida no access. Ficava maravilhado quando conseguia "ensinar" os programas fazerem algo que eu instruí. Como bom curioso que sou não cansava de pegar livros emprestados e quando tinha chance ler na internet sobre montagem e manutenção de computadores. Assim, comecei de fato minhas andanças com TI atuando informalmente como suporte de infraestrutura. Logo em seguida juntei uma grana e fiz o meu primeiro curso de programação na linguagem Object Pascal utilizando Delphi 4.0 e o famosíssimo banco Paradox.
O Delphi abriu minha visão sobre a área de desenvolvimento e permitiu ganhar meus primeiros trocado$ com desenvolvimento. Foi um desafio para mim iniciar um trabalho como freelancer pelo fato de que todo meu conhecimento para desenvolver software vinha de um curso básico de Delphi. Era difícil captar os desejos dos usuários e transformar a vontade deles em um produto (eu não fazia a menor ideia do que vinha a ser requisitos).Um pouco mais a frente comecei meus estudos com Java. Fiz alguns cursos e estudava bastante em casa. Fiz alguns projetos pequenos e minha experiência era um pouco maior que a acadêmica. O divisor de águas para mim foi quando consegui meu primeiro emprego para trabalhar fortemente com java num projeto enorme. Assumi durante a entrevista que conhecia java e era capaz de ser produtivo. Não sei até que ponto eu consegui convencer o entrevistador a questão é que eu nunca tinha pisado numa universidade e já tinha aproximadamente um ano de estudos sobre java. Eu aceitei o desafio de assumir a responsabilidade. Sendo o que hoje classificaria como júnior encarei o peso de atuar como pleno. Toda a economia que não tinha arrisquei comprando livros sobre o assunto e muitas noites de sono foram embora durante os primeiros meses.
Em pouco tempo consegui absorver o conhecimento necessário para trabalhar naquela empresa. Lá havia um framework de desenvolvimento proprietário que facilitava muito nossa vida.
Não parei por ai, vi que tinha capacidade para fazer mais e fiz outros cursos. Quando a grana começou a aparecer tive a oportunidade de entrar numa faculdade e comecei o curso de sistemas de informação. Como muitos sabem, não foi fácil trabalhar e estudar durante 5 anos ( o curso teve duração de 4 mas precisei trancar duas vezes). Realmente comparado a meus colegas de faculdade eu já estava muito adiantado no que diz respeito a desenvolvimento, embora no primeiro período eu já tinha por volta de 6 a 7 anos de experiência. A experiência acadêmica foi fundamental para mim, pois me ensinou que a produção de um software começava muito antes do desenvolvimento. Tive a oportunidade de conhecer processos de desenvolvimento, metodologias, arquitetura, design, modelo de banco... foi sensacional. Mente mente inquieta não me deixava se limitar ao conhecimento acadêmico e me impulsionava sempre a buscar mais por fora. Comprava livros sobre o assunto e quando tinha oportunidade fazia cursos.
Como resultado de toda esta dedicação em aproximadamente um ano de trabalho já conseguia auxiliar outros plenos da equipe e logo em seguida fui promovido a desenvolvedor sênior.
Nesta altura eu já não desenvolvia mais em Delphi e me especializava mais e mais na linguagem java e na engenharia de softwares como um todo. Os trabalhos extras passaram a se tornar mais frequentes e eu sempre aproveitava eles para aprender um novo framework e pôr em prática outras metodologias. Após aproximadamente 4 anos mudei de empresa e assumi como desenvolvedor sênior. Sempre investindo em leitura e especialização fui promovido a arquiteto de softwares 6 meses depois e é onde estou até a presente data.
O que gostaria de enfatizar com este resumo de minha história foi a sempre presente dedicação e entrega aos estudos. Costumo sempre dizer que eu não escolhi gostar de estudar mas me habituei a esta necessidade imposta pela carreira que escolhi. Hoje tenho contato com profissionais que atuaram comigo quando comecei, colegas de faculdade e colegas da área que estão praticamente no mesmo local. Conheci-os como desenvolvedores juniores e até hoje continuam praticamente com o mesmo conhecimento. O que minha trajetória mostra é que com dedicação e esforço você consegue alcançar muitos dos seus objetivos. Se você quer ser diferente tem que agir diferente. Se fizer igual ao que os outros fazem você será exatamente como os outros.

Termino com uma frase que vem sendo um guia para mim nos últimos anos:
"Se você deseja algo que nunca teve, faça algo que nunca fez!"

Que Deus abençoe a todos.