Qual a vantagem do CDI

Olá pessoal,

Há pouco iniciei uns estudos sobre a utilização do JBoss pra um novo projeto
e a combinação até então seria JSF (Primefaces) + EJB 3.1 no JBoss, pra mim estava tudo ok.
Daí vi muita gente falando sobre o CDI.
Qual a vantagem real em utiliza-lo?
(Além de poder usar os Beans diretamente no JSF, isso pra mim n faria muita diferença)

E outra, no Eclipse tem a opção de CDI Web Project, isso quer dizer que posso ter um projeto
CDI sem a utilização do Seam, pois tinha lido em algum lugar q um estaria atrelado ao outro.

Falew!

Bom,

Ainda não uso CDi mas estava estudando ele esses dias.

O que mais me chamou atenção foi a possibilidade de usar interceptors assim como usamos nos EJBs.

Pelo que entendi ele é uma evolução do SEAM…

Abs

Pois então, Kleins…eu tava pensando em justamente usá-lo co EJB, vi alguns exemplos,
só n sei ainda se realmente será vantagem.

Falew.

A diferença são as propostas básicas da especificação JCP. Segue algumas delas:

CDI é

  • especificação JCP,
  • 100% de compatível retroativo.
  • funciona em qualquer container/produto de java.
  • Vc pode usar seam com provider de CDI e troca-lo no futuro sem quebrar sua solução.

Seam

  • totalmente proprietario.
  • pode não manter compatibilidade com versões retroativas (eles quase nunca mantem)
  • Troca-lo no futuro quebrar sua solução inteira.

aproveitando o barco…
CDI seria uma “contrapartida” do Seam?

igual o kleins que uma vantagem legal do CDI é interceptors mais isso o EJB 3 tambem tem

o que mais o CDI teria?

[quote=erickfm8]aproveitando o barco…
CDI seria uma “contrapartida” do Seam?

igual o kleins que uma vantagem legal do CDI é interceptors mais isso o EJB 3 tambem tem

o que mais o CDI teria?[/quote]

CDI foi motivado pelo SEAM…que agora pode ser usado como provider de CDI.
Dai vc tem comprar um livro sobre o assunto…

Pelo que imagino…

Você vai continuar usando EJB, a diferença é que a injeção do EJB será com uma anotação diferente, via CDI com @Inject e não mais com @EJB.

No caso do uso com JSF, o que você vai deixar de usar são os ManagedBeans, podendo substituilos direto por EJBs.

Nas minhas aplicações por exemplo uso da seguinte forma.

Pagina JSF ----> ManagedBean ----> EJB (Business) ----> EJB Facade (Banco)

No caso das minhas aplicações, ficaria assim, usando um EJB como um MB.

Pagina JSF ----> EJB (via CDI) ----> EJB (Business) ----> EJB Facade (Banco)

Abs

hmm…

Realmente teria que ler um livro sobre o CDI para intender detalhadamente seus conceitos…

porem “resumidamente” alguem saberia dizer as principais vantagens fora ser especificação JCP…

[QUOTE]
Pagina JSF ----> ManagedBean ----> EJB (Business) ----> EJB Facade (Banco)

No caso das minhas aplicações, ficaria assim, usando um EJB como um MB.

Pagina JSF ----> EJB (via CDI) ----> EJB (Business) ----> EJB Facade (Banco)

[/QUOTE]

Interessante mais a vantagem?

Olá Kleins,

[quote]
Pagina JSF ----> ManagedBean ----> EJB (Business) ----> EJB Facade (Banco)

No caso das minhas aplicações, ficaria assim, usando um EJB como um MB.

Pagina JSF ----> EJB (via CDI) ----> EJB (Business) ----> EJB Facade (Banco) [/quote]

Então, desta forma, n vjo vantagem, o que pensei foi, caso eu fosse usar, diminuir uma
camada, já que JSF teria acesso direto ao EJB através do CDI (ou estou errado?)
Se estou certo, isso seria possível, correto?

Pagina JSF —> EJB Business(via CDI) ----> EJBFacade.

Pq da outra forma q vc citou mudaria apenas as nomeclaturas?

O CDI é um padrão de injeção de dependências baseado em anotações. Ele é extremamente sofisticado neste sentido e facilita muito a testabilidade da sua aplicação fora do container, além de existirem extensões portáveis disponíveis para uso.

[quote=UpTheIrons]Olá Kleins,

[quote]
Pagina JSF ----> ManagedBean ----> EJB (Business) ----> EJB Facade (Banco)

No caso das minhas aplicações, ficaria assim, usando um EJB como um MB.

Pagina JSF ----> EJB (via CDI) ----> EJB (Business) ----> EJB Facade (Banco) [/quote]

Então, desta forma, n vjo vantagem, o que pensei foi, caso eu fosse usar, diminuir uma
camada, já que JSF teria acesso direto ao EJB através do CDI (ou estou errado?)
Se estou certo, isso seria possível, correto?

