Ana Sayfa/Teknoloji & Yazılım
Teknoloji & Yazılım·28 Ekim 2026·7 dk okuma

JDK 28 ‘Value Classes’ Uyumluluk Uyarısı (30 Çekirdek Sınıf Dönüşümü), Spring Security 7.2.0-RC1 (CSP Nonce) ve Spring AI MCP Arayüzleri

JDK 28 ‘Value Classes’ Uyumluluk Uyarısı (30 Çekirdek Sınıf Dönüşümü), Spring Security 7.2.0-RC1 (CSP Nonce) ve Spring AI MCP Arayüzleri

JDK 28 ‘Value Classes’ Uyumluluk Uyarısı (30 Çekirdek Sınıf Dönüşümü), Spring Security 7.2.0-RC1 (CSP Nonce) ve Spring AI MCP Arayüzleri

Java ekosisteminde Project Valhalla (JEP 401: Value Classes and Objects) artık teorik bir dil tasarım tartışması olmaktan çıkıp mevcut açık kaynak kütüphanelerin ikili (binary) ve çalışma zamanı uyumluluğunu doğrudan etkileyen somut bir aşamaya geçti. 27 Ekim 2026'da Inside.java üzerinde Oracle Java Developer Advocate Nicolai Parlog tarafından yayımlanan "Quality Outreach Heads-up — JDK 28: Value Classes" bildirisi, JDK 28 erken erişim derlemelerinde --enable-preview bayrağı etkinleştirildiğinde 30 standart JDK sınıfının doğrudan kimliksiz değer sınıfına (value class) dönüştüğünü duyurdu. Aynı gün Josh Long tarafından paylaşılan This Week in Spring (27 Ekim 2026) bülteninde ise Spring Security 7.2.0-RC1 (ContentSecurityPolicyNonceGeneratingFilter), Spring Data 2026.0.2 ve Spring AI MCP Apps mimarileri tanıtıldı.


1. OpenJDK Quality Outreach Uyarısı: JDK 28’de 30 Çekirdek Sınıf Neden Davranış Değiştiriyor?

Normal şartlarda yeni bir Java dil özelliği önizleme (preview) aşamasında sunulduğunda, mevcut kütüphaneler yeni sözdizimini (value class) açıkça kullanmadığı sürece eski kodların davranışı değişmez. Ancak JEP 401 bu kuralın nadir bir istisnasıdır: JDK 28'de --enable-preview bayrağı açıldığı anda, mevcut kod tabanları tek bir satır bile değiştirilmemiş olsa dahi JDK standart kütüphanesindeki 30 temel sınıf çalışma zamanında kimliksiz Value Class olarak yüklenmektedir.

1.1. Value Class’a Dönüşen Başlıca JDK Sınıfları (ve String İstisnası)

Önizleme modunda nesne kimliğini (object identity) kaybederek düzleştirilmiş bellek düzenine (flattened memory layout) geçen 30 sınıf arasında şunlar yer almaktadır:

  • 8 İlkel Sarmalayıcı Sınıfın Tamamı: java.lang.Integer, Long, Double, Float, Byte, Short, Character ve Boolean (ayrıca üst sınıf java.lang.Number).
  • Dil ve Çekirdek Soyutlamalar: java.lang.Record ve java.util.Optional (OptionalInt, OptionalLong, OptionalDouble dahil).
  • Tarih ve Zaman API'si (java.time): LocalDate, LocalTime, LocalDateTime, OffsetDateTime, ZonedDateTime, Instant, Duration, Period, Year, YearMonth vb.

Neden java.lang.String Dahil Edilmedi? OpenJDK mühendisleri String sınıfını da değer sınıfına dönüştürmeyi değerlendirmiş; ancak mevcut kurumsal ve açık kaynak Java kodlarında synchronized(someString) veya String referans kimliğine dayalı çok fazla eski (legacy) kullanım bulunması nedeniyle String sınıfını kimlikli (identity) sınıf olarak bırakmıştır.

mermaid
flowchart TD
    A["JDK 28 Erken Erişim Derlemesi\n(CI/CD Test Hattı)"] --> B{"--enable-preview\nAktif mi?"}

    B -->|"Hayır (Varsayılan Mod)"| C["Standart Kimlikli (Identity) Sınıflar\nJVM Regresyon Doğrulaması"]
    B -->|"Evet (Valhalla Önizleme Modu)"| D["30 Çekirdek JDK Sınıfı Value Class Olur\n(Integer, Long, Optional, LocalDate, Record vb.)"]

    D --> E["1. Kimlik Duyarlı İşlemler:\nsynchronized(Integer) & WeakReference -> IdentityException"]
    D --> F["2. Referans Eşitliği (==):\nBellek Adresi Yerine Alan (State) Değerlerini Karşılaştırır"]
    D --> G["3. Record Kurucuları (JEP 539):\nAlanlar super() Çağrısından Önce Başlatılır"]

    style B fill:#7c2d12,stroke:#f97316,color:#ffffff
    style C fill:#1e293b,stroke:#38bdf8,color:#ffffff
    style D fill:#064e3b,stroke:#10b981,color:#ffffff
    style E fill:#7f1d1d,stroke:#ef4444,color:#ffffff

