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()
[code]public void alimentaCombos(){
alimentaCombos(servlet);
}
public static void alimentaCombos(ActionServlet servlet){
ControleAnuncio.alimentaAdServers(servlet);
}[/code]
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!
Não entendi muita coisa, o que você pretende com isso exatamente?
Veja se assim fica mais claro:
[code]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();
}
}[/code]
[code]/**
-
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");
}
}[/code][code]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);
}
[/code]
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!
Obrigado, já resolvi!!
Abraço!