Pagina JSF —> EJB Business(via CDI) ----> EJBFacade.

Pq da outra forma q vc citou mudaria apenas as nomeclaturas?[/quote]

Por uma escolha nossa, eu não misturo regras de negócio com regras visuais (tela, exibir ou não botões, validação de campos, etc)… ficaria uma bagunça…

A minha camada Business, é acessada tanto pela tela quanto por webservices e por outros EJBs de outros projetos…

Eu não vejo que CDI ou o SEAM são para economizar trabalho, e sim para organizar, padronizar e dar mais recursos… pra economizar trabalho temos diversas outras linguagens e frameworks que fazem isso sacrificando outras coisas…

Abs

Pô, foi quase um tapa rsrsrs

Como eu estou estudando ele agora, eu n consegui ver as vantagens ainda.

Uma coisa q li aqui no forum é que é possível fazer testes fora do container,
isso eu achei interessante, apesar de n ter testado nem ter visto algo parecido
ainda.

Mas vou futucar um tikin mais pra v, pois quero iniciar um projeto, que n é
grande mas que pode tomar outras porporções, e tinha pensado na estrutura
algo como vc citou:

Já resolveria até o momento, mas como vjo muita gente falando sobre a arquitetura
com o CDI, achei importante tentar descobrir vantagens.

Mas pra frente nos vamos rs

Falew

[QUOTE]
Por uma escolha nossa, eu não misturo regras de negócio com regras visuais (tela, exibir ou não botões, validação de campos, etc)… ficaria uma bagunça…

[/QUOTE]

Mais não é estranho colocar um EJB para cuidar dessas validações de tela?

A pergunta seria!

porque eu necessitaria de trocar o MB por um EJB na camada de aprensentação?

[quote=UpTheIrons]Pô, foi quase um tapa rsrsrs

Como eu estou estudando ele agora, eu n consegui ver as vantagens ainda.

Uma coisa q li aqui no forum é que é possível fazer testes fora do container,
isso eu achei interessante, apesar de n ter testado nem ter visto algo parecido
ainda.

Mas vou futucar um tikin mais pra v, pois quero iniciar um projeto, que n é
grande mas que pode tomar outras porporções, e tinha pensado na estrutura
algo como vc citou:

Já resolveria até o momento, mas como vjo muita gente falando sobre a arquitetura
com o CDI, achei importante tentar descobrir vantagens.

Mas pra frente nos vamos rs

Falew
[/quote]

Hehehehe que tapa nada… So foi direto demais… :o)

[quote=erickfm8][QUOTE]
Por uma escolha nossa, eu não misturo regras de negócio com regras visuais (tela, exibir ou não botões, validação de campos, etc)… ficaria uma bagunça…

[/QUOTE]

Mais não é estranho colocar um EJB para cuidar dessas validações de tela?

A pergunta seria!

porque eu necessitaria de trocar o MB por um EJB na camada de aprensentação?[/quote]

Eu que me confundi com os nomes… acho que quando vc troca um MB por uma classe CDI (anotada com @named), se chama Webbean… não é EJB mesmo…

abs

Agora ficou mais coeso ;D, eu só não consegui intender a vantagem ainda, mais valews

Em uma nova app que vamos começar na proxima semana os Interceptors do CDI vão fazer muita diferença.

Outra coisa também é que ganhamos mais um escopo com isso, o “conversation”.

se eu descobrir mais coisas posto aqui. :o)

Interceptors eu uso do EJB,

aee uma vantagem… esse conversation é interessante…

Erickfm8,

[quote]
Mais não é estranho colocar um EJB para cuidar dessas validações de tela?

A pergunta seria!

porque eu necessitaria de trocar o MB por um EJB na camada de aprensentação?[/quote]

Realmente, ficaria ums estrutura desengonçada, acho que o lugar do EJB é cuidar do "business"
mesmo, a camada MB ou WebBean (como li aqui) deve focar mais o “Controller”, vai virando camada
feito a p… no sistema, mas de outra forma fica meio zoneado mesmo, e pelo q vi, se fosse usar o EJB
com anotação @Named, perde-se um pouco em relação à flexibilidade do escopo, então, volto ao que
Kleins havia dito:

Melhor assim, seguir o mesmo esqueleto do ManagedBean com a flexibilidade do CDI.

Acho q é isso, mas quaisquer outras vantagens serão bem vindas ao post. :slight_smile:

E galera, “vamo” melhorar o nosso “portuga”, tem coisa meio osso aqui rs.

Falew.

Na verdade anotar um bean como @Named não o torna um EJB, somente um bean gerenciado belo CDI. EJB’s são anotados com @Stateless ou @Statefull (ou @MessageDriven para beans JMS).

Diferença?Beans CDI não tem suporte a transação ou chamadas remotas por exemplo.

Eu andei fazendo uns testes e gosto de fazer assim:

Quanto às vantagens do CDI, ele tem recursos interessantes, como processamento de eventos assíncronos, qualificadores, “produtores”…