Musim Semi - Manajemen Transaksi

Transaksi database adalah urutan tindakan yang diperlakukan sebagai satu unit kerja. Tindakan ini harus selesai seluruhnya atau tidak berpengaruh sama sekali. Manajemen transaksi adalah bagian penting dari aplikasi perusahaan yang berorientasi RDBMS untuk memastikan integritas dan konsistensi data. Konsep transaksi dapat dijelaskan dengan empat properti utama berikut yang dijelaskan sebagaiACID -

  • Atomicity - Transaksi harus diperlakukan sebagai satu unit operasi, yang berarti seluruh urutan operasi berhasil atau tidak berhasil.

  • Consistency - Ini mewakili konsistensi integritas referensial dari database, kunci utama unik dalam tabel, dll.

  • Isolation- Mungkin ada banyak pemrosesan transaksi dengan kumpulan data yang sama pada waktu yang sama. Setiap transaksi harus diisolasi dari yang lain untuk mencegah korupsi data.

  • Durability - Setelah transaksi selesai, hasil transaksi ini harus dibuat permanen dan tidak dapat dihapus dari database karena kegagalan sistem.

Sistem basis data RDBMS yang nyata akan menjamin keempat properti untuk setiap transaksi. Tampilan sederhana dari transaksi yang dikeluarkan ke database menggunakan SQL adalah sebagai berikut -

  • Mulailah transaksi menggunakan perintah mulai transaksi .

  • Lakukan berbagai operasi yang dihapus, perbarui, atau sisipkan menggunakan kueri SQL.

  • Jika semua operasi berhasil maka lakukan komit jika tidak, kembalikan semua operasi.

Framework Spring menyediakan lapisan abstrak di atas berbagai API manajemen transaksi yang mendasarinya. Dukungan transaksi Spring bertujuan untuk memberikan alternatif untuk transaksi EJB dengan menambahkan kemampuan transaksi ke POJO. Spring mendukung manajemen transaksi terprogram dan deklaratif. EJB membutuhkan server aplikasi, tetapi manajemen transaksi Spring dapat diterapkan tanpa memerlukan server aplikasi.

Transaksi Lokal vs. Global

Transaksi lokal dikhususkan untuk satu sumber daya transaksional seperti koneksi JDBC, sedangkan transaksi global dapat menjangkau beberapa sumber daya transaksional seperti transaksi dalam sistem terdistribusi.

Manajemen transaksi lokal dapat berguna dalam lingkungan komputasi terpusat di mana komponen dan sumber daya aplikasi berada di satu situs, dan manajemen transaksi hanya melibatkan pengelola data lokal yang berjalan pada satu mesin. Transaksi lokal lebih mudah diimplementasikan.

Manajemen transaksi global diperlukan dalam lingkungan komputasi terdistribusi di mana semua sumber daya didistribusikan ke berbagai sistem. Dalam kasus seperti itu, manajemen transaksi perlu dilakukan baik di tingkat lokal maupun global. Transaksi terdistribusi atau global dijalankan di beberapa sistem, dan pelaksanaannya memerlukan koordinasi antara sistem manajemen transaksi global dan semua pengelola data lokal dari semua sistem yang terlibat.

Terprogram vs. Deklaratif

Spring mendukung dua jenis manajemen transaksi -

  • Manajemen transaksi terprogram - Ini berarti Anda harus mengelola transaksi dengan bantuan pemrograman. Itu memberi Anda fleksibilitas ekstrim, tetapi sulit untuk dipelihara.

  • Manajemen transaksi deklaratif - Ini berarti Anda memisahkan manajemen transaksi dari kode bisnis. Anda hanya menggunakan anotasi atau konfigurasi berbasis XML untuk mengelola transaksi.

Pengelolaan transaksi deklaratif lebih disukai daripada pengelolaan transaksi terprogram meskipun kurang fleksibel daripada pengelolaan transaksi terprogram, yang memungkinkan Anda mengontrol transaksi melalui kode Anda. Tetapi sebagai semacam masalah lintas sektor, manajemen transaksi deklaratif dapat dimodulasi dengan pendekatan AOP. Spring mendukung manajemen transaksi deklaratif melalui kerangka kerja Spring AOP.

Abstraksi Transaksi Musim Semi

Kunci abstraksi transaksi Spring ditentukan oleh antarmuka org.springframework.transaction.PlatformTransactionManager , yaitu sebagai berikut -

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

Sr Tidak Metode & Deskripsi
1

TransactionStatus getTransaction(TransactionDefinition definition)

