Alocar Objetos em Scoped (contexto)

Pessoal como armazeno objeto em nivel de aplicação

Escopos Java EE para Web

  • page
    -request
    -session
    -application

dúvidas armazenar no contexto do jsf? spring, ejb?

JSF tem varios scoped - view - request - application … porem não queria armazer usando JSF

alguem ja fez isso?

Grato

off *** Po mano, tu com mais de 1k de mensagens escrevendo título de post em CAPS UP? :stuck_out_tongue: *** on

Você pode criar um MB por exemplo com a anotação @AplicationScoped e armazenar tudo dentro dele.

jakefrog

mudei o post

então isso no JSF 2, no JSF1.x ele não permite anotações isto é feito no arquivo de configuração do faces… porem isto não vem ao caso.p…

então é só uma Objeto (Lista ) saca? não quero criar um MB só pra isto

outra coisa

tem como fazer via spring ou ejb isto?

EJB nunca ouvi falar.
Spring não sei.
JSF 1? hum… Veja c isso te ajuda. http://www.i-coding.de/www/en/jsf/application/start-initialization.html
JSF 2 - pq não criar um MB? o custo é ridículo na memória e vale mais a pena pois é mais fácil controlar um objeto por get/set do que ServletContext.setAttribute(key,object); ServletContext.getAttribute(key);

  • Nem é questao de memoria é questão de Criar um ManagendBean só pra isso, da uma quebrada na OO do sistema
    -minha lista fica na camada de service
  • Seria interessante fazer com spring, ( alguem ja fez isto) ?

Se for EJB 3.1 voce pode usar anotação @Singleton que é a mesma coisa que um Bean de aplicação

No meu caso , não seria isto … quero armazer este objeto em nivel de aplicação porem a cada 24 horas por exemplo teria que recarregar esta lista

então neste caso não queria fazer um Singleton

Voce poderia usar um EJB Singleton do EJB 3.1
e api @Schedule para modificar a lista neste EJB

Só porque é singleton não significa que o objeto não pode ser alterado ele so não pode ser instanciado mais de uma vez

Sim, é que por anotação não imaginava como fazer isto…

ai como vc mencionou @Schedule faz isto…

então é extamente isto que eu quero…

mais la vem… EJB 2.x estou usando…

tem como fazer isto no EJB 2? estou usando spring tambem …

andei pesquisando tambem o Ejb -Timer daria para fazer isto ?

Tipo no 3 eu marco o metodo com @TimerOut
e no 2?

Estava dando mais uma pesquisa e pensei de fazer desta formar

1º Criar um Singleton que é mesma coisa que o nivel de aplicação

2º-depois criar um Schedule no Spring para realizar o agendamento programado

<bean id="agendamento" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">  
        <property name="targetObject" ref="empresaService" />  
        <property name="targetMethod" value="atualizarEmpresas" />
        <property name="concurrent" value="false" />  
	</bean>  

	<bean id="atualizaEmpresa" class="org.springframework.scheduling.quartz.CronTriggerBean">  
    	<property name="jobDetail" ref="agendamento" />  
    	<property name="cronExpression" value="0 0 * * * ?" />  
	</bean>  
	
	<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">  
    	<property name="triggers">  
        	<list>  
            	<ref bean="atualizaEmpresa" />  
        	</list>  
    	</property>  
	</bean>  

Pessoal o que acharam da classe com Singleton …

??


package br.com.bradesco.web.recebimentoarquivo.service.business.impl;
import java.util.ArrayList;
import java.util.List;

import br.com.bradesco.web.recebimentoarquivo.service.business.IEmpresaService;
import br.com.bradesco.web.recebimentoarquivo.service.business.bean.Empresa;
import br.com.bradesco.web.recebimentoarquivo.service.dao.IEmpresaDAO;

public class EmpresaService implements IEmpresaService {

	// Injetado pelo Spring
	private IEmpresaDAO empresaDAO;

	private static List<Empresa> empresas ; 
	
	public EmpresaService() {
	}

	// GET E SET
	
	public IEmpresaDAO getEmpresaDAO() {
		return empresaDAO;
	}

	public void setEmpresaDAO(IEmpresaDAO empresaDAO) {
		this.empresaDAO = empresaDAO;
	}
	
	public static synchronized List<Empresa> getEmpresas(){
		if(empresas == null ){
			System.out.println("CRIAA LISTA DE EMPRESA NO SINGLETON");
			empresas = new ArrayList<Empresa>();
		}
		return empresas;
		
	}

	// METODOS

	public List<Empresa> buscarTodos() {
		if(getEmpresas().isEmpty() ){
			System.out.println(" BUSCAR TODOS");
			empresas = this.getEmpresaDAO().buscarTodos();
		}
		return empresas;
	}

	
	public void atualizarEmpresas(){
		System.out.println("Atualiza A LISTA EMPRESA");
		empresas = this.getEmpresaDAO().buscarTodos();
	}
	
	
}

Então o meu simgleton está “nada haver”

não imagino como criar o singleton de empresas apartir de um objeto de instacia que seria o

this.getEmpresaDAO().buscarTodos();

nem sei se isto é certo