Bahar - İşlem Yönetimi

Veritabanı işlemi, tek bir iş birimi olarak değerlendirilen bir eylemler dizisidir. Bu eylemler ya tamamen tamamlanmalı ya da hiç etkili olmamalıdır. İşlem yönetimi, veri bütünlüğünü ve tutarlılığını sağlamak için RDBMS odaklı kurumsal uygulamanın önemli bir parçasıdır. İşlem kavramı, aşağıdaki dört temel özellik ile tanımlanabilir:ACID -

  • Atomicity - Bir işlem, tek bir işlem birimi olarak ele alınmalıdır; bu, işlem dizisinin tamamının başarılı veya başarısız olduğu anlamına gelir.

  • Consistency - Bu, veritabanının referans bütünlüğünün, tablolardaki benzersiz birincil anahtarların vb. Tutarlılığını temsil eder.

  • Isolation- Aynı anda aynı veri kümesiyle birçok işlem gerçekleştirilebilir. Veri bozulmasını önlemek için her işlem diğerlerinden izole edilmelidir.

  • Durability - Bir işlem tamamlandıktan sonra, bu işlemin sonuçları kalıcı hale getirilmelidir ve sistem arızası nedeniyle veri tabanından silinemez.

Gerçek bir RDBMS veritabanı sistemi, her işlem için dört özelliğin tümünü garanti edecektir. SQL kullanılarak veritabanına verilen bir işlemin basit görünümü aşağıdaki gibidir -

  • İşlemi başlat komutunu kullanarak işleme başlayın .

  • SQL sorgularını kullanarak çeşitli silme, güncelleme veya ekleme işlemlerini gerçekleştirin.

  • Tüm işlemler başarılı olursa, tamamlama gerçekleştirin, aksi takdirde tüm işlemleri geri alın .

Spring çerçevesi, farklı temel işlem yönetimi API'lerinin üzerinde soyut bir katman sağlar. Spring'in işlem desteği, POJO'lara işlem yetenekleri ekleyerek EJB işlemlerine bir alternatif sağlamayı amaçlamaktadır. Spring, hem programlı hem de bildirim temelli işlem yönetimini destekler. EJB'ler bir uygulama sunucusu gerektirir, ancak Spring işlem yönetimi bir uygulama sunucusuna ihtiyaç duyulmadan uygulanabilir.

Yerel ve Küresel İşlemler

Yerel işlemler, JDBC bağlantısı gibi tek bir işlem kaynağına özgüdür, oysa küresel işlemler, dağıtılmış bir sistemdeki işlem gibi birden çok işlem kaynağına yayılabilir.

Yerel işlem yönetimi, uygulama bileşenlerinin ve kaynaklarının tek bir sitede bulunduğu ve işlem yönetiminin yalnızca tek bir makinede çalışan yerel bir veri yöneticisini içerdiği merkezi bir bilgi işlem ortamında yararlı olabilir. Yerel işlemlerin uygulanması daha kolaydır.

Küresel işlem yönetimi, tüm kaynakların birden çok sisteme dağıtıldığı dağıtılmış bir bilgi işlem ortamında gereklidir. Böyle bir durumda işlem yönetiminin hem yerel hem de küresel düzeyde yapılması gerekir. Dağıtılmış veya küresel bir işlem, birden çok sistemde yürütülür ve yürütülmesi, küresel işlem yönetimi sistemi ile ilgili tüm sistemlerin tüm yerel veri yöneticileri arasında koordinasyonu gerektirir.

Programatik ve Bildirici

Spring, iki tür işlem yönetimini destekler -

  • Programatik işlem yönetimi - Bu, işlemi programlama yardımı ile yönetmeniz gerektiği anlamına gelir. Bu size aşırı esneklik sağlar, ancak bakımı zordur.

  • Bildirime dayalı işlem yönetimi - Bu, işlem yönetimini işletme kodundan ayırdığınız anlamına gelir. İşlemleri yönetmek için yalnızca ek açıklamaları veya XML tabanlı yapılandırmayı kullanırsınız.

Bildirim temelli işlem yönetimi, programlı işlem yönetimine tercih edilir, ancak programlı işlem yönetiminden daha az esnektir ve bu da işlemleri kodunuz aracılığıyla kontrol etmenize olanak tanır. Ancak bir tür kesişen sorun olarak, bildirimsel işlem yönetimi AOP yaklaşımı ile modüler hale getirilebilir. Spring, Spring AOP çerçevesi aracılığıyla bildirimsel işlem yönetimini destekler.

Bahar İşlem Soyutlamaları

Spring işlem soyutlamasının anahtarı , aşağıdaki gibi org.springframework.transaction.PlatformTransactionManager arabirimi tarafından tanımlanır -

public interface PlatformTransactionManager {
   TransactionStatus getTransaction(TransactionDefinition definition);
   throws TransactionException;
   
   void commit(TransactionStatus status) throws TransactionException;
   void rollback(TransactionStatus status) throws TransactionException;
}

Sr.No Yöntem ve Açıklama
1

