2014-07-21 18 views
9

Birisi, bir fazlı ve iki fazlı işlem arasındaki farkı açıklayabilir. Anladığı kadarıyla, tek aşamalı taahhüt uygulama sunucusu (Hizmet yöntemi -> EntityManager) sırasında taahhüdünü temsil eder ve XA işlemi, veritabanına (Service method -> EntityManager -> DB) kadar aynı işlemdir ve sırayla kullanılır. Genel işlemi doğru şekilde geri almak için Öyleyse neden XA sürücülerini varsayılan olarak kullanmıyoruz? Bu sadece performans endişesi mi? Lütfen yanılıyorsam beni düzeltin.Bir fazlı ve iki fazlı (XA) işlem arasındaki gerçek fark

cevap

21

Bu fark, tek fazlı bir işlemin genellikle tek bir sistemde veya veritabanında kullanılmasıdır; iki fazlı işlem ise birden çok DB'yi veya sistemi kapsayan dağıtılmış işlemler için kullanılır. Beni için size basit bir örnek göstereyim her

Tek fazlı işlemek

BEGIN 
    INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
     VALUES (1, 'Ramesh', 32, 'Ahmedabad', 2000.00); 
    INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
     VALUES (2, 'Khilan', 25, 'Delhi', 1500.00); 
COMMIT; 

Bu PL/SQL yazılmış klasik atom işlem (Java EE dünya için de işlem olabilir EJB yöntemi hayal) 'dir Tüm eylemlerin gerçekleştirildiği ve işlemin ya da geri almanın yapıldığı tek bir aşama vardır.

İki fazlı Şimdi farklı makinelerde farklı sistemlerle ilgileniyor

//pseodocode 
BEGIN 
    UPDATE db1; //updates DB on another machine 
    UPDATE someCloudStorage; //update something on the cloud 
    INSERT INTO SomeTable VALUES(...); 
COMMIT; 

işlemek ancak (o işlem dağıtılan bu yüzden) hepsine başarıyla yazmak veya başarısız olmasını istiyorum. Yani burada Two-phase commit protocol geliyor. Temel olarak işlem yöneticisi "taahhüt için hazırla" mesajını yayınlar ve her makineden Tamam yanıtını bekler. Herkes "tamam" diyorsa, her şey işlenir - eğer değilse, tüm işlemler geri alınır.

Java'da XA işlemlerini kullanmak istiyorsanız, XA desteğine (ve düzgün yapılandırılmış XA veri kaynağına) sahip bir JDBC sürücüsüne ihtiyacınız olacağını unutmayın.

+1

Çok iyi bir açıklama. Şimdi açık görünüyor! Teşekkürler! – sidlejinks

+0

Bir şey değil, yardım ettiğine sevindim :-) –

İlgili konular