İyimser Eşzamanlı İstisnalar(Optimistic Concurrency Exceptions)

İyimser eşzamanlı kontrolü (optimistic concurrency check (OCC)) AX 2009 da performance arttırma işlevidir. Gerçek güncelleme anına kadar, veri tabanından alınan bir kayıt değiştirilmeyecek varsayılır. Bunun anlamı veri tabanında ki bu kayıt üzerinde daha az kilit olması ve diğer kullanıcıların daha hızlı erişmesidir.

Aynı zamanda bunun anlamı bir kullanıcı kaydı güncellerken diğeride bu kaydı ele alabilir. Bu da kayıt tutarsızlığına sebep olabilir. Şöyle ki; eğer ikinci kullanıcıda kaydı güncellemeyi dener ise bir hata fırlatılır. Bu durumda sistem şunu yapar; recVersion alanını kullanarak hangisi güncellendi ise bir kayıt için her seferinde bir güncelleme yapılır.

OCC İstisna Yönetimi

catch (Exception::UpdateConflict)        

              

{                                                      

    if (appl.ttsLevel() == 0)                          

    {                                                  

        if (xSession::currentRetryCount() >= #RetryNum)

        {                                              

            throw Exception::UpdateConflictNotRecovered;

        }                                              

        else                                            

        {                                              

            retry;                                     

        }                                              

    }                                                  

    else                                                

    {                                                  

        throw Exception::UpdateConflict;               

    }                                                  

}                     

Eğer OCC için bir sorun meydana gelir ise sistem UpdateConflict hatası fırlatır ve catch bloğu bu hatayı yakalar.

Kod tts seviyesini kontrol eder ve bu sıfır değil ise kod hala tts işlemi içindedir demektir ve diğer bir  UpdateConflict hatası fırlatır. Bu tts işlemi içinde olmayıncaya kadar devam eder. Kod yazarı kod tekrar çağırıldığında bütün verinin güncellenmiş olmasını temin etmelidir.

Birkez kod transaction dışına çıktığında, retry komutu çağırılır. Kod bloğu tekrar işletilir ve sorun belirlenen #RetryNum macro (varsayılan 5tir) sayısı kadar deneme boyunca devam ederse UpdateConflictNotRecovered istisnası fırlatılır ve işlem iptal edilir ve denemeler durur.

 
Comment are closed.