Problema ao executar uma rotina

preciso criar uma rotina que execute de 40 em 40 minutos , o metodo ao ser executado dever ir ao banco e listar
alguns registros, o banco utilizado é o mysql e estou utilizando jpa 2.1 -eclipselink, o problema começa quado ele faz a primeira ida ao banco e lista os registros, após isso quando os registros são alterados no banco na listagem do metodo as alteraçoes não surte efeito e os registros continuam inalterados

1° o método para buscar no banco os registros

       public List<Pessoa> listarTodos() {
    try {
        List<Pessoa> listar = new ArrayList<>();
        listar = em.createQuery("SELECT p FROM Pessoa p ").getResultList();
        return listar;
    } catch (NoResultException e) {
        e.printStackTrace();
    }
    return null;
}

2° método para listar os registros

  public void teste() {
    List<Pessoa> listar = new ArrayList<>();
    listar = listarTodos();
    for (int i = 0; i < listar.size(); i++) {
        System.out.println(listar.get(i).getNome());
    }
         
}

3° método que faz ser executado de tempos em tempos

   public void rotina() throws InterruptedException {
        
    TimerTask task = new TimerTask() {
        public void run() {
            teste();
                      }
    };
    Timer timer = new Timer();

    timer.scheduleAtFixedRate(task, 0, 2 * 1000);

}

o que pode ser feito pra que isso funcione ?

Ola,

Pergunta boba, mas, você fez o commit no banco?

Outra coisa é que o eclipselink mantem um cash, evitando busca desnecessária no banco. Como as alterações estão sendo feitas direto no banco o eclipselink não tem conhecimento que houve alguma alteração, logo ele julga desnecessário ir no banco e fazer uma nova consulta. Você pode alterar essa consulta para jdbc que resolveria o problema.

campelo.m , sim já tentei commit mas continua no mesmo, tambem já tentei fazer flush mas dá erro , tambem tentei clear e não da em nada, mas me fala mais sobre como alterar a consulta para jdbc não entendi direito…

Ola,

De uma olhada nessa apostila para você entender sobre jdbc.

campelo.m tava achando que era uma coisa diferente… mas blz, entendi o que vc quis dizer , vou modificar aqui e testar novamente , valeu !

campelo.m, jdbc resolve, bem como hibernate, o problema ocorria justamente pelo fato do eclipselink fazer cache e não ir novamente no banco , mas o hibernate e o jdbc não , então foi só mudar para hibernate e tudo funcionou perfeitamente até agora