Merhabalar arkadaşlar, Sitemizi programlama ile ilgilenen bütün arkadaşlarımızın türkçe içerik konusunda çektiği sıkıntılar düşünülerek soru/cevap şeklinde bir etkileşimde bulunabilmesi için kurduk. Umuyoruz hepimiz için güzel bir deneyim olur. Hasscript Ekibi

0
Spring framework kullanılan uygulamada exception alındığında Mongodb transactionlarını geri alabilmek mümkün müdür?

Açık 1 Cevaplar 50 Gösterim Java
Server side uygulamama yapılmış bir web servis isteği sırasında herhangi bir durum için hata alınması durumunda(RuntimeException) bir document üzerinde yaptığım crud operasyonları için rollback yapamıyorum. Esasen burada yapılmak istenen @Transactional anotasyonunun fonksiyonelitesini sağlayabilmek. @Transactional RDBMS(relational database management system) için geçerli fakat ben relational olmayan bir yapı (mongodb) için de transaction bütünlüğü kurmak istiyorum. Böyle bir yapı spring-data içerisinde mevcut mu ? Değilse mevcut bir yapı bulunuyor mu ? Bulunmuyorsa nasıl bir yol izlemem gerekiyor  (manuel olarak)?

Teşekkürler.

1 cevap

0
Bildiğim kadarıyla built-in ve native olarak mongo transaction desteklemiyor.

Onun yerine plug-in olarak mongo'ya birşeyler ekleyebiliyorsunuz. Zamanında grafiklerini görmüştüm. Biraz performans sorunu açıyordu. Bu yüksek erişim sayılarında tabiki. Onun haricinde hiçbirşey bulamazsan kendi transaction handling mekanizmanı geliştirmen gerekebilir. Bu işlem için;

transaction scope belirlemen lazım. Yani ne zaman başlayacak ne zaman bitecek. Default olarak spring'in verdiği scope'lardan biriyle bağdaştırabilirsin. Ya da kendine bir myTransactionBegin - end metodları yazabilirsin. Bunun haricinde rollback to save point istiyor musun? İstiyorsan biraz daha detaylandırman gerekir.

Basit bir hata durumunda eskiye dön şeklinde kod bloğu istiyorsan; işlemleri yapmadan önce document bilgini myTransactions diye bir collection içine atabilir, hata alırsan oradan geri getirebilirsin. Yanlış hatırlamıyorsam mongo'da geçici kayıtlarda oluşturabiliyordun. Index bazlı idi sanıyorum. O şekilde de bir index/zaman verirsin, daha sonradan kendi kendini de temizlemiş olur. Ayrıca onun için uğraşmazsın.
(4k puan)