Spring Modulith 2.2-RC1 ve Spring AI ‘MCP Apps’, Hibernate ORM 8.0.0.Beta4 İlişki Filtreleri ve Quarkus 4.0 ‘Almanac’ Mimarisi
Spring ekosisteminde işlem içi olay tamamlama getiren Spring Modulith 2.2-RC1 ile etkileşimli arayüz sunan Spring AI MCP Apps, Jakarta Persistence 4.0 ve hibernate-vector destekli Hibernate ORM 8.0.0.Beta4 ve Quarkus 4.0.0.Beta2 ile devreye alınan resmi Quarkus Almanac inceleniyor.

1. Spring Modulith 2.2-RC1 ve Spring AI ‘MCP Apps’: Modüler Monolitler ve Etkileşimli Ajan Arayüzleri
Spring.io üzerindeki "This Week in Spring" bülteniyle duyurulan son sürüm adayları dalgasında, kurumsal uygulama mimarisini doğrudan etkileyen iki temel yenilik öne çıktı: Spring Modulith 2.2-RC1 ve Spring AI 2.1-RC1 bünyesindeki MCP (Model Context Protocol) Apps entegrasyonu.
A. Spring Modulith 2.2-RC1: İşlem İçi Olay Tamamlama ve module :: ** Sözdizimi
Modüler monolit mimarilerinde modüller arası gevşek bağlılığı (loose coupling) sağlayan Event Publication Registry (Olay Yayın Kayıt Defteri) katmanında üç kritik mimari iyileştirme yapıldı:
- Dinleyici İşlemi İçinde Olay Tamamlama (In-Transaction Event Completion): Önceki sürümlerde
@ApplicationModuleListenertarafından işlenen bir olayın tamamlandı (COMPLETED) olarak işaretlenmesi ayrı bir işlem (transaction) veya sonradan çalışan bir güncelleme gerektirebiliyordu. Spring Modulith 2.2 ile birlikte olay tamamlama varsayılan olarak doğrudan dinleyicinin kendi veritabanı işlemi içinde yürütülerek atomik tutarlılık garanti altına alındı. FAILEDveABANDONEDOlay Durumlarının Ayrıştırılması: Yeniden deneme (retry) sürecinde hata alan olaylar (FAILED) ile maksimum deneme sınırını aşarak kalıcı olarak terk edilen (ABANDONED) yayınlar birbirinden ayrıldı; böylece operasyonel izleme ve ölü mektup (dead-letter) yönetimi netleştirildi.- Derin Paket Bağımlılık Kontrolü (
module :: **): Modüllerin yalnızca kök paketini değil, izin verilen tüm alt paket hiyerarşisini açıkça dışa açabilmesi için@ApplicationModule(allowedDependencies = "billing :: **")sözdizimi eklendi.
B. Spring AI ‘MCP Apps’ ile Sohbet İstemcilerinde Zengin HTML/JS Arayüzleri
Craig Walls tarafından detaylandırılan Rendering Rich UIs with MCP Apps yaklaşımı, Model Context Protocol sunucularının yalnızca düz metin veya JSON döndürme sınırını ortadan kaldırıyor. Spring Boot üzerinde @McpTool ve @McpResource anotasyonlarıyla tanımlanan araçlar, artık Claude Desktop veya destekleyen kurumsal AI istemcileri içinde kum havuzunda (sandboxed iframe/webview) çalışan etkileşimli HTML/JavaScript panoları, onay formları ve veri görselleştirme bileşenleri döndürebiliyor.
2. Hibernate ORM 8.0.0.Beta4: Jakarta Persistence 4.0, @SQLRestriction İlişki Filtreleri ve hibernate-vector
Java ekosisteminin en yaygın veri kalıcılık motoru olan Hibernate ORM, yeni nesil 8.0.0.Beta4 sürümünü yayımladı. Java 17, 21, 25 ve 27 çalışma zamanlarıyla tam uyumlu olan Hibernate 8.0 serisi, Jakarta EE 12, Jakarta Persistence 4.0 ve Jakarta Data 1.1 standartlarını temel alıyor.
flowchart LR
A["Spring Modulith 2.2 Modülü<br/>(@ApplicationModuleListener & module :: **)"] --> B["Hibernate ORM 8.0.0.Beta4<br/>(Jakarta Persistence 4.0 & Jakarta Data 1.1)"]
B --> C["@ManyToOne / @OneToOne Üzerinde<br/>Doğrudan @SQLRestriction & @Filter"]
B --> D["hibernate-vector Modülü<br/>(Vektör Gömme & Benzerlik Sorguları)"]
C --> E["Spring AI MCP Apps Sunucusu<br/>(@McpTool + Etkileşimli UI Kaynağı)"]
D --> E
Hibernate ORM 8.0.0.Beta4 ile gelen başlıca teknik yetenekler şunlardır:
@ManyToOneve@OneToOneİlişkilerinde Doğrudan@SQLRestrictionve@Filter: Önceki sürümlerde yalnızca varlık (entity) sınıfı veya@OneToManykoleksiyonları üzerinde tanımlanabilen@SQLRestriction(eski@Where) ve parametreli@Filteranotasyonları, artık ara birleştirme tablosu (join table) kullananlar dahil tüm@ManyToOneve@OneToOnetekil ilişkileri üzerinde doğrudan tanımlanabiliyor. Bu özellik, çok kiracılı (multi-tenant) ve yumuşak silme (deleted = false) mimarilerinde büyük kolaylık sağlıyor.- Yapay Zeka İçin
hibernate-vectorModülü: Vektör veri tiplerini (float[]gömmeleri) ve kosinüs/Öklid mesafe sorgularını doğrudan HQL/Criteria API içinde tip güvenli biçimde çalıştıranorg.hibernate.orm:hibernate-vector:8.0.0.Beta4modülü genişletildi. hibernate-enversKullanımdan Kaldırma (Deprecation) Kararı: Hibernate 8.0 itibarıyla klasikhibernate-enversmodülü kullanımdan kaldırılarak (deprecated), yeni projelerde veritabanı düzeyinde çekirdek zamansal (temporal tables) ve yerleşik denetim mekanizmalarına geçiş önerildi.
3. Quarkus 4.0.0.Beta2 ve Resmi ‘Quarkus Almanac’ Sürüm Karşılaştırma Motoru
Bulut yerel (cloud-native) Java tarafında ise Quarkus, bir yandan 3.40.1.1 LTS güvenlik yamasını (Netty, Vert.x, snappy-java ve lz4-java güncellemeleri) yayınlarken, diğer yandan Quarkus 4.0.0.Beta2 ön sürümü ve resmi Quarkus Almanac (quarkus.io/almanac) aracını devreye aldı.
Quarkus 4.0 serisi; minimum Java 21 tabanı, Netty 4.2 / Vert.x 5, Jakarta REST 4 ve Hibernate ORM 8 gibi köklü altyapı geçişleri içerdiğinden, sürüm yükseltmelerinde oluşabilecek kırıcı değişiklikleri (breaking changes) önceden tespit etmek kritik önem taşıyor. Java Version Almanac'tan esinlenen Quarkus Almanac, 0.0.1 sürümünden 4.0.0.Beta2'ye kadar herhangi iki Quarkus sürümü arasında şu dört boyutta deterministik fark (diff) analizi sunuyor:
- Yapılandırma Özellikleri (
quarkus.*): Eklenen, kaldırılan, varsayılan değeri veya yapılandırma aşaması (build-time vs. runtime) değişen tüm parametreler. - BOM Bağımlılıkları:
io.quarkus:quarkus-bomve platform BOM içindeki tüm kütüphane sürüm geçişleri. - Uzantılar (Extensions): Yeni eklenen, kullanımdan kaldırılan veya koordinatı taşınan uzantılar.
- Genel API Farkları: Quarkus JAR paketleri içinde eklenen, silinen veya başka bir modüle taşınan sınıflar (örneğin test altyapısındaki
QuarkusUnitTestpaket değişiklikleri), metotlar ve alanlar.
| Ekosistem Bileşeni | Sürüm / Araç | Temel Mimari Yenilik | Üretim ve Geçiş Etkisi |
|---|---|---|---|
| Spring Modulith | 2.2-RC1 | İşlem içi olay tamamlama, FAILED/ABANDONED ayrımı, module :: ** |
Modüler monolitlerde atomik olay durumu ve esnek alt paket sınırları |
| Spring AI | 2.1-RC1 (MCP Apps) | @McpTool ve @McpResource ile etkileşimli HTML/JS UI bileşenleri |
AI sohbet istemcileri içinde kum havuzlu (sandboxed) zengin arayüzler |
| Hibernate ORM | 8.0.0.Beta4 | Jakarta Persistence 4.0, @ManyToOne @SQLRestriction, hibernate-vector |
Tekil ilişkilerde doğrudan SQL filtresi ve yerel vektör benzerlik araması |
| Quarkus | 4.0.0.Beta2 & Almanac | Java 21, Vert.x 5, Hibernate 8 ve quarkus.io/almanac fark motoru |
Sürüm yükseltmelerinde yapılandırma ve API kırılmalarının otomatik tespiti |
Mühendislik Uygulaması: Hibernate 8 @SQLRestriction + Vektör Varlığı ve Spring Modulith / MCP Entegrasyonu
Aşağıdaki Java referans uygulaması, Hibernate ORM 8.0'ın @ManyToOne ilişkileri üzerindeki yeni @SQLRestriction yeteneğini ve @JdbcTypeCode(SqlTypes.VECTOR) desteğini, Spring Modulith 2.2 işlem içi olay dinleyicisi ve Spring AI MCP kaynak sunumuyla birleştirmektedir:
package com.tastutanlabs.catalog.internal;
import jakarta.persistence.*;
import org.hibernate.annotations.Filter;
import org.hibernate.annotations.JdbcTypeCode;
import org.hibernate.annotations.SQLRestriction;
import org.hibernate.type.SqlTypes;
import org.springframework.modulith.events.ApplicationModuleListener;
import org.springframework.stereotype.Service;
import java.util.UUID;
// 1. Hibernate ORM 8.0: @ManyToOne İlişkisinde Doğrudan @SQLRestriction ve @Filter
@Entity
@Table(name = "catalog_products")
public class CatalogProductEntity {
@Id
private UUID id;
@Column(nullable = false)
private String title;
// Hibernate 8.0 yeniliği: Tekil @ManyToOne ilişkisinde doğrudan aktif kayıt kısıtı
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "vendor_id")
@SQLRestriction("status = 'ACTIVE' AND deleted_at IS NULL")
@Filter(name = "tenantFilter", condition = "tenant_id = :tenantId")
private VendorProfileEntity activeVendor;
// hibernate-vector: Doğrudan vektör gömme (embedding) sütunu
@JdbcTypeCode(SqlTypes.VECTOR)
@Column(name = "semantic_embedding", columnDefinition = "vector(1024)")
private float[] semanticEmbedding;
protected CatalogProductEntity() {}
public UUID getId() { return id; }
public String getTitle() { return title; }
}
// 2. Spring Modulith 2.2: Olay Tamamlama Dinleyicinin Kendi İşlemi (Transaction) İçinde Yürütülür
public record ProductIndexedEvent(UUID productId, String title, float[] embedding) {}
@Service
public class CatalogModulithSyncService {
@PersistenceContext
private EntityManager entityManager;
@ApplicationModuleListener
public void onProductIndexed(ProductIndexedEvent event) {
// Spring Modulith 2.2'de bu metot tamamlandığında olay kaydı aynı yerel
// veritabanı işlemi içinde COMPLETED durumuna geçirilir; başarısızlıkta FAILED/ABANDONED ayrılır.
entityManager.createNativeQuery(
"UPDATE catalog_products SET semantic_embedding = :vec WHERE id = :id")
.setParameter("vec", event.embedding())
.setParameter("id", event.productId())
.executeUpdate();
}
}
[!TIP]
Sürüm Geçiş Stratejisi: Hibernate ORM 8.0 ve Quarkus 4.0'a hazırlanan kurumsal ekiplerin, mevcuthibernate-enversdenetim tablolarını veritabanı yerel zamansal tablolarına (SQL:2011 system-versioned temporal tables) veya olay kaynaklı (event-sourced) Spring Modulith Event Publication Registry yapısına dönüştürmesi ve Quarkus Almanac üzerindenquarkus.*özellik değişimlerini CI boru hattında doğrulaması önerilir.
Yazılım mimarisi, mikroservis ekosistemleri ve üretken yapay zeka uygulamaları üzerine çalışıyorum. TastutanLabs çatısı altında geliştirici araçları ve SaaS ürünleri inşa ediyorum.
Bu analizin 6 kartlık görsel özetini Instagram'da inceleyin ve kaydedin
Her gün yazılım mimarisi, Java/JVM ve yapay zeka gelişmelerini kendi başına okunabilen 6 slaytlık Mini-Blog serileri halinde paylaşıyoruz.
Yorumlar (0)
Düşüncelerinizi Paylaşın
Henüz yorum yapılmamış. İlk yorumu siz yapın!
Bu Kategorideki Diğer İncelemeler
OpenJDK ‘Project Detroit’ (FFM ile V8 ve CPython), Spring Boot Yerel ‘Cloud Foundry / kind’ Orkestrasyonu ve Quarkus 4.0 Mimarisi
OpenJDK'nın Foreign Function & Memory (FFM) API üzerinden Google V8 ve CPython çalışma zamanlarını doğrudan JVM sürecine gömen Project Detroit girişimi, Spring Boot uygulamalarında Docker/kind tabanlı yerel Cloud Foundry dağıtımı ve Quarkus 4.0 (Vert.x 5, HTTP/3, Hibernate 8) mimarisi inceleniyor.
JDK 28’de ‘JEP 401 Value Classes’ ve Değişmez Veri Mimarisi, Spring AI 2.1 ‘MessagePart’ Akıl Yürütme Korunumu ve Özel Vektör ‘Upsert’ API’si
OpenJDK 28 erken erişim sürümlerinde 30 çekirdek sınıfı kimliksiz değer nesnesine dönüştüren JEP 401 (Value Classes), çok turlu akıl yürütme imzalarını kayıpsız taşıyan Spring AI 2.1 MessagePart mimarisi ve önceden hesaplanmış float[] vektörleri destekleyen VectorStore.upsert() yetenekleri inceleniyor.