OpenJDK ‘LazyConstant’ (JEP 526/531) Sabit Katlama Mimarisi, Spring AI ‘MCP Apps’ (@McpResource) Zengin Arayüzleri ve GraalVM ‘PriorityInlining’ & Netty 4.2.20 Güvenliği
Kasım 2026 Java ve Spring ekosistemi bülteninde; OpenJDK’nın JEP 526/531 ile sunduğu LazyConstant ve JIT sabit katlama (constant-folding) mimarisi, Spring AI 2.x üzerinde @McpTool ve @McpResource ile etkileşimli MCP Apps arayüzlerinin inşası, GraalVM PriorityInliningPhase çağrı çizgesi optimizasyonu ve Micronaut 5.2.5 / Netty 4.2.20.Final sürümündeki kritik CVE-2026-75595 parçalı ClientHello mTLS yamasının mühendislik detayları inceleniyor.

Kasım 2026 Java ve Spring Ekosisteminde Üç Katmanlı Mimari Dönüşüm
Modern kurumsal Java altyapıları 2026 sonbaharında eşzamanlı olarak üç kritik mühendislik ekseninde yeniden şekillenmektedir: çalışma zamanı sabit katlama (JIT constant-folding) ile ertelenmiş başlatma (lazy initialization) arasındaki tarihsel çelişkinin çözülmesi, Spring AI tabanlı ajan servislerinin salt metin akışlarından zengin grafiksel Model Context Protocol (MCP) arayüzlerine evrilmesi ve AOT/JIT derleyici optimizasyonları ile ağ katmanı kriptografik el sıkışma güvenliğinin sıkılaştırılması. Inside.java Podcast’in 73 ve 74 numaralı bölümlerinde (“Immutable Data Beyond Value Classes” ve “Ask the Architects at Devoxx”) masaya yatırılan java.lang.LazyConstant (JEP 526 / JEP 531), This Week in Spring bülteninde öne çıkan Spring AI ‘MCP Apps’ (@McpTool ve @McpResource), GraalVM PriorityInliningPhase / SubstratePriorityInliningPhase derleyici mimarisi ve Micronaut 5.2.5 / Netty 4.2.20.Final (CVE-2026-75595) güvenlik yaması, üretim ortamındaki JVM mikroservislerinin performans ve güvenlik sınırlarını yeniden tanımlamaktadır.
Bu teknik analizde; söz konusu dört temel ekosistem gelişmesinin çekirdek çalışma mekanizmaları, derleyici ve protokol düzeyindeki ödünleşimleri ve üretim kalitesindeki uygulama desenleri derinlemesine incelenmektedir.
1. OpenJDK ‘LazyConstant’ (JEP 526 / JEP 531): Ertelenmiş Başlatma ve JIT Sabit Katlama Sentezi
On yıllar boyunca Java platformunda yüksek performanslı kütüphane tasarımı, başlangıç süresi (startup latency) ile tepe çalışma zamanı performansı (peak JIT throughput) arasında zorlu bir ikilem barındırmıştır. Bir alanın final olarak tanımlanması, HotSpot C2 ve Graal JIT derleyicilerine o referansın nesne ömrü boyunca asla değişmeyeceğini garanti eder; böylece derleyici sabit katlama (constant-folding), ölü kod eleme (dead-code elimination) ve bellek engellerini kaldırma gibi agresif optimizasyonları devreye sokabilir. Ancak final alanların sınıf yükleme (<clinit>) veya nesne kurulumu (<init>) sırasında hemen (eagerly) hesaplanması zorunludur. Yüzlerce bileşenin bulunduğu kurumsal uygulamalarda bu zorunluluk, hiç kullanılmayabilecek ağır nesnelerin başlangıçta belleğe yüklenmesine ve soğuk başlangıç (cold-start) süresinin uzamasına yol açmaktadır.
Buna karşılık geleneksel ertelenmiş başlatma (örneğin volatile alanlar üzerinde çift kontrollü kilitleme — double-checked locking), başlangıç maliyetini ortadan kaldırsa da alanı değiştirilebilir (mutable) hale getirir. Alan final olmadığı için JIT derleyicisi değerin ileride değişmeyeceğine güvenemez ve sabit katlama optimizasyonlarını devre dışı bırakır.
StableValue’dan (JEP 502) LazyConstant’a (JEP 526 / JEP 531) Mimari Evrim
OpenJDK çekirdek kütüphaneler ekibinden Per-Åke Minborg, Dan Smith ve Maurizio Cimadamore tarafından yürütülen çalışma, ilk olarak JDK 25’te JEP 502: Stable Values (Preview) adıyla düşük seviyeli java.lang.StableValue API’si olarak sunulmuştur. HotSpot JVM’in dahili @jdk.internal.vm.annotation.Stable anotasyonunu güvenli bir standart kütüphane soyutlamasına taşıyan bu yapı, geliştirici geri bildirimleri doğrultusunda JEP 526 ve JEP 531 ile köklü bir tasarım sadeleştirmesinden geçerek java.lang.LazyConstant kimliğine kavuşmuştur:
- Buyrukçu (Imperative) Mutasyon Metotlarının Kaldırılması: İlk önizlemede yer alan
trySet(...),orElseSet(...),setOrThrow(...)veisInitialized()gibi hata yapmaya açık düşük seviyeli durum kontrol metotları API’den çıkarılmıştır. Bunun yerine değerin nasıl üretileceği,LazyConstant.of(Supplier<? extends T> computingFunction)fabrikası üzerinden yalnızca kurulum anında bildirimsel (declarative) olarak tanımlanmaktadır. - En Fazla Bir Kez (At-Most-Once) ve İş Parçacığı Güvenli Hesaplama: İlk
get()çağrısı gerçekleştiğinde JVM, sağlananSupplierfonksiyonunu eşzamanlılık kilitleriyle korunan atomik bir geçişle çalıştırır. Değer bir kez üretildikten sonra (nulldeğerlere izin verilmez), HotSpot JVM bu referansı dahili@Stablesemantiğiyle işaretler. Sonraki tüm okumalarda C2 ve Graal JIT derleyicileri, alanı sankistatic finalbir sabitmiş gibi doğrudan makine koduna katlar (constant-fold). - Tembel Değişmez Koleksiyonlar (
List.ofLazyveMap.ofLazy): Tekil sabitlerin ötesinde, koleksiyon düzeyinde indeks veya anahtar bazlı tembel hesaplama yeteneği doğrudanjava.util.Listvejava.util.Maparayüzlerine taşınmıştır.List.ofLazy(int size, IntFunction<? extends E> computingFunction)veMap.ofLazy(Set<? extends K> keys, Function<? super K, ? extends V> computingFunction)metotları, yalnızca erişilen indeks veya anahtar için hesaplama yapan, ancak hesaplanan her elemanı JIT düzeyinde sabit katlamaya açan değişmez (unmodifiable) koleksiyon görünümleri üretir.
Inside.java Podcast’in 73 ve 74 numaralı bölümlerinde vurgulandığı üzere; LazyConstant, JEP 492 / JEP 513 (Flexible Constructor Bodies — super(...) öncesi alan doğrulama ve başlatma) ve JEP 401 (Value Classes) ile birleştiğinde, Java’da değişmez veri modellemesini hem bellek yerleşimi hem de derleyici optimizasyonu açısından sıfır maliyetli hale getirmektedir.
2. Spring AI 2.x ‘MCP Apps’ (@McpTool ve @McpResource): Sohbet Akışında Zengin Etkileşimli Arayüzler
This Week in Spring (3 Kasım 2026) bülteninde Josh Long ve Craig Walls tarafından dikkat çekilen en önemli uygulama mimarisi deseni, Model Context Protocol (MCP) Apps yaklaşımıdır. Büyük dil modelleriyle (LLM) kurulan standart metin tabanlı sohbet arayüzleri; serbest biçimli sorgularda esneklik sağlasa da çok boyutlu veri filtreleme, coğrafi konum seçimi, zaman çizelgesi yapılandırması veya karmaşık onay formları gibi senaryolarda yüksek token tüketimine ve yavaş kullanıcı etkileşimine neden olmaktadır.
MCP Apps, bir MCP sunucusunun yalnızca ham JSON verisi döndüren araçlar (tools) sunmakla kalmayıp, aynı zamanda sohbet istemcisi (Claude Desktop, AG-UI, CopilotKit veya kurumsal iç portaller) içinde doğrudan çalıştırılan etkileşimli HTML/JavaScript/CSS arayüz bileşenleri servis etmesini sağlar.
Spring AI 2.x Üzerinde İki Bileşenli MCP App Mimarisi
Spring AI 2.x ekosisteminde bir mikroservisi zengin arayüz sunan bir MCP App sağlayıcısına dönüştürmek iki bildirimsel anotasyonun koordinasyonuna dayanır:
@McpTool(Araç ve Arayüz Meta Verisi Bağlantısı): Arka uç iş mantığını yürüten Spring bean metodunu bir MCP aracı olarak dışa açar ve döndürülen yanıtın hangi görsel kaynak (ui://...URI şeması) ile eşleşeceğini üst veri (metadata) olarak bildirir.@McpResource(İzole Arayüz Paketi Sunumu): Sohbet akışı içerisindeki güvenli çerçevede (sandboxed iframe / webview) render edilecek kendi kendine yeten (self-contained) HTML, CSS ve yerel JavaScript paketinitext/htmlMIME tipiyle sunar.
İstemci tarafında yüklenen arayüz bileşeni, ext-apps.ts veya standart MCP JSON-RPC köprüsü üzerinden ana asistan ve Spring AI sunucusu ile çift yönlü iletişim kurar. Kullanıcı grafiksel arayüzde bir parametre değiştirdiğinde veya bir eylem tetiklediğinde, istemci yeni bir doğal dil istemi (prompt) üretmek zorunda kalmadan doğrudan ilgili @McpTool uç noktasını deterministik JSON-RPC mesajıyla çağırır ve bağlamı (context) günceller.
package com.tastutanlabs.platform.mcp;
import java.lang.LazyConstant;
import java.util.Map;
import java.util.Set;
import org.springframework.ai.mcp.annotation.McpResource;
import org.springframework.ai.mcp.annotation.McpTool;
import org.springframework.ai.mcp.annotation.McpToolParam;
import org.springframework.stereotype.Service;
/**
* OpenJDK LazyConstant (JEP 526/531) ile JIT sabit katlamalı yapılandırma önbelleği
* ve Spring AI 2.x @McpTool / @McpResource tabanlı etkileşimli MCP App servisi.
*/
@Service
public class ClusterTopologyMcpAppService {
private static final Set<String> SUPPORTED_REGIONS = Set.of("eu-central-1", "us-east-1", "ap-northeast-1");
// JEP 526/531: Sadece ilk erişimde hesaplanan ve sonrasında JIT tarafından sabit katlanan (constant-folded) yapı
private final LazyConstant<TopologyRendererEngine> rendererEngine =
LazyConstant.of(() -> TopologyRendererEngine.initializeWithCompiledTemplates());
// Anahtar bazlı tembel (lazy) ve değişmez (unmodifiable) bölge topolojisi önbelleği
private final Map<String, RegionClusterSnapshot> regionalSnapshots =
Map.ofLazy(SUPPORTED_REGIONS, this::loadImmutableRegionSnapshot);
@McpTool(
name = "inspect_cluster_topology",
description = "Küme topolojisini hesaplar ve etkileşimli MCP App görsel arayüz kaynağını bağlar."
)
public TopologyToolResponse inspectCluster(
@McpToolParam(description = "Hedef bulut bölgesi kodu", required = true) String region,
@McpToolParam(description = "Maksimum replika eşiği", required = false) Integer maxReplicas) {
if (!SUPPORTED_REGIONS.contains(region)) {
throw new IllegalArgumentException("Desteklenmeyen bölge kodu: " + region);
}
RegionClusterSnapshot snapshot = regionalSnapshots.get(region);
int effectiveLimit = (maxReplicas != null && maxReplicas > 0) ? maxReplicas : 32;
return new TopologyToolResponse(
region,
snapshot.activeNodes(),
effectiveLimit,
"ui://topology-inspector/panel",
rendererEngine.get().computeChecksum(snapshot, effectiveLimit)
);
}
@McpResource(
uri = "ui://topology-inspector/panel",
name = "Küme Topolojisi Etkileşimli Kontrol Paneli",
mimeType = "text/html",
description = "Sohbet akışı içinde JSON-RPC köprüsüyle çalışan yerel HTML/JS topoloji arayüzü."
)
public String renderInteractiveTopologyPanel() {
return rendererEngine.get().renderSelfContainedHtmlBundle();
}
private RegionClusterSnapshot loadImmutableRegionSnapshot(String region) {
return new RegionClusterSnapshot(region, 18, 1.42);
}
public record RegionClusterSnapshot(String region, int activeNodes, double p99LatencyMs) {}
public record TopologyToolResponse(
String region,
int activeNodes,
int replicaLimit,
String resourceUri,
String stateChecksum
) {}
public static final class TopologyRendererEngine {
public static TopologyRendererEngine initializeWithCompiledTemplates() {
return new TopologyRendererEngine();
}
public String computeChecksum(RegionClusterSnapshot snapshot, int limit) {
return snapshot.region() + "-" + snapshot.activeNodes() + "-" + limit;
}
public String renderSelfContainedHtmlBundle() {
return "<!DOCTYPE html><html lang='tr'><body><div id='mcp-topology-root'></div></body></html>";
}
}
}
3. GraalVM ‘PriorityInliningPhase’ ve ‘SubstratePriorityInliningPhase’: Derin Çağrı Çizgesi Optimizasyonu
Method inlining (metot satır içi yerleştirme), hem JIT hem de AOT (Ahead-of-Time) derleyicilerde diğer tüm optimizasyonların (escape analysis, scalar replacement, loop vectorization) önünü açan en kritik derleyici fazıdır. GraalVM 25.3+ sürüm döngüsüyle birlikte çekirdek derleyici mimarisinde geleneksel yerel sezgisellerin (heuristics) yerini PriorityInliningPhase ve Native Image (SubstrateVM) tarafındaki karşılığı olan SubstratePriorityInliningPhase almıştır.
Öncelik Tabanlı Satır İçi Yerleştirme Nasıl Çalışır?
Klasik inlining algoritmaları, çağrı noktalarını (call sites) çoğunlukla yerel metot boyutu ve çağrılma sıklığına göre açgözlü (greedy) bir sırayla değerlendirir; bu durum derleme bütçesinin (inlining budget) erken tükenmesine ve alt dallardaki yüksek kazançlı küçük metotların kaçırılmasına yol açabilmektedir. Yeni mimari ise şu üç aşamalı disiplini uygular:
- Derin Çağrı Çizgesi Keşfi (Deep Call-Graph Inspection):
PriorityInliningPhase, bir kök metottan başlayan çağrı ağacını genişleterek alt çağrıların tamamını kapsayan küresel bir aday çizgesi oluşturur. - Maliyet-Fayda Öncelik Kuyruğu (Cost-Benefit Priority Queue): Her aday çağrı kümesi için; satır içi yerleştirme sonrasında gerçekleşecek sabit yayılımı (constant propagation), sanal çağrı çözümü (devirtualization) ve nesne tahsisi eliminasyonu (allocation removal) kazançları, üretilecek makine kodu boyutu artışına (code bloat) bölünerek dinamik bir öncelik skoru hesaplanır.
- JIT ve SubstrateVM (Native Image) Eşliği:
SubstratePriorityInliningPhasesayesinde GraalVM Native Image ile derlenen Spring Boot 4.2 ve Quarkus 4.0 ikili dosyaları (binaries), çalışma zamanı JIT derleyicisiyle birebir aynı öncelik tabanlı çağrı çizgesi kararlarından yararlanır. Geriye dönük uyumluluk veya karşılaştırmalı profilleme gereken senaryolarda bu faz-Djdk.graal.UsePriorityInlining=falsebayrağıyla devre dışı bırakılabilmektedir.
4. Micronaut 5.2.5, Netty 4.2.20.Final ve ‘CVE-2026-75595’ Parçalı ClientHello mTLS Yaması
Kasım 2026 başında yayınlanan Micronaut Framework 5.2.5, bulut yerel mikroservislerde hem başlatma sırası metrik yönetimini iyileştirmiş hem de ağ katmanını Netty 4.2.20.Final sürümüne yükselterek çoklu güvenlik zafiyetlerini kapatmıştır. Bu güncelleme paketinin en kritik parçasını, io.netty:netty-handler modülündeki SNI (Server Name Indication) yönlendirmesi ve karşılıklı TLS (mTLS) doğrulamasını etkileyen 9.1 CVSS skorlu CVE-2026-75595 zafiyetine karşı sağlanan tam koruma oluşturmaktadır.
CVE-2026-75595 Zafiyetinin Kök Neden Analizi
Modern API ağ geçitleri ve çok kiracılı (multi-tenant) mikroservisler, aynı port üzerinden farklı alan adlarına göre farklı SslContext politikaları uygulamak için Netty’nin SslClientHelloHandler (ve alt sınıfı AbstractSniHandler) bileşenini kullanır. Kök neden dört aşamalı bir zincirden kaynaklanmaktadır:
- 5 Baytlık TLS Kayıt Başlığı Ofset Hatası:
SslClientHelloHandler#decodemetodu, gelen TLSClientHelloel sıkışma paketini ayrıştırırken 5 baytlık TLS kayıt başlığını (record header) hesaba katmadan 4 baytlık el sıkışma başlığını (handshake header) yanlış tampon ofsetinden okumaya çalışır. - Parçalı (Fragmented) Kayıt Tetikleyicisi: Saldırgan,
ClientHellomesajını birden fazla TLS kaydına böler ve ilk TLS kaydının yükünü (payload) 4 bayttan küçük (örneğin 1 ila 3 bayt) olacak şekilde gönderirse, yanlış ofset hesabı tampon sınırlarını aşarakIndexOutOfBoundsExceptionfırlatır. - Açık Hata (Fail-Open) Geri Dönüşü: Netty’nin genel istisna yakalayıcısı bu ayrıştırma hatasını yakaladığında bağlantıyı sonlandırmak yerine
select(ctx, null)metodunu çağırır. - Karşılıklı TLS (mTLS) Atlama: Eğer sistemde
clientAuth=REQUIRE(zorunlu istemci sertifikası) politikası yalnızca SNI eşleşmesiyle seçilenSslContextüzerinde tanımlanmış, buna karşınhostname == nulldurumunda dönülen varsayılan (default)SslContextüzerindeclientAuth=NONEveyaOPTIONALbırakılmışsa; saldırgan parçalıClientHellopaketiyle sistemi varsayılan bağlama düşürerek istemci sertifikası sunmadan mTLS korumasını tamamen atlayabilmektedir.
Netty 4.2.17.Final ile yamalanan ve Micronaut 5.2.5’in yükselttiği Netty 4.2.20.Final sürümünde; SslClientHelloHandler tampon ofset hesabı düzeltilmiş, ayrıca netty-buffer sınır dışı okuma (out-of-bounds read) ile netty-codec-http2 ve netty-codec-mqtt modüllerindeki sınırsız bellek tüketimi (unbounded memory exhaustion) hataları giderilmiştir. Ek olarak Micronaut 5.2.5, Netty olay döngüsü (executor) ve JDBC bağlantı havuzu Micrometer metriklerinin bağlanmasını uygulama başlatma (ApplicationStartup) aşamasına erteleyerek erken DI (Dependency Injection) başlatma darboğazlarını ortadan kaldırmıştır.
package com.tastutanlabs.platform.security;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.ssl.ClientAuth;
import io.netty.handler.ssl.SniHandler;
import io.netty.handler.ssl.SslContext;
import io.netty.handler.ssl.SslContextBuilder;
import io.netty.util.AsyncMapping;
import io.netty.util.Mapping;
import io.netty.util.concurrent.Future;
import io.netty.util.concurrent.Promise;
import java.io.File;
import java.util.Map;
/**
* Netty 4.2.20.Final üzerinde CVE-2026-75595 benzeri SNI düşüşlerine (fallback) karşı
* Kapalı Hata (Fail-Closed) ve zorunlu mTLS (ClientAuth.REQUIRE) uygulayan SNI denetleyicisi.
*/
public final class FailClosedMtlsSniHandler extends SniHandler {
public FailClosedMtlsSniHandler(Map<String, SslContext> tenantContexts) {
super(new StrictTenantSniMapping(tenantContexts));
}
private static final class StrictTenantSniMapping implements AsyncMapping<String, SslContext> {
private final Map<String, SslContext> tenantContexts;
private StrictTenantSniMapping(Map<String, SslContext> tenantContexts) {
this.tenantContexts = Map.copyOf(tenantContexts);
}
@Override
public Future<SslContext> map(String hostname, Promise<SslContext> promise) {
// Fail-Closed İlkesi: SNI başlığı eksik (null) veya tanımsız ise varsayılan gevşek bağlama düşülmez.
if (hostname == null || hostname.isBlank()) {
return promise.setFailure(
new SecurityException("Reddedildi: TLS ClientHello içinde geçerli bir SNI alan adı bulunamadı."));
}
SslContext matchedContext = tenantContexts.get(hostname.toLowerCase());
if (matchedContext == null) {
return promise.setFailure(
new SecurityException("Reddedildi: Tanımsız SNI alan adı için mTLS bağlamı yok: " + hostname));
}
return promise.setSuccess(matchedContext);
}
}
public static SslContext buildStrictMtlsContext(File certChain, File privateKey, File trustCertCollection) throws Exception {
return SslContextBuilder.forServer(certChain, privateKey)
.trustManager(trustCertCollection)
.clientAuth(ClientAuth.REQUIRE)
.protocols("TLSv1.3")
.build();
}
@Override
protected void onLookupComplete(ChannelHandlerContext ctx, String hostname, Future<SslContext> future) throws Exception {
if (!future.isSuccess()) {
ctx.close();
return;
}
super.onLookupComplete(ctx, hostname, future);
}
}
5. Mimari Karşılaştırma ve Sürüm Matrisi
Kasım 2026 itibarıyla Java ve Spring ekosistemindeki bu dört çekirdek bileşenin çözdüğü mimari darboğazlar, çalışma zamanı etkileri ve yapılandırma anahtarları aşağıdaki tabloda özetlenmiştir:
| Teknoloji / Bileşen | Sürüm / Standart | Çözülen Temel Mimari Darboğaz | Çalışma Zamanı & Güvenlik Etkisi | Kritik API / Bayrak |
|---|---|---|---|---|
OpenJDK LazyConstant |
JEP 526 / JEP 531 (JDK 26/27) |
final alanların erken yükleme maliyeti ile tembel alanların JIT sabit katlama kaybı arasındaki çelişki |
Başlangıç süresini düşürürken ilk erişim sonrasında C2/Graal sabit katlama (@Stable) hızı sağlar |
LazyConstant.of(...), List.ofLazy(...), Map.ofLazy(...) |
Spring AI MCP Apps |
Spring AI 2.x / MCP JSON-RPC | Salt metin sohbet arayüzlerinin karmaşık form, harita ve tablo etkileşimlerindeki yüksek token ve gecikme maliyeti | Sohbet akışı içinde çift yönlü JSON-RPC ile çalışan zengin HTML/JS bileşenleri sunar | @McpTool, @McpResource, ui:// URI şeması |
GraalVM PriorityInlining |
GraalVM 25.3+ (JIT & Native Image) | Yerel sezgisellerin derleme bütçesini erken tüketerek derin çağrı çizgesindeki kritik optimizasyonları kaçırması | Maliyet-fayda öncelik kuyruğu ile hem JIT hem SubstrateVM AOT ikililerinde daha yüksek yürütme hızı | PriorityInliningPhase, SubstratePriorityInliningPhase, -Djdk.graal.UsePriorityInlining |
| Micronaut & Netty Güvenliği | Micronaut 5.2.5 / Netty 4.2.20.Final |
Parçalı TLS ClientHello paketleriyle SNI yönlendirmesinin kırılması ve mTLS doğrulamasının atlanması (CVE-2026-75595) |
Tampon ofset hatasını kapatır, HTTP/2 ve MQTT bellek sızıntılarını önler, metrik bağlamayı başlatma sonuna erteler | SslClientHelloHandler, ClientAuth.REQUIRE, io.netty:netty-handler:4.2.20.Final |
Sonuç ve Kurumsal Geçiş Yol Haritası
Spring Boot 3.5 destek süresinin sona ermesiyle hızlanan Spring Boot 4.2 ve JDK 27+ geçiş süreçlerinde mühendislik ekiplerinin üç somut adımı önceliklendirmesi gerekmektedir:
- Ağır Başlatılan Bileşenlerin
LazyConstantveMap.ofLazyile Modernizasyonu: Sadece belirli iş akışlarında kullanılan şablon motorları, kriptografik doğrulayıcılar ve statik arama tabloları, manuel çift kontrollü kilitleme blokları yerineLazyConstantyapısına taşınarak hem soğuk başlangıç süresi kısaltılmalı hem de JIT sabit katlama kazancı korunmalıdır. - Ajan Mikroservislerinde
@McpResourceTabanlı Etkileşimli Arayüzler: Kurumsal iç araçlarda LLM ajanlarının metin üretme yükünü azaltmak için yüksek etkileşimli iş akışları Spring AI@McpToolve@McpResourceçiftiyle modüler HTML/JS bileşenleri olarak sunulmalıdır. - Netty
4.2.20.FinalYükseltmesi ve Kapalı Hata (Fail-Closed) SNI Politikası: Ağ geçitleri ve mTLS sonlandırma katmanlarındaio.nettybağımlılıkları derhal4.2.20.Finalseviyesine çekilmeli veSniHandleryapılandırmalarındahostname == nulldurumunun asla gevşek bir varsayılanSslContext’e düşmesine izin verilmemelidir.
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
Spring Boot 4.2.0-RC2 Maven Central’da: İç İçe Jar Sınıf Arama Optimizasyonu, OpenTelemetry Anlamsal Kuralları ve LDAPS SSL Bundles
Maven Central üzerinden erişime açılan Spring Boot 4.2.0-RC2 sürümünün; çalıştırılabilir iç içe Jar (Nested Jar) doğrudan sınıf arama optimizasyonu, Paketo Ubuntu 26.04 'Resolute' Buildpacks geçişi, OpenTelemetry kararlı anlamsal kuralları ile merkezi OTLP/MDC gözlemlenebilirliği ve LDAP/LDAPS SSL Bundle dinamik sertifika yenileme mimarisinin derinlemesine teknik incelemesi.
Spring Boot 4.2.0-RC2 Mimarisi, Spring Data 2026.1 ‘RedisJsonTemplate’ & AOT Repository Motoru ve JDK 27 ‘JEP 534 / JEP 527’
Spring Boot 4.2.0-RC2 sürümündeki Redis master/replica veritabanı indeksleme, Reactor Netty X-Forwarded-Prefix, RestTemplate kullanımdan kaldırma ve AMQP 1.0 ayrımının; Spring Data 2026.1 'RedisJsonTemplate' ile AOT Repository derleyicisinin ve OpenJDK JDK 27 varsayılan 8 baytlık kompakt nesne başlıkları (JEP 534) ile kuantum sonrası hibrit TLS 1.3 (JEP 527) mimarisinin teknik analizi.
Spring Cloud 2026.0.0-RC2 ‘Paddington’ Mimarisi, OpenJDK Devoxx ‘Ask the Architects’ & JDK 27 STW GC Modernizasyonu ve Temporal ‘Agent Harness’
Spring Boot 4.2.0-RC2 tabanlı Spring Cloud 2026.0.0-RC2 (Paddington) sürümündeki Gateway Web MVC LocalResponseCache ve Config GCS yeniliklerinin, OpenJDK Devoxx 'Ask the Architects' oturumu ile JDK 27 G1/Parallel/Serial GC 'Atomic<T>' (JDK-8367013) ve JEP 401 altyapı dönüşümünün ve Temporal 'Agent Harness' dayanıklı yürütme mimarisinin teknik analizi.