Devo usar o Spring ou Guice para um projeto Tomcat / Wicket / Hibernate?
Pergunta
Estou construindo uma nova aplicação web que usa Linux, Apache, Tomcat, Wicket, JPA / Hibernate e MySQL. A minha necessidade primária é Dependency Injection, que tanto Primavera e Guice pode fazer bem. Acho que preciso de suporte a transações que viria com Primavera e JTA, mas eu não tenho certeza.
O site irá provavelmente tem cerca de 20 páginas e eu não vou esperar o tráfego enorme.
Devo usar Primavera ou Guice?
Sinta-se livre para perguntar e acompanhamento perguntas e eu vou fazer o meu melhor para atualizar esta.
Solução
Se você gosta da filosofia "do-it-all-in-Java" que Wicket segue, então você pode preferir Guice ao longo da Primavera. Não há nenhuma configuração XML no Guice - tudo é feito usando o Guice Module
classe.
Por exemplo, sua classe WebApplication
Wicket pode ser algo como isto:
public class SampleApplication extends WebApplication
{
@Override
protected void init()
{
addComponentInstantiationListener(
new GuiceComponentInjector(this, new GuiceModule()));
}
}
O GuiceComponentInjector
vem da extensão wicket-guice. Aqui está o Módulo:
public class GuiceModule extends AbstractModule
{
@Override
protected void configure()
{
// Business object bindings go here.
bind(Greetings.class).to(GreetingRepository.class);
}
}
Neste exemplo, Greetings
é uma interface implementada por uma classe concreta GreetingRepository
. Quando Guice precisa injetar um objeto Greetings
, ele irá satisfazer a dependência com um GreetingRepository
.
Eu uni um amostra projeto que demonstra como construir um Wicket / aplicação Guice para o Google App Engine. Você pode ignorar as especificidades do Google App Engine e se concentrar em como as obras de integração Wicket-Guice.
Outras dicas
Se você acabar indo com Guice, definitivamente verificar para fora urdidura Persistir para Hibernate, Guice Servlet para Tomcat, e wicket-guice para wicket.
Spring provavelmente dar-lhe mais flexibilidade, mas se você só precisa DI então Guice pode ser uma escolha melhor.
É difícil de responder como Primavera tem tantas características que fariam o DAO mais flexível, e funciona bem com Hibernate. Seria bom se você tivesse mais exigências para o que você está procurando.
Aqui estão algumas comparações entre Primavera e Guice e Spring, Guice e PicoContainer.
http://code.google.com/p/google-guice / wiki / SpringComparison
http://www.christianschenk.org/ blogue / comparison-entre-guice-PicoContainer-and-primavera /
Não esqueça CDI / JSR-299, parte do Java EE 6. Você pode usar solda-postigo para integrar postigo com CDI.
(desde que você está usando a implementação de solda (como GlassFish v3 e JBoss 6 fazer), mas a solda-postigo é bastante pequeno para que você provavelmente poderia adaptá-lo, se necessário).
Eu consegui Wicket 1.4 + solda-postigo + wicket-contrib-javaee + EJB 3.1 + JPA 2.0 + wicket-security (SWARM) + Spring Security 3 + Spring 3 correndo juntos em uma pequena prova de aplicação conceito. Isso é um pouco demais estruturas no entanto, provavelmente vai cair spring-security & primavera como eles aparecem redundante.