Já estou estudando desenvolvimento web há alguns meses e pesquisei muito para encontrar uma definição clara sobre managed beans, porém não encontrei.
Por enquanto o que eu entendi é o seguinte:
Bean
uma classe com construtor sem parâmetros
conter métodos assessores (getters e setters) para os atributos
deve conter regras de negócio ???
Managed Beans
são os beans gerenciados pelo JSF, ou seja, são os beans que o JSF enxerga.
tb deve ter o construtor vazio ???
deve conter regras de negócio ???
Aprecio a ajuda de todos para poder esclarecer de uma vez por todas o conceito de Managed Beans.
Mas no meu ponto de vista, o ideal seria criar um Back Bean e um Managed Bean, onde no bean você teria todos os atributos que se fizerem necessários, como algo para “gravar” um nome, idade, cpf e assim por diante, de acordo com sua view. Desta forma, o Managed Bean ficaria responsavél pelo acesso ao Back Bean apenas para buscar as informações mas todos os métodos necessário ficaram nele, assim, o código fica mais legível e fácil de entender.
Vamos lá: Bean é totalmente diferente de Managed Bean. Só são iguais no nome.
Bean é uma definição antiga, do tempo em que se achava que os desenvolvedores Java iriam programar visualmente. Beans eram classes que tinham construtores vazios, além de métodos getters e setters. Não haveria outros métodos porque uma ferramenta visual não iria detectá-los. A ideia nunca deu certo, o conceito foi ampliado por frameworks independentes (como o Spring), mas caiu em desuso com o uso de anotações. Getter e setter, hoje em dia, só é util para ser consumido por expressões JSTL.
Managed Beans teve seu conceito ampliado, não é só usado pelo JSF, mas pelo CDI também. O conceito é bem genérico: um managed bean é um objeto gerenciado pelo contâiner, podendo ter dependências injetadas. Só precisa ter o construtor vazio. Não há nenhuma diretriz com relação ao uso do Managed Bean, se vai haver ou não regra de negócio dependerá de como será usado e em qual camada seu objeto pertence.
Fiquei até emocionado aqui com a explicação, coesa!
Bem, vou dar um exemplo e gostaria de saber como vc programaria.
Sei lá, tenho uma agenda. Nela tenho uma classe Contato e dentro de Contato tenho ArquivosCompartilhados.
O que vc transformaria em Managed Beans? O que vc persistiria no banco?
Vejo gente fazendo o seguinte:
@ManagedBeans
public class ContatoMB{
Contato contato;
...