TransactionStatus getTransaction(TransactionDefinition definition)

Bu yöntem, belirtilen yayılma davranışına göre şu anda etkin olan bir işlemi döndürür veya yeni bir tane oluşturur.

2

void commit(TransactionStatus status)

Bu yöntem, durumuna göre verilen işlemi taahhüt eder.

3

void rollback(TransactionStatus status)

Bu yöntem, verilen işlemin geri alınmasını gerçekleştirir.

TransactionDefinition Spring işlem desteği çekirdek arayüzü ve aşağıdaki gibi tanımlanır -

public interface TransactionDefinition {
   int getPropagationBehavior();
   int getIsolationLevel();
   String getName();
   int getTimeout();
   boolean isReadOnly();
}

Sr.No Yöntem ve Açıklama
1

int getPropagationBehavior()

Bu yöntem yayılma davranışını döndürür. Spring, EJB CMT'den bilinen tüm işlem yayma seçeneklerini sunar.

2

int getIsolationLevel()

Bu yöntem, bu işlemin diğer işlemlerin çalışmasından ne kadar izole edildiğini döndürür.

3

String getName()

Bu yöntem, bu işlemin adını döndürür.

4

int getTimeout()

Bu yöntem, işlemin tamamlanması gereken zamanı saniye cinsinden döndürür.

5

boolean isReadOnly()

Bu yöntem, işlemin salt okunur olup olmadığını döndürür.

İzolasyon seviyesi için olası değerler aşağıdadır -

Sr.No İzolasyon ve Açıklama
1

TransactionDefinition.ISOLATION_DEFAULT

Bu, varsayılan izolasyon seviyesidir.

2

TransactionDefinition.ISOLATION_READ_COMMITTED

Kirli okumaların önlendiğini gösterir; tekrarlanamayan okumalar ve hayali okumalar meydana gelebilir.

3

TransactionDefinition.ISOLATION_READ_UNCOMMITTED

Kirli okumaların, tekrarlanamayan okumaların ve hayali okumaların meydana gelebileceğini belirtir.

4

TransactionDefinition.ISOLATION_REPEATABLE_READ

Kirli okumaların ve tekrarlanamayan okumaların önlendiğini gösterir; hayali okumalar meydana gelebilir.

5

TransactionDefinition.ISOLATION_SERIALIZABLE

Kirli okumaların, tekrarlanamayan okumaların ve hayali okumaların engellendiğini gösterir.

Yayılma türleri için olası değerler aşağıdadır -

Sr.No. Yayılma ve Açıklama
1

TransactionDefinition.PROPAGATION_MANDATORY

Mevcut bir işlemi destekler; mevcut işlem yoksa bir istisna atar.

2

TransactionDefinition.PROPAGATION_NESTED

Geçerli bir işlem varsa, iç içe geçmiş bir işlem içinde yürütür.

3

TransactionDefinition.PROPAGATION_NEVER

Mevcut bir işlemi desteklemiyor; mevcut bir işlem varsa bir istisna atar.

4

TransactionDefinition.PROPAGATION_NOT_SUPPORTED

Mevcut bir işlemi desteklemiyor; daha ziyade her zaman işlem dışı olarak yürütür.

5

TransactionDefinition.PROPAGATION_REQUIRED

Mevcut bir işlemi destekler; yoksa yeni bir tane oluşturur.

6

TransactionDefinition.PROPAGATION_REQUIRES_NEW

Varsa mevcut işlemi askıya alarak yeni bir işlem oluşturur.

7

TransactionDefinition.PROPAGATION_SUPPORTS

Mevcut bir işlemi destekler; hiçbiri yoksa işlem dışı olarak yürütülür.

8

TransactionDefinition.TIMEOUT_DEFAULT

Temel alınan işlem sisteminin varsayılan zaman aşımını kullanır veya zaman aşımları desteklenmiyorsa hiçbirini kullanır.

TransactionStatus arayüz kontrol işlem yürütme ve sorgu işlem durumu işlem kodu için basit bir yol sağlar.

public interface TransactionStatus extends SavepointManager {
   boolean isNewTransaction();
   boolean hasSavepoint();
   void setRollbackOnly();
   boolean isRollbackOnly();
   boolean isCompleted();
}

Sr.No. Yöntem ve Açıklama
1

boolean hasSavepoint()

Bu yöntem, bu işlemin dahili olarak bir kayıt noktası taşıyıp taşımadığını, yani bir kayıt noktasına dayalı iç içe işlem olarak yaratılıp yaratılmadığını döndürür.

2

boolean isCompleted()

Bu yöntem, bu işlemin tamamlanıp tamamlanmadığını, yani önceden kaydedilmiş veya geri alınmış olup olmadığını döndürür.

3

boolean isNewTransaction()

Mevcut işlemin yeni olması durumunda bu yöntem true döndürür.

4

boolean isRollbackOnly()

Bu yöntem, işlemin yalnızca geri alma olarak işaretlenip işaretlenmediğini döndürür.

5

void setRollbackOnly()

Bu yöntem, işlemi yalnızca geri alma olarak ayarlar.