Ojbeto EJB injetado em um Managed Bean

Boa tarde a todos,

Venho trazer uma indagação que já é meio antiga, já vi uns dois posts sobre esse assunto, mas sem opiniões fortes o suficientes para me dar certezas.

O assunto que estou me referindo é a INJEÇÃO DE UM OBJETO EJB, SENDO STATEFUL, DENTRO DE UM MANAGED BEAN.

Boas práticas dizem para se EVITAR tal ação, para que não se mostre o estado específico do objeto em uma classe multithread, para muitos usuários.

A sugestão é encapsular o objeto em um HttpSession.

E ai, o que vocês acham ?

Até onde eu sei, para cada usuário logado, haverá a injeção de um Session Bean distinto !!

Seria necessário realmente encapsular o objeto ?

A sugestão é rever sua arquitetura. Até hoje não vi um real uso para stateful.

Outra coisa, um Stateful dentro de um SessionScoped é OK.

Eu particularmente nunca gostei de SFSBs.

Por que você não explica um pouco mais o seu problema, e aí assim o pessoal consegue sugerir melhorias/alterações.

[quote=Hebert Coelho]A sugestão é rever sua arquitetura. Até hoje não vi um real uso para stateful.

Outra coisa, um Stateful dentro de um SessionScoped é OK.[/quote]

Rever minha arquitetura ? Possivelmente não ha essa necessidade.
Para entender melhor sobre o Session Bean Stateful, dê uma boa procurada em um bom material EJB que verá as diferenças, e verá que não entendeu exatamente o conceito.
Em fim, meu questionamento não é esse e sim sobre em injetar diretamente ou não o Session bean dentro do Managed Bean. As boa práticas dizem que não é bom fazer isso.

JSF + EJB + JPA Não está dificil de entender o que quis dizer com isso.

Sim, Stateful dentro de uma SessionScoped com certeza é ok. Independente do escopo, estou tratando de um MANAGED BEAN sendo com o escopo que desejar e a injeção de um EJB nele, e se essa INJEÇÃO feita de forma DIRETA tem alguma diferença em se fosse ENCAPSULAR o Session Bean em um HttpSession e recupera-lo no MANAGED BEAN.
Não sei se consegue perceber isso, mas se trata de SEGURANÇA.

Eu não estou com problemas, estou LEVANTANDO essa questão que é muito importante, que acaba por envolver o tema segurança. Injetar ou não injetar o Session Bean direto no Managed Bean ? Encapsular ele em um HttpSession e recupera-lo no Managed Bean ? … o que seria correto ?

[quote=Rodrigo Sasaki]Eu particularmente nunca gostei de SFSBs.

Por que você não explica um pouco mais o seu problema, e aí assim o pessoal consegue sugerir melhorias/alterações.[/quote]

Primeiramente nesse fórum tem muito flood. Os moderadores deveriam rever isso. Postagens como respostas, deviam ser feitas somente para esclarecer duvidas, ou somente em total acordo com o tema do tópico, e não dizer quem vai esclarecer, ou coisas do gênero, postar coisas que não vai levar a nada. Me desculpe, não te conheço e nem quero briga, mas acho isso perca de tempo. Postar pra dizer que não gosta de uma coisa, e depois dizer que alguém vai sugerir/alterar algo, é sem necessidade. Estou falando disso num âmbito de organização. Conheço muito analistas que falam mal desse forum pois é uma baderna, e com razão. Estou usando a oportunidade pra dizer, porque isso é desorganização. Só pra dizer que posta muito no fórum? Qualidade é diferente de quantidade. Parece irrelevante, mas se for juntar tanta postagem inadequada, iriam ver o quanto de banco foi consumido INADEQUADAMENTE, fora a baderna que vira o tópico. Fica a dica.

Em fim, eu não estou com problemas, estou LEVANTANDO um questionamento que é bem RELEVANTE.

Até onde sabemos EJB é um componente de negocio para a camada de negocio e JSF um framework para camada de Visão. As vezes há a necessidade de se injetar algum Session Bean dentro de um Managed Bean. So que as melhores praticas dizem que não é aconselhável, principalemente se for do tipo Stateful, pois deixa seu estado em aberto pra qualquer um ver. A susgestão dada para resolver o problema é encapsular o Session Bean em um HttpSession e recupera-lo no Managed Bean, ao invés de injeta-lo diretamente.

A pergunta é, qual forma seria a correta ? Na prática, teria alguma diferença ?

Sinceramente. Tem gente que não tem um pingo de humildade.

A minha resposta e a do Hébert foram relacionadas ao que você está questionando, mas você rejeitou achando que é perca de tempo e não quis analisar pra perceber.

A sugestão de usar Stateless Beans tem a ver com você não guardar estado das requisições, o que é uma boa prática. A não ser que seja um sistema bem fechado, você não sabe o quanto ele pode crescer, e mesmo se for fechado, as vezes não sabe. E é claro pra todos que um SFSB é mais caro do que um SLSB.

Caso você precise de mais máquinas para atender a demanda, vai ficar replicando sessões? Bom, se essa é a melhor prática pra você fique à vontade.

