Ana Sayfa/Java & Kurumsal Mimari
Java & Kurumsal Mimari·1 Kasım 2026·6 dk okuma

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.

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

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 @ApplicationModuleListener tarafı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ı.
  • FAILED ve ABANDONED Olay 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.

mermaid
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:

  1. @ManyToOne ve @OneToOne İlişkilerinde Doğrudan @SQLRestriction ve @Filter: Önceki sürümlerde yalnızca varlık (entity) sınıfı veya @OneToMany koleksiyonları üzerinde tanımlanabilen @SQLRestriction (eski @Where) ve parametreli @Filter anotasyonları, artık ara birleştirme tablosu (join table) kullananlar dahil tüm @ManyToOne ve @OneToOne tekil 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.
  2. Yapay Zeka İçin hibernate-vector Modü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ıran org.hibernate.orm:hibernate-vector:8.0.0.Beta4 modülü genişletildi.
  3. hibernate-envers Kullanımdan Kaldırma (Deprecation) Kararı: Hibernate 8.0 itibarıyla klasik hibernate-envers modü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-bom ve 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 QuarkusUnitTest paket 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:

java
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, mevcut hibernate-envers denetim 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 üzerinden quarkus.* özellik değişimlerini CI boru hattında doğrulaması önerilir.

Konu Etiketleri
#Java#Spring AI#Spring Modulith 2.2#MCP Apps#Hibernate ORM 8.0#Jakarta Persistence 4.0#Quarkus 4.0#Quarkus Almanac
Emre Taştutan
Emre TaştutanGeliştirici & AI Meraklısı

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.

@tastutanlabs • Instagram Mini-Blog

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.

Instagram'da Takip Et →
Bu Yazıyı Paylaş:

Yorumlar (0)

Düşüncelerinizi Paylaşın

Henüz yorum yapılmamış. İlk yorumu siz yapın!

Bu Kategorideki Diğer İncelemeler

Java & Kurumsal Mimari

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.

Emre TaştutanEmre Taştutan
9 dk
Java & Kurumsal Mimari

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.

Emre TaştutanEmre Taştutan
10 dk