Metode ini mengembalikan transaksi yang sedang aktif atau membuat yang baru, sesuai dengan perilaku propagasi yang ditentukan.

2

void commit(TransactionStatus status)

Metode ini melakukan transaksi tertentu, sehubungan dengan statusnya.

3

void rollback(TransactionStatus status)

Metode ini melakukan rollback dari transaksi yang diberikan.

The TransactionDefinition adalah antarmuka inti dari dukungan transaksi di musim semi dan itu didefinisikan sebagai berikut -

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

Sr Tidak Metode & Deskripsi
1

int getPropagationBehavior()

Metode ini mengembalikan perilaku propagasi. Spring menawarkan semua opsi propagasi transaksi yang familiar dari EJB CMT.

2

int getIsolationLevel()

Metode ini mengembalikan sejauh mana transaksi ini diisolasi dari pekerjaan transaksi lainnya.

3

String getName()

Metode ini mengembalikan nama transaksi ini.

4

int getTimeout()

Metode ini mengembalikan waktu dalam detik di mana transaksi harus diselesaikan.

5

boolean isReadOnly()

Metode ini mengembalikan apakah transaksi hanya-baca.

Berikut ini adalah nilai yang mungkin untuk tingkat isolasi -

Sr Tidak Isolasi & Deskripsi
1

TransactionDefinition.ISOLATION_DEFAULT

Ini adalah tingkat isolasi default.

2

TransactionDefinition.ISOLATION_READ_COMMITTED

Menunjukkan bahwa pembacaan kotor dicegah; pembacaan yang tidak berulang dan pembacaan bayangan dapat terjadi.

3

TransactionDefinition.ISOLATION_READ_UNCOMMITTED

Menunjukkan bahwa pembacaan kotor, pembacaan tidak berulang, dan pembacaan bayangan dapat terjadi.

4

TransactionDefinition.ISOLATION_REPEATABLE_READ

Menunjukkan bahwa pembacaan kotor dan pembacaan yang tidak berulang dapat dicegah; pembacaan hantu dapat terjadi.

5

TransactionDefinition.ISOLATION_SERIALIZABLE

Menunjukkan bahwa pembacaan kotor, pembacaan tidak berulang, dan pembacaan bayangan dicegah.

Berikut ini adalah nilai yang mungkin untuk jenis propagasi -

Sr.No. Propagasi & Deskripsi
1

TransactionDefinition.PROPAGATION_MANDATORY

Mendukung transaksi saat ini; melempar pengecualian jika tidak ada transaksi saat ini.

2

TransactionDefinition.PROPAGATION_NESTED

Eksekusi dalam transaksi bersarang jika ada transaksi saat ini.

3

TransactionDefinition.PROPAGATION_NEVER

Tidak mendukung transaksi saat ini; melempar pengecualian jika ada transaksi saat ini.

4

TransactionDefinition.PROPAGATION_NOT_SUPPORTED

Tidak mendukung transaksi saat ini; lebih baik selalu mengeksekusi secara nontransaksional.

5

TransactionDefinition.PROPAGATION_REQUIRED

Mendukung transaksi saat ini; membuat yang baru jika tidak ada.

6

TransactionDefinition.PROPAGATION_REQUIRES_NEW

Membuat transaksi baru, menangguhkan transaksi saat ini jika ada.

7

TransactionDefinition.PROPAGATION_SUPPORTS

Mendukung transaksi saat ini; mengeksekusi secara non-transaksional jika tidak ada.

8

TransactionDefinition.TIMEOUT_DEFAULT

Menggunakan waktu tunggu default dari sistem transaksi yang mendasarinya, atau tidak ada jika batas waktu tidak didukung.

The TransactionStatus antarmuka memberikan cara mudah untuk kode transaksional untuk eksekusi transaksi kontrol dan status transaksi query.

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

Sr.No. Metode & Deskripsi
1

boolean hasSavepoint()

Metode ini mengembalikan apakah transaksi ini secara internal membawa savepoint, yaitu telah dibuat sebagai transaksi bersarang berdasarkan savepoint.

2

boolean isCompleted()

Metode ini mengembalikan apakah transaksi ini selesai, yaitu apakah sudah dilakukan atau dibatalkan.

3

boolean isNewTransaction()

Metode ini mengembalikan nilai true jika transaksi saat ini baru.

4

boolean isRollbackOnly()

Metode ini mengembalikan apakah transaksi telah ditandai sebagai rollback-only.

5

void setRollbackOnly()

Metode ini menyetel transaksi sebagai hanya rollback.