Agora perceba que a nossa sugestão, além de remover a necessidade de ter que ficar gerenciando sessões, te traz diversas outras vantagens, como sabemos, não importa qual instância de um SLSB atenderá sua requisição, o mesmo não pode ser dito para um SFSB.

E quanto ao GUJ, as pessoas aqui são livres para declarar suas opiniões relacionadas ao assunto. Se quer um site estritamente de Q&A, vá para o Stackoverflow

[quote=Theringeye][quote=Hebert Coelho]A sugestão é rever sua arquitetura. Até hoje não vi um real uso para stateful.

Outra coisa, um Stateful dentro de um SessionScoped é OK.[/quote]

Rever minha arquitetura ? Possivelmente não ha essa necessidade.
Para entender melhor sobre o Session Bean Stateful, dê uma boa procurada em um bom material EJB que verá as diferenças, e verá que não entendeu exatamente o conceito.
Em fim, meu questionamento não é esse e sim sobre em injetar diretamente ou não o Session bean dentro do Managed Bean. As boa práticas dizem que não é bom fazer isso.

JSF + EJB + JPA Não está dificil de entender o que quis dizer com isso.

Sim, Stateful dentro de uma SessionScoped com certeza é ok. Independente do escopo, estou tratando de um MANAGED BEAN sendo com o escopo que desejar e a injeção de um EJB nele, e se essa INJEÇÃO feita de forma DIRETA tem alguma diferença em se fosse ENCAPSULAR o Session Bean em um HttpSession e recupera-lo no MANAGED BEAN.
Não sei se consegue perceber isso, mas se trata de SEGURANÇA.

Eu não estou com problemas, estou LEVANTANDO essa questão que é muito importante, que acaba por envolver o tema segurança. Injetar ou não injetar o Session Bean direto no Managed Bean ? Encapsular ele em um HttpSession e recupera-lo no Managed Bean ? … o que seria correto ?

[/quote]Mesmo eu tendo mais de 10 anos desenvolvendo, certificação em EJB e JPA e livro escrito em JSF devo ter falado uma baita merda então.

Desculpe…

Boa sorte aí.

[quote=Hebert Coelho][quote=Theringeye][quote=Hebert Coelho]A sugestão é rever sua arquitetura. Até hoje não vi um real uso para stateful.

Outra coisa, um Stateful dentro de um SessionScoped é OK.[/quote]

Rever minha arquitetura ? Possivelmente não ha essa necessidade.
Para entender melhor sobre o Session Bean Stateful, dê uma boa procurada em um bom material EJB que verá as diferenças, e verá que não entendeu exatamente o conceito.
Em fim, meu questionamento não é esse e sim sobre em injetar diretamente ou não o Session bean dentro do Managed Bean. As boa práticas dizem que não é bom fazer isso.

JSF + EJB + JPA Não está dificil de entender o que quis dizer com isso.

Sim, Stateful dentro de uma SessionScoped com certeza é ok. Independente do escopo, estou tratando de um MANAGED BEAN sendo com o escopo que desejar e a injeção de um EJB nele, e se essa INJEÇÃO feita de forma DIRETA tem alguma diferença em se fosse ENCAPSULAR o Session Bean em um HttpSession e recupera-lo no MANAGED BEAN.
Não sei se consegue perceber isso, mas se trata de SEGURANÇA.

Eu não estou com problemas, estou LEVANTANDO essa questão que é muito importante, que acaba por envolver o tema segurança. Injetar ou não injetar o Session Bean direto no Managed Bean ? Encapsular ele em um HttpSession e recupera-lo no Managed Bean ? … o que seria correto ?

[/quote]Mesmo eu tendo mais de 10 anos desenvolvendo, certificação em EJB e JPA e livro escrito em JSF devo ter falado uma baita merda então.

Desculpe…

Boa sorte aí.[/quote]

Infelizmente levou para o lado pessoal.

Desculpe se pareceu grosseiro. Mesmo assim obrigado !!

[quote=Rodrigo Sasaki]Sinceramente. Tem gente que não tem um pingo de humildade.

A minha resposta e a do Hébert foram relacionadas ao que você está questionando, mas você rejeitou achando que é perca de tempo e não quis analisar pra perceber.

A sugestão de usar Stateless Beans tem a ver com você não guardar estado das requisições, o que é uma boa prática. A não ser que seja um sistema bem fechado, você não sabe o quanto ele pode crescer, e mesmo se for fechado, as vezes não sabe. E é claro pra todos que um SFSB é mais caro do que um SLSB.

Caso você precise de mais máquinas para atender a demanda, vai ficar replicando sessões? Bom, se essa é a melhor prática pra você fique à vontade.

Agora perceba que a nossa sugestão, além de remover a necessidade de ter que ficar gerenciando sessões, te traz diversas outras vantagens, como sabemos, não importa qual instância de um SLSB atenderá sua requisição, o mesmo não pode ser dito para um SFSB.

E quanto ao GUJ, as pessoas aqui são livres para declarar suas opiniões relacionadas ao assunto. Se quer um site estritamente de Q&A, vá para o Stackoverflow[/quote]

O que eu não queria aconteceu … causar intriga. Minha intenção não era essa, as palavras as vezes são diferentes ao escreve-las. Sim, concordo com você.
Encerro por aqui. Obrigado e desculpe qualquer coisa !!