Category Archives: boas práticas

Eu vou para o Qcon SP 2010

A Caelum em parceria com a Infoq Brasil irá realizar o Qcon SP 2010, um evento bastante diversificado. Assuntos como Java, .Net, Ruby, Arquitetura, Agile e vários outros temas serão mostrados no evento.

Não deixarei de ir para me reciclar e também para rever grandes amigos.

Nos vemos lá!

CEJUG Tech Day

Nova logo do CEJUGO Grupo de Usuários Java do Ceará estará realizando no próximo dia 04 de dezembro o CEJUG Tech Day na Fanor.

Este ano, precisamente nos dias 8 e 9 de dezembro, a Sun Microsystems estará realizando a edição 2009-2010 do Sun Tech Days, em São Paulo. Provavelmente será o último STD realizado. Felizmente, teremos mais uma vez um palestrante internacional da Sun, graças ao Maurício Leal, que organizou mais uma caravana dos palestrantes da Sun no Brasil.

Simon Ritter já esteve em Fortaleza participando do Café com Tapioca de Coco em 2008 e este ano palestrará sobre o futuro da JDK 7. Guilherme Silveira também participará e falará sobre REST e RESTful. Julio Viegas falará sobre infraestrutura e ambientes em Java de alta demanda e por fim, Josênio Cândido falará sobre o CMS Vignette.

Folder de divulgação do CEJUG Tech Day 2009

Se você mora em Fortaleza não deixe de comparecer ao evento, a inscrição é gratuita com a adição de 2 quilos de alimentos não perecíveis que serão doados para instituições de caridade.

Como escolher um framework web no IV EJES

No dia 17 de outubro participei do IV EJES como palestrante, falando sobre como escolher o melhor framework web. Esse assunto é bastante complexo e requer uma análise bastante analítica, que espero fazer em forma de post em breve.

[slideshare id=2259115&doc=comoescolherframeworkweb-rafaelcarneiro-091017171600-phpapp02]

O evento foi sensacional, deu para conhecer muitas pessoas legais como o Makoto, Júnior, Gabriel, Vitor, André e vários outros. Fica um agradecimento especial ao Jeveaux, organizador do evento e JUG Leader do ESJUG, pela organização do evento e também pela hospitalidade. Foi uma excelente oportunidade também para reencontrar alguns amigos como o Paulo Silveira, Leonardo Hackin e a Loiane.

Vou palestrar no IV EJES

IV EJESRecebi o convite do Jeveaux, JUG Leader e fundador do ESJUG, para palestrar da 4ª edição do Encontro de Java do Espírito Santo. Aceitei o convite, irei palestrar com o tema JavaEE? Para onde você está indo? Conheça, compare e saiba escolher o melhor framework web e terei o maior prazer em participar desse evento. O ESJUG iniciou este ano a todo vapor com a criação do site, realizando eventos e aumentando a movimentação dos emails na lista de discussão. A programação está excelente, com temas do momento e palestrantes de peso, como Paulo Silveira, Jeveaux e a Loiane.

A escolha desse tema foi feita a partir de uma conversa com o Jeveaux sobre o mercado local de Vitória. Antes que alguém comece a jogar pedras: existe há alguns anos uma apresentação bastante famosa comparando alguns frameworks web Java, do Matt Raible. Na verdade, entrei em contato com o Matt comentando isso e ele respondeu que eu poderia até utilizar a apresentação dele, claro que colocando os devidos créditos. A apresentação que irei ministrar não será uma cópia da apresentação do Matt, apesar de haver muita semelhança. Irei abordar outros tópicos e também mostrar um exemplo de código durante a palestra.

Você que é de Vitória ou de cidades vizinhas: não deixe de comparecer ao evento!

Falando em Java 2009: eu fui!

Este ano tive a oportunidade de participar da terceira edição do Falando em Java, um evento sobre a plataforma Java da Caelum que ocorre anualmente. Conheci alguns amigos gujeiros, twitteiros e também da própria empresa.

A presença do Jim Webber da Thoughtworks foi fundamental, visto que Bill Burke não pôde comparecer ao evento (devido a problemas com visto). Para a sorte do evento, além de ministrar a palestra Guerrilha SOA, Jim também possuía um know-how bem forte sobre Web services (veja o livro de sua autoria sobre o assunto) e pôde ministrar com maestria a palestra do Bill Burke. Além de ter mostrado uma forte qualidade técnica, Jim soube cativar o público com algumas pitadas de humor, sendo ovacionado diversas vezes nas suas palestras.

