2011-11-30 11 views
5

Quiero mover registros de una base de datos a otra que están en máquinas diferentes. los registros deben eliminarse de la primera base de datos e insertarse en la segunda base de datos atómicamente.cómo implementar la transacción distribuida de larga ejecución en j2ee

¿Podemos usar xa? Creo que xa usa un algoritmo de confirmación de 2 fases que requiere bloqueos de bloqueo en los recursos

la base de datos de destino es una base de datos EIS, por lo que debe estar bloqueada durante un tiempo mínimo.

+0

¿Qué significa "larga carrera"? Horas? Dias ? –

+0

¿Son ambas bases de datos Oracle? Si es así, usar dblink podría ser una opción. Esta conexión estará dentro de tu capa de db. Eso podría ser invocado a través de un procedimiento o un plsql. – techuser

Respuesta

0

XA no tiene ninguna incidencia en el mecanismo de bloqueo. Solo se asegura de que se preserve ACIDity incluso si actualiza dos recursos transaccionales separados. Tu usercase solo actualiza uno, si entiendo correctamente, por lo que XA no es necesario aquí.

+0

si no xa, ¿qué más? –

+0

una transacción local. Estás actualizando una única base de datos. No importa si los datos provienen de la GUI o forman otra base de datos. Use su base de datos de destino exactamente como en cualquier otro caso de uso que actualice la base de datos. –

+0

si utilizo una transacción local, entonces es posible que los datos estén comprometidos con el objetivo pero no se borren de la fuente. –

1

XA es de hecho un protocolo de bloqueo de compromiso de 2 fases, pero en mi caso solo hay dos entidades que se invocaron con la primera entidad que es muy rápida. entonces 2PC funcionará eficientemente para mí.

para un escenario más general Se puede utilizar la confirmación de 3 fases. es un protocolo sin bloqueo. aunque no parece tener especificaciones de Java.

también se encontraron con BTP y http://jotm.objectweb.org/jotm-btp.html no estoy seguro de lo fácil que puede fusionarse con el adaptador JDBC.

Cuestiones relacionadas