Classe chamar metodo de controller VRAPTOR [Resolvido]

Bom dia a todos!

Eu tenho um classe que implementa o Task e nela preciso chamar um método do controller do vraptor. Como eu faria isso?

Classe que implementa o task

[code]@ApplicationScoped
@Scheduled(cron = “0 15 10 ? * *”)
public class VerificaAgenda implements Task{

public void execute() {
	
}

}[/code]

Método do controller

[code]public void verifica_tempo_chamado(){
List listaCliente = clientedao.listaTudo();

	for(Cliente cliente : listaCliente){
		if(chamadodao.qtde_dias_ultimo_chamado(cliente.getId()) > 30){
			Chamado chamado = new Chamado();
			chamado.setCliente(cliente);
			chamado.setData_abertura(new Date());
			chamado.setDescricao_inicial("CLIENTE NAO ENTRA EM CONTATO POR MAIS DE 30 DIAS!");
			chamado.setTipo_problema("MLPonto");
			chamado.setStatus_tempo("NORMAL");
			chamado.setStatus_prioridade("NORMAL");
			chamado.setUsuario_abriu(usuariodao.load("clientepadrao"));
	        chamado.setDepartamento("SUPORTE");
	        chamadodao.salva(chamado);
		}
		
	}
}[/code]

desde já agradeço.

Quintanilhasi, nesse seu caso específico não terá como, pois sua Task VerificaAgenda tem escopo ApplicationScoped, e os @Resources são RequestScoped. Você pode extrair essa lógica para outra classe, também ApplicationScoped, e chamá-la tanto na Task quanto no Controller:

@Componet
@ApplicationScoped
public class VerificadorDeTempoDeChamado {


    // Recebe o ClienteDao como parâmetro do método, porque provavelmente ele é @ResquestScoped
    public void verifica(ClienteDao clientes) {
        List<Cliente> listaCliente = clientedao.listaTudo();  
                  
        for(Cliente cliente : listaCliente) {  
            if(chamadodao.qtde_dias_ultimo_chamado(cliente.getId()) > 30) {  
                Chamado chamado = new Chamado();  
                chamado.setCliente(cliente);  
                chamado.setData_abertura(new Date());  
                chamado.setDescricao_inicial("CLIENTE NAO ENTRA EM CONTATO POR MAIS DE 30 DIAS!");  
                chamado.setTipo_problema("MLPonto");  
                chamado.setStatus_tempo("NORMAL");  
                chamado.setStatus_prioridade("NORMAL");  
                chamado.setUsuario_abriu(usuariodao.load("clientepadrao"));  
                chamado.setDepartamento("SUPORTE");  
                chamadodao.salva(chamado);  
            }  
        }
    }

}

@ApplicationScoped    
@Scheduled(cron = "0 15 10 ? * *")  
public class VerificaAgenda implements Task{
    
    // Vai ter que receber o container pra poder pegar o ClienteDao que é @RequestScoped
    private Container container;
    private VerificadorDeTempoDeChamado verificador;

    public VerificaAgenda(Container container, VerificadorDeTempoDeChamado verificador) {
        this.container = container;
        this.verificador = verificador;
    }

    public void execute() {  
        ClienteDao clientes = container.instanceFor(ClienteDao.class);
        verificador.verifica(clientes);
    }  
  
} 

@Resource
public class SeuController {

    private ClienteDao clientes;
    private VerificadorDeTempoDeChamado verificador;

    public SeuController(ClienteDao clientes, VerificadorDeTempoDeChamado verificador) {
        this.clientes = clientes;
        this.verificador = verificador;
    }


    public void verificaTempoDeChamado() {
        verificador.verifica(clientes);
    }

}

bob_sponja obrigado pela ajuda!

Boas,

esse codigo funcionou?
Sempre que tendo obter um component requestScoped na task usando o container obtenho NullPointerException