Spring framework ile Checked ve Runtime Exceptionlar üzerinde transaction yönetimi.

Java Spring framework uygulamalarında, “Transactional”(org.springframework.transaction.annotation.Transactional) anotasyonu ile bir database işlemini (örneğin, bir veri ekleme işlemi) bir transaction içinde gerçekleştirebilirsiniz. Bu anotasyonun bir parametresi olarak “rollbackfor” değeri verilebilir ve bu değer ile hangi exceptionlar için bir geri alma (rollback) yapılacağı belirtilebilir.


Yazıya başlamadan önce exceptionları ve bunların temel özelliklerini açıklayalım.

Java dilinde, bir “exception” (istisna) bir olası çalışma zamanı hatasıdır. Örneğin, bir dosya okuma işlemi sırasında dosyanın mevcut olmaması gibi. Bu tür hataları işleyebilmek için Java’da “Exception” sınıfı ve bu sınıftan türetilen birçok alt sınıf vardır.

Java dilinde “checked exception” ve “runtime exception” şeklinde iki tür exception vardır: Checked exceptionlar, “Exception” sınıfının türetilmiş sınıflarıdır ve genellikle geliştirici tarafından öngörülebilir ve yönetilebilir hatalardır. Örneğin, bir dosya okuma işleminde dosyanın mevcut olmaması, uygulama özelinde isteklere karşılık vermesi için hazırlanan business exceptionlar geliştirici tarafından hazırlananıp, özel bir şekilde işlenebilir.

Runtime exceptionlar ise “RuntimeException” sınıfı ve bu sınıftan türetilen sınıflardır. Bu tür exceptionlar genellikle geliştirici tarafından öngörülemeyen ve yönetilemeyen hatalardır. Örneğin, bir değişkenin null olduğu zaman bu değişkene ulaşmaya çalışılması gibi. Bu tür exceptionlar genellikle geliştirici tarafından özel bir şekilde işlenmez, ancak JVM tarafından otomatik olarak yakalanır ve işlenir.

Eğer “Transactional” anotasyonu kullanırken “rollbackfor” değeri verilmezse, varsayılan olarak sadece runtime exceptionlar için geri alma (rollback) yapılır. Bu, Spring tarafından varsayılan olarak ayarlanmış bir davranıştır ve bu davranışı değiştirebilmek için “rollbackfor” değerini vermeniz gerekir.

Örneğin, aşağıdaki gibi bir metod oluşturalım.

Bu metod içinde bir runtime exception oluştuğunda (örneğin, bir değişkenin null olduğu zaman bu değişkene ulaşmaya çalışılması durumunda alınan NullPointException gibi) bir geri alma (rollback) yapılır. Ancak bir checked exception oluştuğunda (örneğin, bir dosya okuma işleminde dosyanın mevcut olmaması, ya da uygulama içinde custom olarak checked exception olarak oluşturulmuş exceptionlar.) geri alma yapılmaz.

Eğer checked exceptionlar için de geri alma (rollback) yapmak istiyorsak, “rollbackfor” değerini vermeniz gerekir.

Bu örnekte, “addData” metodu içinde herhangi bir exception oluştuğunda bir geri alma (rollback) yapılır.

Eğer sadece belirli bir tür exception için geri alma yapmak istiyorsanız, o exception sınıfını “rollbackfor” değerine vermeniz gerekir. Örneğin;

Bu örnekte, sadece “FileNotFoundException” türünde exceptionlar için geri alma yapılır.

Farklı exceptionları da yakalamak için aşağıdaki örnekteki gibi çoklu parametre verilebilir.

Bu örnekte “FileNotFoundException” ve “ApplicationBusinessException” türündeki exceptionlar için geri alma işlemi yapılır.

Bir sonraki yazıda görüşmek üzere.


Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir