Escopo application managed-bean jsf

6 respostas
maurenginaldo

Oi pessoal,
Estou com algumas dúvidas com relação a managed’s beans de escopo application no jsf.

1º) Quando eu crio uma MB com o escopo application, quando ele é criado? Quando dou start na aplicação no Tomcat ou quando o 1º usuário entra na aplicação?

2º) Se ele é da aplicação, o custo de memória no servidor eu só gasto uma vez? Independente de quantos usuários entrarem?

3º) Se no meu sistema tenho listas ou informações que são pouco alteradas é recomendado que eu crie um MB com essas informações e deixo ele no escopo application?

4º) Qual a relação ou diferença de um MB com o espoco application e técnicas de cache? São a mesma coisa ou são diferentes?

5º) Se essas informações tem pequenas alterações, é recomendado que eu crie um processo que de tantas em tantas horas captura esse MB e atualize seu resultado, isso é possível ? (pelo que li sim)

6º) Tudo isso que citei acima, são boas práticas e são recomendados?

Obrigado a todos.

6 Respostas

maurenginaldo

maurenginaldo:

1º) Quando eu crio uma MB com o escopo application, quando ele é criado? Quando dou start na aplicação no Tomcat ou quando o 1º usuário entra na aplicação?

Já tenho resposta para minha 1ª dúvida :slight_smile: . Li agora no livro JavaServer Faces - Fundamentos do David Geary e Cay Horstmann, que no escopo de aplicação o MB é criado quando é requisitado pela 1ª vez por qualquer instância da aplicação e permanece ativo até a aplicação web ser removida do servidor de aplicações.

Alguém tem mais alguns conceitos sobre as outras questões. :?:

rponte

Humm… vamos lá…

Sim, só existirá uma única instância do managed bean na aplicação.

Se estas informações forem compartilhadas para a aplicação e/ou para todos os usuários então se torna recomendável deixa-lo no escopo de application.

Guardar objetos no escopo de application pode ser considerado uma forma de cache dependendo do caso, mas não quer dizer que o escopo sempre esteja funcionando como um cache.

5º) Se essas informações tem pequenas alterações, é recomendado que eu crie um processo que de tantas em tantas horas captura esse MB e atualize seu resultado, isso é possível ? (pelo que li sim)

O ideal é que o managed bean ou objeto no escopo de aplicação não fiquem sendo alterados, o ideal é que eles sejam imutáveis. Acho melhor você explicar qual o cenário do problema, assim quem sabe possamos encontrar uma solução para tuas dúvidas.

Sinceramente não entendi bem onde as suas perguntas tem a ver com boas práticas. No final das contas vai depender do caso.

maurenginaldo

Por exemplo, uma das partes da minha aplicação será um seção de notícias, que não necessariamente será atualizado diariamente, e quando atualizado uma ou duas vezes ao dia. Seria bom criar um MB com escopo application com um List dessas notícias e atualizá-lo quando uma nova notícia seja cadastrada?

rponte

Acredito que seja melhor você sempre deixar isso em escopo de request, e ir buscando no banco. Se realmente precisar de cache então utilize algum framework como o ehcache ou configuração de cache do seu framework de persistência.

maurenginaldo

Rafael,

Estava tentanto entender no que os MB de escopo application poderiam ser aplicados. Baseado em suas explicações devo utilizar para guardar valrores que não mudam e que não busco do banco.

Sou totalmente leigo com relação a cache (ainda não implementei nada, somente li algumas situações). Baseado no exemplo das notícias, o que é mais indicado, utilizar o ehcache ou cache de segundo nível com o hibernate? (se falei alguma bobagem me corrija).

Obrigado pela atenção!

rponte

Um exemplo comum de se utilizar um managed bean ou mesmo qualquer outro objeto no escopo de application é para manter a lista de UFs, algo como:

<managed-bean> <managed-bean-name>stateMap</managed-bean-name> <managed-bean-class>java.util.TreeMap</managed-bean-class> <managed-bean-scope>application</managed-bean-scope> <map-entries> <map-entry> <key>MA</key> <value>MA</value> </map-entry> <map-entry> <key>PI</key> <value>PI</value> </map-entry> <map-entry> <key>CE</key> <value>CE</value> </map-entry> <map-entry> <key>RN</key> <value>RN</value> </map-entry> .... </map-entries> </managed-bean> </faces-config>

Se você usa Hibernate então utilize o cache dele :slight_smile:

Criado 5 de junho de 2008
Ultima resposta 6 de jun. de 2008
Respostas 6
Participantes 2