2010-05-26 16 views
7

Tengo un escenario donde mi programa Java debe comunicarse continuamente con la tabla de la base de datos, por ejemplo mi programa Java tiene que obtener los datos de mi tabla cuando se agregan nuevas filas en tiempo de ejecución. Debería haber una comunicación continua entre mi programa y la base de datos.Obtener datos de la base de datos de forma continua utilizando Java

Si la tabla tiene inicialmente 10 filas y el usuario agrega 2 filas, debe detectar esto y devolver las filas.

Mi programa no debe usar AJAX y temporizadores.

+3

¿Las llamadas (agregar filas) a la base de datos se realizan mediante el programa Java o mediante alguna otra aplicación? – JeremyFromEarth

Respuesta

0

No es el problema más simple, realmente.

Vamos a dividir en 2 pequeños problemas:

1) ¿Cómo Para habilitar la recarga sin temporizadores y ajax

2) cómo implementar lado del servidor

  1. No hay manera de notificar clientes del servidor. Entonces, necesitas usar flash o silverlight o JavaFX o Applets para crear un cliente grueso. Si el problema con Ajax es que no sabes cómo usarlo para este problema, entonces puedes investigar algunas bibliotecas listas para usar de etiquetas jsp o componentes jsf con soporte ajax.

  2. Si solo tiene 1 servidor, simplemente agregue un caché. Si hay varios servidores, considere usar cachés distribuidos.

3

Si la base de datos que está utilizando es Oracle, considere el uso de triggers, esa llamada java stored procedure, que notifica a su cliente de los cambios en el PP (utilizando JMS, RMI o lo que quieras).

0

Si tiene una base de datos de poco tráfico, podría implementar un hilo que compruebe rápidamente si hay actualizaciones en el DB (sondeo).

Si tiene un DB de alto tráfico, no lo recomendaría, porque el sondeo crea mucho tráfico adicional.

2

sin Ajax y temporizadores, no parece hacer esta tarea.

También me he enfrentado al mismo problema, donde necesito enviar algunos datos del servidor al cliente cuando cambian.

Para esto, puede usar el servidor Empujar AKA programa "Comet".

En coment

  • que crea un canal entre el cliente y el servidor, donde el cliente se suscribe para el canal en particular.
  • El servidor coloca sus datos en el canal cuando lo tiene.
  • cuando el cliente lee el canal, obtiene todos los datos en el canal y el canal se vacía.
  • así que cada vez que el cliente lea un canal, obtendrá solo datos nuevos.

también para controlar los cambios de base de datos, puede tener dos cosas,

  1. algún disparador/temporizador (Salida Quartz Scheduler)
  2. mecanismo de base de eventos, que empuja los datos en el canal de eventos particulares.

básicamente, el cliente no puede saber nada de lo que sucede en el servidor, por lo que debe enviar algunos datos o eventos para decirle al cliente que, i have some new data, please call some method. Su tipo de notificación. Por lo tanto, compruebe el empuje cometa/servidor con notificación de evento.

Espero que esto ayude.

gracias.

0

servidor notificar al cliente no es una buena idea (considere un escenario con 1000 clientes). ¿Usas alguna capa de persistencia o tienes que apegarte a JDBC puro?

+0

sí, tengo una capa de persistencia y mi base de datos es DB2. Consejo amable. – deathcaller

0

Si tiene registros binarios en MYSQL, puede ver todas las transacciones que ocurren en la base de datos.

0

Una forma portátil de hacerlo es agregar una marca de tiempo de columna (crear fecha) que indica cuándo se agregó la fila a la tabla. Después de la carga inicial del contenido, simplemente sondearás para obtener contenido nuevo que contiene una cláusula current_time> = create_date. En caso de que las filas puedan tener marcas de tiempo idénticas, debe filtrar los duplicados antes de agregarlos.

Cuestiones relacionadas