1.2. Kütüphane Geliştiricilerinin Karşılaşacağı 3 Uyumluluk Kategorisi

Nicolai Parlog, açık kaynak (FOSS) proje yöneticilerinin CI/CD hatlarında karşılaşabileceği kırılmaları üç kategoride toplamaktadır:

  1. Kimlik Kaybından Kaynaklanan Beklenen Farklar (IdentityException ve ==): Değer sınıflarının benzersiz bir yığın (heap) adresi veya monitör kilidi yoktur. Bu nedenle synchronized (Integer.valueOf(42)) veya new WeakReference<>(Optional.of("test")) çalıştıran eski kütüphaneler çalışma zamanında IdentityException hatasıyla karşılaşacaktır. Ayrıca iki LocalDate veya Integer örneği üzerinde yapılan == karşılaştırması artık bellek adresini değil, içerdikleri alan değerlerini (state) karşılaştırmaktadır (-128..127 önbellek sınırının ötesindeki Integer.valueOf(1000) == Integer.valueOf(1000) ifadesi true döner).
  2. Record Kurucularındaki (Constructors) Yapısal Değişiklikler: java.lang.Record sınıfının değer sınıflarıyla uyumlu hale getirilmesi ve JEP 539 (Strict Field Initialization) kuralları nedeniyle, kayıt (record) kurucularında alanların super() çağrısından önce başlatılması (early initialization) davranışı devreye girmektedir; bayt kodu (bytecode) manipülasyonu yapan kütüphanelerin (ASM, ByteBuddy, Hibernate, Jackson) bu yeni kurucu dizilimini tanıması gerekir.
  3. Beklenmeyen JDK Hataları: OpenJDK Kalite Grubu, kütüphane geliştiricilerini projelerini hem önizleme kapalıyken hem de --enable-preview açıkken test etmeye ve olası JVM çökmelerini valhalla-dev listesine bildirmeye çağırmaktadır.

2. This Week in Spring (27 Ekim 2026): Spring Security 7.2.0-RC1 ve Sürüm Dalgası

Josh Long tarafından yayımlanan 27 Ekim 2026 bülteni, Spring Boot 4.x ve Jakarta EE 11 temelinde yükselen kapsamlı bir sürüm dalgasını duyurdu:

  • Spring Security 7.2.0-RC1 (ve 7.1.2 / 7.0.8): Sürümün en önemli güvenlik yeniliği, ContentSecurityPolicyNonceGeneratingFilter sınıfıyla gelen yerleşik Nonce tabanlı İçerik Güvenliği Politikası (CSP) desteğidir. XSS (Cross-Site Scripting) saldırılarını önlemek için 'unsafe-inline' kullanmak yerine, filtre her HTTP isteğinde kriptografik bir nonce değeri üretmekte ve bunu hem Content-Security-Policy başlığına hem de Thymeleaf şablonlarındaki <script> / <style> etiketlerine otomatik olarak işlemekte; ayrıca WebAuthn (Passkeys) kayıt ekranı özelleştirmelerini kolaylaştırmaktadır.
  • Spring Data, Session ve LDAP Güncellemeleri: Spring Data 2026.0.2 ve 2025.1.8 kararlı sürümleriyle birlikte Spring Session 4.2.0-RC1 ve Spring LDAP 4.2.0-RC1 / 4.1.2 / 4.0.6 yayınlandı.
  • Spring AI ile Etkileşimli MCP Uygulamaları (MCP Apps) ve Hızlı RAG: Craig Walls tarafından yayınlanan iki yeni mimari rehber; Model Context Protocol (MCP) sunucularının CopilotKit / AG-UI entegrasyonuyla yalnızca ham JSON/metin değil, doğrudan etkileşimli kullanıcı arayüzü bileşenleri (Rendering Rich UIs with MCP Apps) döndürmesini ve ONNX Transformers yerel gömülüm modelleriyle RAG boru hatlarındaki vektörleştirme gecikmesinin radikal biçimde düşürülmesini detaylandırdı.
Bileşen / Duyuru Sürüm / Hedef Temel Teknik Özellik Mimari Etki
OpenJDK Quality Outreach JDK 28 (JEP 401) --enable-preview ile 30 çekirdek JDK sınıfının (Integer, Optional, LocalDate, Record) Value Class olması synchronized / WeakReference üzerinde IdentityException ve == semantik değişimi
Spring Security 7.2.0-RC1 (7.1.2, 7.0.8) ContentSecurityPolicyNonceGeneratingFilter ve gelişmiş WebAuthn kayıt akışı 'unsafe-inline' olmadan istek bazlı kriptografik CSP koruması
Spring Data & Session Data 2026.0.2 / Session 4.2-RC1 AOT derleme iyileştirmeleri ve dağıtık oturum yönetimi güncellemeleri Spring Boot 4.1.2 ve 4.2.0-RC1 ile tam uyumluluk
Spring AI MCP & RAG Spring AI 2.1.0-RC1 Etkileşimli MCP Apps (AG-UI) ve ONNX tabanlı hızlı yerel gömülüm (embedding) Ajan araçlarının zengin UI döndürmesi ve düşük gecikmeli RAG

