Como obter obter o contexto da aplicação?

3 respostas
R

Olá pessoal,

Estou precisando obter o contexto da aplicação, mas não estou na classe do mesmo... como poderia fazer isso?

Trecho da classe onde recupero o objeto servlet para obtenção do contexto da aplicação... tentarei fazer isso a partir de outra classe instanciado o método alimentaCombos()

public void alimentaCombos(){    
    	alimentaCombos(servlet);
    }    
    
    public static void alimentaCombos(ActionServlet servlet){
        ControleAnuncio.alimentaAdServers(servlet);
    }
Através do método alimentaCombos() eu acesso a classe acima com a outra classe que tem o seguinte código:
public class AlimentaCombos extends TimerTask{	
	public void run() {	
		AdsDetalheAction ada = new AdsDetalheAction();
		ada.alimentaCombos();		
		System.out.println("atualizei contexto");
		LogSis.logar(LogSis.LOG4J_DEBUG_LEVEL,"atualizei contexto");
	}
}
O objetivo é o seguinte: através da classe AlimentaCombos instancio o método da primeira classe onde posso recuperar o parametro servlet dessa mesma classe ai com esse parametro acesso o método limentaCombos(ActionServlet servlet) mas ele não recupera o objeto servlet dessa forma, através de instancia...

Heeeelp!

Obrigado!

3 Respostas

J

Não entendi muita coisa, o que você pretende com isso exatamente?

R

Veja se assim fica mais claro:

import java.util.GregorianCalendar;
import java.util.Timer;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

/**
 * Classe responsavel por executar tarefas agendadas: alimentar dados no combo.
 * @author rodrigo.marini
 */
public class ScheduleCombos implements ServletContextListener{	
	Timer timer = null;
//	Invocado pelo container no inicio da aplicação.
	public void contextInitialized(ServletContextEvent sce) {
		timer = new Timer();
		timer.schedule(new AlimentaCombos(), 0);		
		GregorianCalendar gc = new GregorianCalendar(); //variável que irá receber a hora da próxima atualização	    		
		if (gc.get(GregorianCalendar.MINUTE) >= 6){ 
//			ajustar hora atual+uma hora : 05min : 00 segundos			
			gc.add(GregorianCalendar.HOUR, gc.get(GregorianCalendar.HOUR)+1);
		}
		gc.set(GregorianCalendar.MINUTE, 5);
		gc.set(GregorianCalendar.SECOND, 0);		
		timer.scheduleAtFixedRate(new AlimentaCombos(), gc.getTime(), 3600000);
	}
//	Invocado no término da aplicação.
	public void contextDestroyed(ServletContextEvent sce) {
		if(timer!=null) timer.cancel();		
	}	
}
/**
 * Classe usada para acessar o método responsável pela carga de dados nas combos.
 * @author rodrigo.marini
 */
public class AlimentaCombos extends TimerTask{	
//  Responsável pela execução da tarefa agendada: carregar os combos.
	public void run() {	
		AdsDetalheAction ada = new AdsDetalheAction();
		ada.alimentaCombos();		
		System.out.println("atualizei contexto");
		LogSis.logar(LogSis.LOG4J_DEBUG_LEVEL,"atualizei contexto");
	}
}
public class AdsDetalheAction extends Action {

    /*
     * (non-Javadoc)
     * 
     * @see org.apache.struts.action.Action#execute(org.apache.struts.action.ActionMapping,
     *      org.apache.struts.action.ActionForm,
     *      javax.servlet.http.HttpServletRequest,
     *      javax.servlet.http.HttpServletResponse)
     */
    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) {

...

 /**
     * Usado como ponte para outra classe carregar o servlet no contexto da aplicação, acessando
     * alimentaCombos(ActionServlet).
     */
    public void alimentaCombos(){    
    	alimentaCombos(servlet);
    }    
    /**
     * Carrega no contexto da aplicação, se não estiverem presentes, os dados utilizados nas páginas de Anúncios
     * @param servlet objeto para obtenção do contexto da aplicação onde os dados serão salvos
     */
    public static void alimentaCombos(ActionServlet servlet){
ControleAnuncio.alimentaAdServers(servlet);
}
essa é a idéia!!Mas não funciona, porém se a chamada fosse feita diretamente da classe AdsDetalheAction dessa forma:
(...)
alimentaCombos(servlet);
public static void alimentaCombos(ActionServlet servlet){
        ControleAnuncio.alimentaAdServers(servlet);
}
Daria certo... mas tem que ser da outra forma!
R

Obrigado, já resolvi!!
Abraço!

Criado 19 de janeiro de 2007
Ultima resposta 19 de jan. de 2007
Respostas 3
Participantes 2