it-swarm-pt.tech

Devo usar EJB3 ou Spring para minha camada de negócios?

Minha equipe está desenvolvendo um novo produto orientado a serviços com um front-end da Web. Nas discussões sobre quais tecnologias usaremos, decidimos executar um servidor de aplicativos JBoss, o front-end Flex (com possível implantação de desktop usando o Adobe AIR) e serviços da Web para fazer interface com o cliente e o servidor.

Chegamos a um impasse quando se trata de qual tecnologia de servidor usar para nossa lógica de negócios. O grande argumento está entre o EJB3 e o Spring, com nossas maiores preocupações sendo escalabilidade e desempenho, e também a manutenção da base de código.

Aqui estão as minhas perguntas:

  1. Quais são os argumentos a favor ou contra EJB3 vs Spring?
    • Que armadilhas posso esperar com cada uma?
    • Onde posso encontrar boas informações de benchmark?
71
Justin Standard

Não haverá muita diferença entre o EJB3 e o Spring com base no desempenho. Escolhemos o Spring pelos seguintes motivos (não mencionados na pergunta):

  • O Spring impulsiona a arquitetura em uma direção que suporta mais prontamente os testes de unidade. Por exemplo, injete um objeto DAO simulado para testar sua camada de negócios ou utilize o objeto MockHttpRequest do Spring para testar um servlet. Mantemos uma configuração separada do Spring para testes de unidade que nos permite isolar testes para as camadas específicas.
  • Um driver substituto era a compatibilidade. Se você precisar oferecer suporte a mais de um servidor de aplicativos (ou, eventualmente, desejar a opção de passar do JBoss para o Glassfish, etc.), estará carregando seu contêiner (Spring) com você, em vez de confiar na compatibilidade entre diferentes implementações do Especificação EJB3.
  • O Spring permite opções de tecnologia para persistência, remoting de objetos etc. Por exemplo, também estamos usando um front end Flex e o protocolo Hessian para comunicações entre o Flex e o Spring.
72
John Stauffer

A diferença entre EJB3 e Spring é muito menor do que era, claramente. Dito isso, uma das desvantagens do EJB3 agora é que você só pode injetar em um bean, para acabar transformando componentes em beans que não precisam ser.

O argumento sobre o teste de unidade é bastante irrelevante agora - o EJB3 foi claramente projetado para ser mais facilmente testável por unidade.

O argumento de compatibilidade acima também é irrelevante: se você usa EJB3 ou Spring, ainda depende de implementações fornecidas por terceiros de gerenciadores de transações, JMS, etc.

No entanto, o que seria bom para mim é o apoio da comunidade. Trabalhando em um projeto EJB3 no ano passado, não havia muita gente por aí usando e falando sobre seus problemas. A primavera, com ou sem razão, é extremamente difundida, especialmente na empresa, e isso facilita a procura de alguém com o mesmo problema que você está tentando resolver.

37
PEELY

Quais são os argumentos a favor ou contra EJB3 vs Spring? A Spring está sempre inovando e reconhece as restrições do mundo real. O Spring ofereceu simplicidade e elegância para os servidores de aplicativos Java 1.4 e não exigiu uma versão da especificação J2EE que ninguém tinha acesso em 2004 - 2006. Nesse momento, é quase uma religião debate em que você pode ser sugado - nas especificações Spring + abstraction + open-source versus Java Enterprise Edition (Java EE) 5.0).

Eu acho que o Spring complementa mais do que compete com as Java EE especificações. Como os recursos que antes eram exclusivos do Spring continuam Para ser incluído na especificação, muitos argumentam que o EJB 3 oferece um conjunto de recursos "suficientemente bom" para a maioria dos aplicativos de negócios internos.

Que armadilhas posso esperar com cada uma? Se você está tratando isso como um problema de persistência (Spring + JPA) versus EJB3, não está realmente fazendo uma escolha tão grande.

Onde posso encontrar boas informações de benchmark? Não acompanho o specj benchmark results há algum tempo, mas eles eram populares por Um tempo. Parece que cada fornecedor (IBM, JBOSS, Oracle e Sun) fica cada vez menos interessado em ter um servidor compatível. As listas ficam mais curtas e mais curtas de fornecedores certificados conforme você passa de 1.3, 1.4. 1.5 Java Enterprise Edition. Acho que os dias de um servidor gigante que é totalmente compatível com todas as especificações terminaram.

18
Brian

Eu recomendaria definitivamente o EJB3 na primavera. Achamos que é mais simplificado, mais agradável de codificar e com melhor suporte. No passado, usei o Spring e achei muito confuso, e não tão bem documentado quanto o EJB3 (ou JPA, acho que no final do dia)

  1. No EJB3, você não precisa mais lidar com arquivos de configuração externos e há apenas um POJO que você anota por tabela do banco de dados. Este POJO pode ser passado para o seu nível da web sem problemas. IDEs como o Netbeans podem até gerar automaticamente esses POJOs para você. Agora usamos o EJB3 como back-end para alguns aplicativos de larga escala e não notamos nenhum problema de desempenho. Seus Session Beans podem ser facilmente expostos como serviços da Web que você pode expor ao seu front-end Flex. Os beans de sessão são fáceis de bloquear no nível do método ou da classe para atribuir funções e coisas assim, se necessário.

Não posso falar muito sobre a primavera, pois só tentei por algumas semanas. Mas minha impressão geral foi muito ruim. Isso não significa que seja uma estrutura ruim, mas nossa equipe aqui considerou o EJB3 o melhor para a camada de persistência/negócios.

9
rustyshelf

Eu tendem a preferir o Spring ao EJB3, mas minha recomendação seria a abordagem que você seguir, tente escrever POJOs e use as anotações padrão sempre que possível, como as anotações JSR como @PostConstruct, @PreDestroy e @Resource que funcionam com o EJB3 ou Spring para que você possa escolher a estrutura que preferir.

por exemplo. você pode decidir em algum projeto usar o Guice em vez da IoC.

Se você deseja usar a injeção de pré-solicitação, como em um aplicativo da Web, pode achar que o Guice é um pouco mais rápido para injeção de dependência do que o Spring.

Os beans de sessão se resumem principalmente à injeção e transações de dependência; então o EJB3 e o Spring são bem parecidos para isso. Onde o Spring has the Edge está em uma melhor injeção de dependência e em abstrações mais agradáveis ​​para coisas como JMS

7
James Strachan

eu usei uma arquitetura muito semelhante no passado. Spring + Java 1.5 + Actionscript 2/3, quando combinado com o Flex Data Services, tornou tudo muito fácil (e divertido!)) De codificar, no entanto, um front end Flex significa que você precisa de máquinas cliente adequadamente poderosas .

2
Soumitra

Quanto à sua pergunta:

Quais são os argumentos a favor ou contra EJB3 vs Spring?

Sugiro ler a resposta dos especialistas: MA RESPOSTA A: EJB 3 E ANÁLISE COMPARATIVA DE MOLA por Mark Fisher . Leia os comentários para encontrar os comentários de Reza Rahman (EJB 3.0).

1
krams

Outra coisa a favor da primavera é que a maioria das outras ferramentas/estruturas lá fora tem melhor suporte para integração com a primavera, a maioria delas também usa a mola internamente (por exemplo, activemq, camel, CXF etc.).

Também é mais maduro e há muito mais recursos (livros, artigos, práticas recomendadas etc.) e desenvolvedores experientes disponíveis do que para o EJB3.

0
kamal.gs