Actualizar datos en programa de escritorio en RED

hola que tal.
Diseñe un programita en java+swing este es para el escritorio.
Necesitaba una forma de actualizar datos en un JTable, para eso utilize Timer
Cada 5 segundos actualizo la informacion del JTable ya que el programa lo usa varias personas.
El programa usa mysql para el alamcenamiento d ela info.
El asunto es que ando buscando una solucion que no sea el Timer para actualizar los datos.

tiro la pregunta al foro para ver si alguien me da una idea de como manejar esta situacion.

De antemano gracias a todos.
Ya que con su ayuda he hecho mis primeros proyectos en java.

Nota estoy usando:hibernate para la persistencia
Saludos

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

lazy

Cargar los datos solamente cuando realmente los necesitas, de manera lazy, con un tiempo de expiración.

Puedes tener un componente que es el que actualiza los datos:

public class MiDao {

  private long lastFetch;
  private long expiran;
  private List<Registro> datos;

  public void setExpiracion(long value) { expiran=value; }

  protected void fetch() {
    //aqui lees de la base de datos los registros y los pones en la lista "datos"
  }

  public List<Registro> getRegistros() {
    if (!sonActuales()) {
      //Leemos o releemos los datos solamente si ya expiraron
      fetch();
      lastFetch=System.currentTimeMillis();
    }
    return datos;
  }

  public boolean sonActuales() {
    return System.currentTimeMillis()-lastFetch > expiran;
  }
}

Con eso solamente vas a leer los datos cada que expiran (puedes ponerle un timeout de 5 segundos o de 5 minutos o lo que tu quieras). Ahora lo que falta es que pidas los datos cuando el usuario los va a ver solamente. Registra un ComponentListener para saber cuando tu JTable es mostrado:

public class Actualizador extends ComponentAdapter {
  private MiDao dao;
  public void componentShown(ComponentEvent ev) {
    if (!miDao.sonActuales()) {
      List<Registro> datos = miDao.getRegistros();
      //Poblar el JTable
    }
  }
}

De ese modo, los datos serán cargados únicamente cada vez que el usuario ve ese JTable y ya pasó el tiempo de expiración. Si en una hora no los ve, no los cargas. Si el tiempo de expiración es de 1 minuto y el usuario regresa a ver ese JTable cada 10 segundos, sólo se cargarán hasta que pase 1 minuto.

suscribir evento al jtable

como le digo a la clase Actualizador que jtable debe actualizar?