2008-12-03 14 views
7

Tengo una aplicación de Java que está conectada a una vista en un db remoto de Oracle.monitor de cambio de tabla de Oracle

¿Alguien sabe de una forma en Java para controlar esta tabla en busca de cambios? Es decir. si hay inserciones de actualizaciones, etc., tendría que reaccionar.

+0

La supervisión de una tabla de base de datos para cambios es un "olor de diseño". Debería considerar la introducción de una Arquitectura dirigida por eventos (EDA) soportada por un Enterprise Service Bus (ESB). Por ejemplo Mule (www.mulesoft.com). –

+5

Sip más palabras de moda y "arquitectura" es siempre la respuesta correcta – Gaius

Respuesta

5

Puede colocar un disparador INSERT/UPDATE/DELETE en la tabla para realizar alguna acción cuando se realizan cambios de 'datos' en la tabla. (a diferencia de los cambios en la estructura de la tabla)

Creo que 10g también admite activadores en las vistas.

pero no estoy seguro de cómo se puede notar el proceso de java de este otro por votación.

lo siento.

puede crear alguna solución donde la aplicación java tiene un servidor de "escucha" y la base de datos lo devuelve un mensaje. pero eso suena difícil de mantener.

Justin Cave en los comentarios sugiere que podría configurar Oracle Streams para enviar registros de cambios lógicos (LCR) a los que una aplicación Java podría suscribirse a través de JMS. O el desencadenador podría escribir registros en una cola avanzada a la que Java podría suscribirse a través de JMS.

todavía tendrá que tener cuidado de transations Oracle .. debido a la forma transacciones de Oracle trabajan, el gatillo se dispara en el cambio, sino que también puede disparar varias veces ..

y en el anycase la aplicación Java no podría 'ver' los cambios hasta que se haya realizado una confirmación.

+0

Según la necesidad de la arquitectura, puede configurar Oracle Streams para enviar registros de cambios lógicos (LCR) a los que una aplicación Java podría suscribirse a través de JMS. O el desencadenador podría escribir registros en una cola avanzada a la que Java podría suscribirse a través de JMS. –

+0

Gracias brillantes que se parece al ticket – LenW

+0

El problema es que Streams funciona en el nivel del objeto, no estoy seguro de que pueda configurar las transmisiones para enviar un LCR para una vista. ¿La vista es tal que puede identificar un puñado de tablas para suscribirse a los cambios y luego sondear la vista para ver si realmente cambió la fila que le interesa? –

10

Mire Oracle Change Notification, una función de Oracle tan interesante.

De la documentación de Oracle: "La notificación de cambio de base de datos es una función que permite a las aplicaciones cliente registrar consultas con la base de datos y recibir notificaciones en respuesta a cambios DML o DDL en los objetos asociados con las consultas. la base de datos cuando se compromete la transacción DML o DDL ".

+0

Parece que solo funciona para devoluciones de llamada PL/SQL o C, pero eso es prácticamente todo lo que necesito gracias, ahora cómo conectarlo a la aplicación java ... :) – LenW

+0

Creo que Oracle puede llamar a los procedimientos almacenados de Java, simplemente no sé cómo hacerlo. http://www.oracle.com/technology/sample_code/tech/java/jsp/oracle9ijsp.html podría ayudar, sin embargo. – Powerlord

Cuestiones relacionadas