3. Örnek Mimari: JDK 28 Value Classes Uyumluluk Denetleyicisi ve Spring Security 7.2 CSP Nonce Yapılandırması

Aşağıdaki Java kodu, bir kurumsal uygulamanın JDK 28 --enable-preview modunda kimliksiz değer sınıflarını (Class::isValue) çalışma zamanında nasıl tespit ettiğini ve Spring Security 7.2.0-RC1 içindeki yeni ContentSecurityPolicyNonceGeneratingFilter mimarisinin nasıl kurgulandığını göstermektedir:

java
package com.tastutanlabs.jdk28.valhalla;

import java.time.LocalDate;
import java.util.List;
import java.util.Optional;
import java.util.UUID;

public class Jdk28ValhallaAndCspAudit {

    // JDK 28 --enable-preview altında 'value record' kimliksiz düzleştirilmiş bellekte yaşar
    public record CspHeaderDirective(String nonceValue, LocalDate issuedDate) {}

    /**
     * OpenJDK Quality Outreach: 30 çekirdek JDK sınıfının çalışma zamanındaki
     * kimlik (identity) durumunu ve '==' semantiğini doğrular.
     */
    public static void inspectValhallaMigration() {
        List<Class<?>> migratedCandidates = List.of(
                Integer.class,
                Optional.class,
                LocalDate.class,
                Record.class,
                String.class // String kimlikli (identity) kalmaya devam eder
        );

        for (Class<?> clazz : migratedCandidates) {
            boolean hasIdentity = clazz.isIdentity();
            System.out.printf("Sınıf: %-22s | Identity Sınıfı mı?: %b%n",
                    clazz.getSimpleName(), hasIdentity);
        }

        // --enable-preview modunda önbellek dışı Integer örneklerinde '==' değer karşılaştırır
        Integer a = Integer.valueOf(2026);
        Integer b = Integer.valueOf(2026);
        System.out.println("Integer.valueOf(2026) == Integer.valueOf(2026): " + (a == b));
    }

    /**
     * Spring Security 7.2.0-RC1 ContentSecurityPolicyNonceGeneratingFilter
     * tarafından üretilen istek bazlı CSP Nonce başlığını simüle eder.
     */
    public static String buildSpringSecurity72CspHeader() {
        String requestNonce = UUID.randomUUID().toString().replace("-", "");
        CspHeaderDirective directive = new CspHeaderDirective(requestNonce, LocalDate.now());
        return "script-src 'self' 'nonce-" + directive.nonceValue() + "'; object-src 'none';";
    }

    public static void main(String[] args) {
        inspectValhallaMigration();
        System.out.println("Üretilen CSP Başlığı: " + buildSpringSecurity72CspHeader());
    }
}

4. Sonuç: Kütüphane Ekosisteminde Valhalla Hazırlığı

OpenJDK ekibinin JDK 28 Value Classes uyarısı, Java dünyasındaki tüm açık kaynak kütüphane ve kurumsal çatı (framework) geliştiricileri için erken bir eylem çağrısıdır. Integer, Optional ve LocalDate gibi her satırda kullanılan 30 temel sınıfın kimliksiz hale gelmesi, yığın bellekte (heap) nesne başlığı (object header) yükünü ve işaretçi takibini (pointer chasing) ortadan kaldırarak devasa bir performans sıçraması vaat ederken; synchronized(wrapper) veya kimlik tabanlı WeakHashMap kullanan eski kodların şimdiden temizlenmesini zorunlu kılmaktadır. Eş zamanlı olarak Spring Security 7.2.0-RC1 ve Spring AI MCP Apps yenilikleri, bu yüksek performanslı JVM çekirdeği üzerinde güvenli ve zengin etkileşimli bulut uygulamaları geliştirme standardını bir üst seviyeye taşımaktadır.


Kaynaklar

  1. Inside.java — OpenJDK Quality Outreach Heads-up (27 Ekim 2026, Nicolai Parlog): JDK 28: Value Classes (JEP 401) — 30 Core JDK Classes Migrated Under --enable-preview and Compatibility Implications.
  2. Spring.io Official Blog (27 Ekim 2026, Josh Long): This Week in Spring — October 27th, 2026: Spring Security 7.2.0-RC1, Spring Data 2026.0.2, Spring Session 4.2.0-RC1, and Spring LDAP 4.2.0-RC1.
  3. Spring Security 7.2 Release Notes & Craig Walls Spring AI Series (Ekim 2026): ContentSecurityPolicyNonceGeneratingFilter, WebAuthn Enhancements, Rendering Rich UIs with MCP Apps, and Speeding Up RAG with Faster Embeddings.
Konu Etiketleri
#MCP#Project Valhalla#JEP 401#Spring AI#Java 28#Value Classes#Spring Security
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