Em sua palestra sobre SOA, Jim apresentou uma analogia de silos e pontes com sistemas interoperáveis, ou seja, do modo com que se construía sistemas em módulos sem possuir integração alguma (e que não seria uma simples ponte que faria com que dois ou mais sistemas se comunicassem entre si de uma forma concisa), do grande hype sobre o mundo SOA e a forma que as empresas vendem seus produtos baseados nessa tecnologia. No mundo SOA, entenda ESB como um hub que recebe/envia mensagens de diversos sistemas distintos. Para Jim, ESB representa um barramento mágico que ofusca o que faríamos quando fossemos integrar sistemas diferentes em uma corporação, abstraindo do desenvolvedor essa tarefa, porém fazendo a mesma coisa que faziam no passado: incluindo pontes entre silos (você conseguiria imaginar isso?). Seria Same Old Arquitecture uma buzzword ou realmente SOA é algo diferente e novo?

Em sua segunda palestra, Jim abordou REST webservices e enfatizou (assim como Felipe Sabella – vulgo lipe – na palestra sobre VRaptor 3) a importância de ser eficaz na web. Explicou também a importância da web e que infelizmente a maioria das empresas/pessoas não sabem aproveitar o que a tecnologia que envolve o protocolo HTTP oferece. No blog do Bruno Pereira você verá muita coisa sobre REST.

Hibernate foi um dos assuntos mais comentados no evento, com dicas de boas práticas e alguns exemplos de lazy loading (EXTRA mode), batch, stateless session, cluster, load balance, n+1 selects e outros. Algumas apresentações tiveram exemplos práticos, como na apresentação sobre o JBoss Seam e Web beans, onde o cenário da compra de pães foi mostrado. Na verdade, a idéia por trás desse cenário era para exemplificar e mostrar a Java Contexts and Dependency Injection (JSR-299), onde a pessoa receberia o pão como recurso (injetado), e não ter que se deslocar para obter o pão. O cenário full stack do JBoss Seam é um chamativo para desenvolvedores que estão em busca de features out of box, como: segurança, integração com relatórios, frameworks MVC, mensageria, AJAX, dentre outros. Já o que mais me chamou atenção na palestra sobre VRaptor 3 foi a list-roadmap dos desenvolvedores e o fato de que eles inserem as necessidades que irão trazer praticidade para o dia-a-dia deles em atividades de desenvolvimento de software. Estou utilizando a versão 2.x do VRaptor em um projeto open source e estou gostando bastante, principalmente pela simplicidade e por não ser intrusivo. O VRaptor possui integração com Spring, Hibernate, freemarker, velocity e outros frameworks. Acredito que a palestra sobre arquitetura para aplicações java de médio porte poderia ter relacionado outros tipos de funcionalidades arquiteturais, como segurança, mensageria, integrações, front-ends, etc.

img_livro

Uma das principais novidades do evento foi o anúncio do lançamento do livro Arquitetura Java, previsto para o mês de novembro deste ano, com participação de alguns instrutores da Caelum e prefácio do Shoes. Todos os participantes do evento terão desconto na compra do livro. Outra novidade é a abertura de uma filial em Brasília e o lançamento do curso de Adobe Flex.

Para concluir, gostaria de parabenizar a Caelum pelo excelente evento e agradecer o apoio do Paulo Silveira.

Até o próximo!

O desenvolvedor web eficaz

Seguindo a linha de títulos de posts clássicos da Caelum que contém o adjetivo eficaz, indico o post Dicas de estudo para se tornar um desenvolvedor web produtivo de autoria do Bruno Pereira para desenvolvedores web que utilizam qualquer plataforma de desenvolvimento.

Nesse post, Bruno fala de frameworks web Java, frameworks da nova geração, JavaScript, HTML, CSS, AJAX e plugins do Firefox para ambientes de desenvolvimento. Além disso, todo desenvolvedor web tem deve que saber como funciona o protocolo HTTP, que o método GET solicita um recurso e que o método POST envia dados para um servidor. Evite reinventar a roda e procure se basear no princípio DRY. Por exemplo, hoje em dia é comum vermos em empresas desenvolvedores criando frameworks AJAX  do zero. Numa era de jQuery, Ext JS, YUI, mootools e prototype, pra quê criar um framework AJAX em um ambiente corporativo?

Se você está programando em JavaScript e também é um desenvolvedor que utiliza TDD no seu dia-a-dia, por que não utilizar TDD no seu código JavaScript com JsUnit e JsMock?

Além das dicas do Bruno, recomendo a leitura do livro High Performance Web Sites: Essential Knowledge for Front-End Engineers. Alguns assuntos abordados no livro: Http overview, Expires Header, Gzips components e um estudo de caso de 10 big players da internet.

Também não deixe de acompanhar novidades em blogs de desenvolvedores que utilizam os princípios acima.

Enfim, recursos não faltam para você se tornar um desenvolvedor web eficaz!

Participação na MundoJava 33

capamundojava33

Escrevi em dupla com Tarso Bessa o artigo EJB vs Spring: uma disputa de gigantes na Mundo Java edição 33, referente aos meses de janeiro e fevereiro.

Ministramos uma palestra no CEJUG sobre esse conteúdo em abril do ano passado e também no JustJava 08 em São Paulo. A única ressalva é que não utilizamos o tema das palestras como o nome do artigo.

Tive a oportunidade de conhecer o Eduardo Guerra em agosto de 2008 (em um evento do CEJUG) e em conversas sobre o mundo Java ele nos convidou para escrevermos um artigo sobre  o assunto da nossa palestra no JustJava.

A idéia e intuito da criação do artigo não era de definir que X é melhor do que Y, e sim a idéia de compararmos os principais recursos das duas tecnologias (segurança, transações, mensageria, etc) e mostrar para o desenvolvedor que cabe apenas a ele escolher qual tecnologia trará mais benefícios. Isso não faria o menor sentido, até porque já existem diversas comparações na internet sobre esse assunto e até hoje os caríssimos Rod Johnson e Bill Burke travam uma guerra interminável sobre esse assunto.

Veja um trecho introdutório do artigo:

O objetivo deste artigo é realizar um comparativo entre o Spring e EJB 3 em quesitos que são fundamentais para as aplicações de hoje. Para isso, foi desenvolvida uma aplicação semelhante a uma loja virtual explorando como esses dois gigantes se comportariam diante de requisitos que tinham que ser implementados de uma forma similar. Os seguintes tópicos foram abordados: Injeção de Dependência, Controle de Transações, Agendamento, Suporte à Orientação a Aspectos, Web Services, Serviços de Mensagens e, por último, Segurança. Cada tópico desses tem uma relação com um requisito da aplicação: agendamento para checagem de estoque de produtos; aspectos para gravação de histórico de alteração de dados; segurança para proteção das páginas que envolvem transações financeiras; Web Services para disponibilizar a lista de produtos da loja para aplicativos externos; serviço de mensagens assíncronas para processamento de pagamento; controle de transações para garantir a integridade dos dados e controle de concorrência; e por fim, injeção de dependência para simplificar a programação da aplicação.

SOAndo no próximo sábado

soaworkshop.jpg

No próximo sábado irei participar do Workshop SOA de Tecnologias OpenSource da JBoss na FA7. O workshop será ministrado pelo Edgar Silva. Já assisti duas palestras ministradas pelo Edgar: uma sobre o Greenbox no Sun Tech Days de 2006 pelo CEJUG e outra de JavaServer Faces no III Natal Java Day, em novembro do ano passado.

O conteúdo do workshop está focado em ESB e acredito que será bastante proveitoso, sem falar na confraternização após o workshop. 🙂

Apresentação do Café com Tapioca de julho disponível

A apresentação do Café com Tapioca de julho está disponível. O evento aconteceu na barraca de praia Cocobeach, praia do futuro, Fortaleza – CE. O objetivo da palestra era mostrar para os membros do CEJUG a experiência vivida no Jazoon 08, que é um evento internacional sobre Java.

Confira a página do evento no site do CEJUG.

Apresentação

[slideshare 526144 jazoon-1216877514294136-9]

Fotos

Mais fotos em: http://picasaweb.google.com/cafecomtapioca/CafComTapiocaComJazoon08

Frameworks: agindo com bom senso

Um pouco de conversa

Sempre que posso, acesso o fórum do Javaranch para ver as novidades e assuntos interessantes do mundo Java. No feriado de ontem estava eu navegando nesse fórum quando achei um tópico de título “When to use JSF or Struts“. Título este bem chamativo, por conta das diversas discussões e comparativos sobre esses frameworks na comunidade Java do mundo inteiro.

Nesse post, o autor pergunta qual a diferença entre os dois. A diferença é simples: a quantidade de artefatos criados e a complexidade de sua utilização. JSF é bem simples e com algumas configurações e artefatos criados já está apto para ser utilizado no seu sistema. Eu não sou xiita e não estou dizendo que JSF é melhor do que Struts ou qualquer outro framework, não estou afirmando que ele é a bala de prata. E não é.

Gostei muito de uma resposta desse post e ainda bem que ela foi logo a primeira resposta, evitando que outras respostas mudassem os pensamentos e opiniões dos leitores. Nessa resposta, o autor enfatiza: “How to choose? For me, I’ll choose a framework that team members familiar with“. Essa resposta foi bem coerente, pois se sua equipe possui experiência e produtividade com o framework X, não quer dizer que se adotar o framework Y aumentará a produtividade da equipe, pelo contrário, pode acontecer o inverso, já presenciei casos desse tipo.

