Qual controle transacional usar com Spring: AOP ou @Transactional ?

Sempre que iniciamos um novo projeto com Spring precisamos decidir qual estratégia de controle transacional utilizar. Normalmente acabamos optando pelo controle transacional declarativo em vez do programático, no entanto, temos ainda que decidir se iremos seguir uma das estratégias: AOP ou @Transactional.

Mas quais os benefícios de uma abordagem ou de outra? Quais as desvantagens de utilizar AOP? E a anotação @Transactional? Para sanar estas dúvidas, o blog dos desenvolvedores da TriadWorks acaba de publicar mais um artigo, com o tema Controle transacional declarativo com Spring: AOP ou @Transactional. O post apresenta os prós e contras de cada abordagem, o que pode ajudar arquitetos e desenvolvedores mais seniores a tomar uma decisão mais consciente!

Eu já trabalhei com as duas abordagens, e por esse motivo prefiro trabalhar com o uso da anotação @Transactional, pois o código fica mais explicito e ainda consigo fazer o desenvolvedores da equipe pensarem sobre o fluxo das transações dentro da aplicação. E você, qual abordagem prefere?

Projetos de estudo para JSF2, Spring e Hibernate

Quem está iniciando a desenvolver aplicações Web em Java, após estudar vários frameworks de forma isolada, acaba tendo algum tipo de dificuldade para integrar 2-4 frameworks a fim de ter uma arquitetura inicial de desenvolvimento.

Existem várias discussões sobre qual modelo seguir, JavaEE (CDI, EJB etc) com um servidor de aplicação robusto ou Spring com o bom e velho Tomcat. Decidir qual o melhor modelo envolve inúmeras variáveis que dependem do projeto e da equipe.

Deixando um pouco de lado essa discussão, eu pretendo enumerar alguns projetos que nós da TriadWorks utilizamos em nossos cursos e treinamentos. Os projetos são construídos durante os cursos de JSF (1.2 e 2.0), Spring e Hibernate pelos próprios alunos seguindo o método de ensino bottom-up.

Todos os projetos estão disponibilizados no GitHub a fim de facilitar o estudo, visualização do código e a atualização periódica. Segue abaixo os projetos:

  1. jsf-issuetracker – Projeto de uma aplicação de Issue Tracker com JSF 2.x, Spring 3.x e Hibernate 3.6.x (JPA2).
  2. jpa-issuetracker – Projeto de uma aplicação de Issue Tracker modelada com Hibernate 3.6.x (JPA2) e Spring 3.x.
  3. jsf-loja – Projeto de uma aplicação de Loja Virtual com JSF 1.2, Spring 3.x e Hibernate 3.5.x, além do uso de teste de unidade e integração.

Com a facilidade de compartilhar e colaborar código provinda do GitHub o projeto original jsf-issuetracker possui algumas versões (forks) bem interessantes feitas pelo Rafael Pestano, criador do Conventions Framework. O Rafael migrou o projeto original para tecnologias como CDI, EJB 3.1, CODI, Primefaces-Extensions e o próprio Conventions.

  1. jsf-issuetracker-cdi (OpenWebBeans) – idêntico ao projeto original, porém utilizando CDI com OpenWebBeans.
  2. jsf-issuetracker-cdi (Weld) – idêntico ao anterior, porém utilizando CDI com Weld.
  3. jsf-issuetracker-cdi-conventions (OpenWebBeans) – versão utilizando CDI com OpenWebBeans e Conventions Framework.
  4. jsf-issuetracker-cdi-conventions (Weld) – versão utilizando CDI com Weld e Conventions Framework.
  5. jsf-issuetracker-cdi-jboss (Weld) – versão utilizando CDI com Weld, EJB 3.1 e Conventions Framework na qual roda num JBoss AS 7. Esta versão possui uma aplicação demo hospedada no OpenShift.

São 6 (seis) versões do mesmo projeto com tecnologias diferentes que rodam em Tomcat e JBoss AS 7, ou seja, não há desculpas para não estudar e avaliar qual delas se encaixa melhor no seu projeto ou equipe.

O repositório de cada projeto possui um README que ajudará a configurar e fazer o deploy da aplicação. Se o README não estiver claro o suficiente ou mesmo incorreto, por favor, deixe-me saber que tentarei melhora-lo com a sua ajuda.

Caso tenha interesse ou alguma dúvida nos cursos e treinamentos da TriadWorks, por favor, deixe-nos saber.

10 razões para migrar sua aplicação para JSF2

Hoje foi publicado no blog da Caelum um post sobre as 10 razões para migrar sua aplicação para JSF2, e eu tive o prazer e a honra de colaborar com o post a convite de um grande amigo, o Raphael Lacerda.

O post enumera 10 razões que vão desde aspectos técnicos até comerciais, entre eles podemos citar  alguns como melhoria de performance, melhorias na especificação e fim do suporte à versão antiga da especificação e componentes.

Vale a pena conferir.