2011-11-30 13 views
5

Voglio spostare i record da un database a un altro che si trovano su macchine diverse. i record dovrebbero essere rimossi dal primo database e inseriti nel secondo database atomicamente.come implementare una transazione distribuita a lungo termine in j2ee

possiamo usare xa? credo che usi un algoritmo di commit a 2 fasi che richiede i blocchi di blocco sulle risorse

il database di destinazione è un database EIS, quindi dovrebbe essere bloccato per un tempo minimo.

+0

Quanto "lunga corsa" intendi? Ore ? Giorni? –

+0

Sono entrambi database Oracle? In tal caso, l'utilizzo di dblink potrebbe essere un'opzione. Questa connessione sarà all'interno del tuo livello db. Questo potrebbe essere invocato attraverso una procedura o un plsql. – techuser

risposta

0

XA non ha alcuna incidenza sul meccanismo di blocco. Si limita a garantire che ACIDity venga conservata anche se si aggiornano due risorse transazionali separate. Il tuo usecase ne aggiorna solo uno, se ho capito bene, quindi XA non è necessario qui.

+0

se non xa, che altro? –

+0

una transazione locale. Stai aggiornando un singolo database. Non importa se i dati provengono dalla GUI o formano un altro database. Usa il tuo database di destinazione esattamente come in ogni altro caso d'uso che aggiorna il database. –

+0

se utilizzo una transazione locale, è possibile che i dati siano commessi sulla destinazione ma non cancellati dalla fonte. –

1

XA è in effetti un protocollo di blocco commit a 2 fasi, ma nel mio caso ci sono solo due entità coinvolte con la prima entità molto veloce. quindi 2PC funzionerà in modo efficiente per me.

per uno scenario più generale È possibile utilizzare il commit di fase 3. è un protocollo non bloccante. anche se non sembra avere alcuna specifica java.

anche incontrato BTP e http://jotm.objectweb.org/jotm-btp.html non sono sicuro di quanto possa essere fuso con l'adattatore JDBC.

Problemi correlati