É comum ver em fóruns, listas de discussão e até mesmo no dia-a-dia, profissionais discutindo com seus companheiros de trabalho, alegando que o Struts (versões 1.x) é obsoleto e está ultrapassado. Isso não é mentira, é fato. Porém o que não concordo é esse xiitismo e essa generalização em volta desse assunto. Você já trabalhou com Struts, já ganhou muito dinheiro com ele, eu também. O framework Struts foi por muito tempo o framework padrão de mercado, exigido por quase todas as empresas como requisito fundamental no currículo. Acredito que apenas uma fatia dos novos desenvolvedores que iniciaram a pouco tempo não tiveram a chance de trabalhar com ele. Mas este dia chegará, pois muito em breve esses teenagers irão prestar consultoria em sistemas que foram feitos com esse framework.

Por que o Struts está obsoleto?

É muito simples de explicar. Veja a imagem abaixo e tente comparar com qualquer outro framework da moda.

Arquitetura orientada a BOLOVO

Essa arquitetura é completamente orientada a BOLOVO. Note que é necessário a criação de vários artefados para a criação de um simples caso de uso.

Artefatos necessários:

  1. configuração do Servlet Front Controller do Struts no deployment descriptor (web.xml)
  2. criação de um XML denominado struts-config.xml
  3. criação de uma classe Java que estende a classe ActionForm (Struts)
  4. criação de uma classe Java que estende a classe Action (Struts)
  5. configuração do ActionForm no struts-config.xml
  6. configuração da Action no struts-config.xml
  7. se você for utilizar validação (que é necessária em todo sistema que se preze), é necessário a criação de outros artefados, como por exemplo um arquivo de propriedades.

Isso não acontece com frameworks da moda, nos quais são orientados a POJO. Por exemplo, o JSF necessita apenas da criação de uma classe POJO, configuração do Servlet no deployment descriptor e da criação de um XML chamado faces-config.xml. Três artefatos criados, eu disse apenas três artefatos criados.

Portanto, a sua utilização poderá acarretar em futuros problemas, como inúmeras refatorações. Também existe uma má utilização dos princípios da Orientação a Objetos e péssimas práticas de desenvolvimento de software, nos quais posso citar algumas: alto acoplamento, alta manutenabilidade e complexidade.

E agora, o que utilizar?

Muita calma nesta hora. Como mencionei acima, não sou xiita (a-rá, gosto de EJB e irei utilizá-lo em todos os meus projetos, até um hello world numa simples JSP, criarei diversos artefatos, farei várias configurações e utilizarei um servidor de aplicações parrudo). Ratificando: o intuito deste post não é mostrar que o framework X é melhor do que o framework Y.

Java está se tornando uma plataforma difícil de se dominar, por ser bastante abrangente e surgir novas funcionalidades todos os dias. Sem falar de frameworks, que todo dia nasce um no quarto de um desenvolvedor que está com seu ócio criativo em alta. Mas alguns frameworks estão me chamando bastante atenção, por serem produtivos, robustos e simples. São eles: JSF, VRaptor e Spring.

Lembrando mais uma vez: nenhum framework é a bala de prata!

frameworks-cadeia.jpg

Outros frameworks que estão chamando atenção da comunidade: Apache Wicket e Waffle. Implementações: Jersey e Metro.

Sobre frameworks caseiros

Se você acessar os maiores fórums brasileiros de Java como GUJ e PortalJava, verá inúmeras discussões sobre as vantagens e desvantagens de frameworks caseiros. Particularmente eu vejo muitas desvantagens, pois já passei por uma experiência que não me agradou muito. Há uma discussão no GUJ sobre esse assunto, ela é datada de 2005, que me chamou bastante atenção. Se em 2005 alguns dos membros mais ativos da comunida Java já falaram das desvantagens de construir tal geringonça, por que após três anos isso ainda continua?

Frameworks caseiros não são arquiteturas de referência, não são padronizados, não possuem uma comunidade em volta para dar apoio e não são padrões da insdústria de software. Construir frameworks caseiros com o dinheiro público é o pior caso de todos.

Nesse post do GUJ, Carlos Villela comentou:

Desenvolver um framework ANTES de desenvolver uma aplicacao nao da certo: ou voce acaba com a aplicacao tendo que fazer gambiarras em cima do framework, ou a aplicacao nao sai ate mudarem o framework. Eh melhor fazer uma aplicacao primeiro, refatorar ela e tirar os pedacos genericos e transformar num framework do que tentar advinhar o que eh generico e o que nao eh. Alias, risque a palavra advinhar do dicionario.

Ele adivinhou o que poderia acontecer utilizando essa abordagem e eu tive a péssima experiência de passar por isso.

Não sendo xiita, afirmo que cada caso é um caso. Está certo que em determinados projetos é necessário construir um determinado número de classes que executam processos comuns entre sistemas. Mas é para ser feito só o básico e o necessário, nada mais além do que isso, porque senão irá virar um framework!

Referências