Welcome

Spring Uygulamalarında Kafka ile Transaction Yönetimi

Kafka’nın transaction kabiliyeti read-process-write örüntüsüne sahip senaryolar için gayet uygundur. Spring Boot ve Spring Kafka ile çalışırken Kafka’nın transaction kabiliyetini devreye almak için aşağıdaki property tanımını yapmak yeterlidir. transaction-id-prefix tanımı sayesinde Spring Boot Kafka AutoConfiguration’ı bir KafkaTransactionManager bean’i tanımlamaktadır. transaction-id-prefix tanımının yanı sıra Kafka transaction’ları ile çalışırken aşağıdaki property tanımlarını yapmak da önem arz etmektedir. […]

Spring Uygulamalarında Redis ile Transaction Yönetimi

Spring Data Redis projesinin “Redis Repositories” özelliği sayesinde domain nesnelerinin herhangi bir extra efor harcamadan “Redis” veritabanında saklanması mümkündür. Redis Repositories’in custom mapping ve secondary index desteği de söz konusudur. Ancak “Redis Transaction”ları ile çalışmaz. Eğer Redis’in transaction kabiliyetini kullanmak ve Redis veritabanı üzerinde gerçekleştirdiğiniz işlemlerin Spring’in transaction senkronizasyonu ile yönetilmesini istiyorsanız ya doğrudan “RedisTemplate”‘i […]

Kotlin’de Singleton Nasıl Implement Edilir?

Java programlama dilinde “static” keyword ile statik sınıflar , statik metotlar ve statik değişkenler tanımlarız. Java’da statik olarak tanımlanmış metot ve değişkenlere de, herhangi bir nesneye ihtiyaç duymadan, sınıf düzeyinde erişebiliriz. Uygulama genelinde bir sınıftan tek bir nesne ile çalışılmasını garanti eden Singleton örüntüsünü de yine bu statik metot ve değişkenler yardımı ile implement ederiz. […]

Spring Controller’ların Entegrasyon ve Birim Testleri Nasıl Yapılır?

Spring Application Framework ile çalışırken uygulamaya ait sınıflarımızı yazmanın yanı sıra, ApplicationContext olarak tabir edilen Spring Container konfigürasyonunu gerçekleştirdikten sonra, entegrasyon testlerimizde genel olarak iki veya daha fazla katmanı bir arada testlere tabi tutarız. Örneğin Service ve Repository katmanlarını ApplicationContext’i yaratarak ayağa kaldırır ve servis metot çağrıları sonucu iş mantığının düzgün biçimde implement edilip edilmediğini, […]

Kurumsal Java Dünyası ve Container Kavramı

Kurumsal Java dünyasının “Container” kavramı ile ilk tanışması sanırım Java Servlet teknolojisi ve Apache Tomcat ile olmuştur. O günden bu güne kadar da hayatımıza JSP Container’dan EJB Container’a, JSF Container’dan Spring Container’a pek çok “Container” girmiştir. Peki “Container” ne demektir ve bütün bu Container’lar ne iş yaparlar? Aralarındaki benzerlikler ve farklar nelerdir? “Container”, belirli bir […]

Spring Boot Test Ortamı ve Redis

Spring ekosisteminde çalışırken en çok hoşuma giden özelliklerden birisi de entegrasyon testlerini çalıştırırken veri erişim işlemleri ile ilgili işlemleri hafızada çalışan gömülü bir veritabanı (H2 veya Derby) ile kolayca gerçekleştirebilmemizdir. Böylece testleri herhangi bir ortamda – ortamda daha önceden herhangi bir setup yapaya gerek kalmaksızın – rahatlıkla koşturabiliriz. Bu kabiliyet Kafka, Redis gibi NoSQL çözümler […]

Kotlin ve Mockito (2)

Kotlin ve Mockito yazı dizimizin ilkinde Kotlin içerisinde Mockito ile mock nesneler oluştururken veya nesnelerimizi spy yaparken Kotlin sınıflarımızın open olması gerektiğinden bahsetmiştik. Kotlinde Mockito kütüphanesi ile çalışırken karşılaşacağımız en temel sorunlardan bir diğeri ise Mockito.any() veya ArgumentCaptor.capture() gibi metotların NULL döndürmesidir. Eğer mock nesnemizde input argüman olarak NULL olmayan bir değer bekleyen herhangi bir […]

Kotlin Exception’ları ve Spring Transaction Yönetimi

Bilindiği üzere Java programalama dilinde exception’lar checked ve unchecked şeklinde ikiye ayrılır ve geliştirme sürecinde genellikle unchecked exception’larla çalışma tercih edilir. Kotlin’in Java programlama pratiği üzerine koyduğu iyileştirmelerden birisi de bütün exception’ları unchecked olarak ele almasıdır. Kotlin ile çalışırken exception’ları ister Kotlin’in Exception sınıfından, istersek de RuntimeException sınıfından türetelim bu exception’ları fırlattığımız yerde ne metot […]

Kotlin ve Hibernate Getter Level Access

JPA/Hibernate ile çalışırken PersistenceContext’in entity nesnelerin state’ine doğrudan field düzeyinde mi, yoksa getter metot ile mi erişeceğini @Id anotasyonunu nerede kullandığımız belirlemektedir. Eğer @Id anotasyonunu field üzerinde kullanırsak, JPA/Hibernate field level access stratejisini kullanacaktır, yani entity state’lerine erişmek ve veritabanından okuduğu değerleri entity nesnenin içerisine aktarmak için getter/setter metotlarını kullanmayıp, doğrudan Reflection API ile nesnenin […]

Kotlin ve NPE (2)

Bir önceki yazımızda başladığımız Kotlin’de NPE konusunu incelemeye devam ediyoruz. Peki önceki yazımızda bahsettiğimiz durumların dışında başka hangi durumlarda NPE hatası ile karşılaşırız? NPE hatası alabileceğimiz durumlardan birisi de inheritance’ın kullanıldığı bir senaryodur. Kotlin’de nesneler yaratılırken, değişkenler sınıf hiyerarşisine göre initialize edilir. Hiyerarşide her bir sınıfa karşılık gelen nesne alanları construct edilirken, bu işlem üst […]