IBM Bob

Java Modernizasyonu: Kurumsal Yükseltmeleri Gerçekleştirilebilir Kılmak

Kurumsal Java uygulamalarını kılavuzlu, ajantik workflow'larla takılı kalmış durumdan moderne taşı.

Java Modernizasyonu: Kurumsal Yükseltmeleri Gerçekleştirilebilir Kılmak

Yazarlar

Jay TalekarBrian Taylor

Yayınlandı

Kategori

announcement

Paylaş

Java Modernizasyonu: Kurumsal Yükseltmeleri Gerçekleştirilebilir Kılmak

Herhangi bir büyük kuruma gir — bir banka, havayolu, telekom — ve Java genellikle ağır işi yapıyordur. Çekirdek bankacılık sistemleri, dolandırıcılık tespiti pipeline'ları, sipariş yönetimi, gün doğmadan önce milyonlarca işlemi mutabık kılan gece batch job'ları. Çalışıyor, ölçekleniyor — ve tam bu yüzden o sistemlerin büyük bölümü Java 8 veya daha eskisinde çalışmaya devam ediyor.

Çalışmak ile sağlıklı olmak aynı şey değil. Framework'ler artık güvenlik yaması almayan sürümlerde takılı kalmış durumda. Orijinal geliştiriciler çoktan ayrılmış. "Dokunma, çalışıyor" mimari bir ilkeye dönüşmüş. Ve uçurum büyümeye devam ediyor: records, sealed classes, pattern matching, virtual threads, G1/ZGC collector'lar, daha iyi container farkındalığı ve daha hızlı başlatma — bunların hepsi kimsenin planlamak istemediği bir yükseltmenin öte yanında bekliyor.

Bu yazı o uçurumu kapatmakla ilgili. Java uygulamalarının neden takılı kaldığını açıklıyor, ardından Premium Package for Java'nın beş özelliğini — JDK sürüm yükseltmeleri, Liberty re-platforming, UI modernizasyonu, birim test üretimi ve güvenlik düzeltmesi — ve her birinin çalışmayı deterministik otomasyon ile AI arasında nasıl böldüğünü ele alıyor. En fazlasını almanı sağlamak için repozitorinin nelere ihtiyacı olduğunu, erişimi nasıl alabileceğini ve nasıl başlayacağını anlatarak bitiyor.

Neden Bu Kadar Çok Java Uygulaması On Yıl Geride Takılı Kalmış

Modernizasyon bu kadar açıkça değerli ise, neden bu kadar çok kurumsal Java uygulaması hâlâ 2014'te donmuş görünüyor? Nedenler yapısal: organizasyonel atalet ve gerçek mühendislik riski.

  • Tasarlanmış değil, organik büyüme. Bu sistemler özellik özellik, satın alma satın alma büyüdü. Kod katmanları daha eski katmanların üstüne yığıldı, her biri farklı son tarihler ve kurallar altında yazıldı. Bugün miras aldığın şey jeolojik tortuya benziyor: bir on yılda düzinelerce ekip tarafından verilen kararların birikimi.
  • Temel modülleri yazan mühendisler ayrıldı, örtük bilgi de onlarla birlikte gitti. Geriye seyrek belgeleme ve "o modülün nasıl çalıştığını bir şekilde hatırlayan" birkaç kıdemli mühendis kalıyor.
  • Java yükseltmek bağımlılık denetimleri, framework yükseltmeleri (Spring, Hibernate, Jakarta EE namespace göçleri), kullanımdan kalkmış API'lerin kaldırılması ve her ortamda yeniden doğrulama anlamına geliyor — aylarca süren çaba, gerçek bütçe ve gerçek fırsat maliyeti. Sistem zaten çalışırken haklı çıkarmak zor.
  • Java 8 → 17 veya 21 gibi bir sıçrama bile modül sistemi çatışmalarını, kaldırılmış iç API'leri (sun.misc.Unsafe), sert hatalara dönüşen reflection uyarılarını ve garbage collector davranışında ince değişiklikleri ortaya çıkarabilir. Kağıt üzerindeki sürüm değişikliği pratikte haftalık bir soruşturmaya dönüşebiliyor.
  • Regresyon döngüleri uzun. Geniş test paketleri — birim, entegrasyon, performans, UAT, bazen manuel onaylar — tek bir yükseltmenin çıkmadan önce haftalarca test tetikleyebileceği anlamına geliyor.
  • Tüm bunların altında: çalışanı bozma korkusu. Bir uygulama günde milyonlarca liralık işlem yapıyorsa, kötü bir deploy'un maliyeti yükseltmeme maliyetini çok aşıyor — bu yüzden yükseltme konuşması bir sonraki çeyreğe kayıyor. Ve ondan sonraki çeyreğe de.

Çıkış yolu yeniden yazma değil, artımlı. Doğru araçlarla teknik borcu her birinin güvenle çıkartılabildiği küçük adımlarla ödeyebilirsin.

Premium Package for Java

Premium Package for Java, kurumsal Java modernizasyonu için beş workflow'dan oluşan bir pakettir. Her biri aynı işbölümü üzerine kurulu: deterministik otomasyonun öngörülebilir, mekanik işi yapmasına izin ver, AI'ın ise tariflerin kodlayamadığı bağlamsal kararları ele almasına bırak.

OpenRewrite gibi kural tabanlı motorlar, binlerce dosya üzerinde mekanik refactoring için güvenilirdir. AI dağınık kısımlarda daha iyi — build hatalarını yorumlamak, iş mantığı üzerine akıl yürütmek, trade-off'lar arasında seçim yapmak. Bob ikisini de sonuçlu adımları bir insanın onayladığı adım adım bir workflow'da orkestre eder.

Arkasındaki uzmanlık burada önem taşıyor. Workflow'lar JIT derleyiciler inşa eden, WebSphere ve Open Liberty'yi çıkaran, Quarkus'u öncülüğüne yardım eden ve OpenJDK, Jakarta EE ve MicroProfile'a katkıda bulunan IBM ve Red Hat mühendislerince şekillendirilmiştir. Araçlar bu ekiplerin bir göçe nasıl yaklaştığını kodluyor — bir modelin önündeki koddan yeniden inşa edemeyeceği bilgi.

Beş özellik genelinde bölünmenin nasıl gerçekleştiği şöyle:

Özellik 1: JDK Sürüm Yükseltmeleri — Java 8'den 11, 17, 21 veya 25'e

JDK'yı yükseltmek en yaygın modernizasyon görevidir ve en çok küçümsenen görevdir. Bob bunu tek bir komut olarak değil, çok aşamalı, kanıta dayalı bir yolculuk olarak ele alır.

  • Önce proje zekâsı. Bob derleme aracını (Maven veya Gradle), modül topolojisini, mevcut Java sürümünü ve framework ayak izini analiz eder, ardından uygulanabilir yükseltme yolları önerir (8→17, 8→21, Jakarta EE ile veya olmadan), her biri bir zorluk derecesi ve beklenen teknik zorluklarla açıklanmış.
  • Seçilen hedef için, düzenlenmiş OpenRewrite tarifleri mekanik dönüşümleri güvenli ve ölçekli şekilde halleder.
  • Tarifler yolu bir parça kat ediyor; pratikte %40–50. Gerisi — egzotik bağımlılık çatışmaları, kaldırılmış iç API'ler, kütüphaneye özgü kırılmalar — agentik döngünün devreye girdiği yerdir. Bob projeyi derler, Maven/Gradle build loglarını parse eder, istisnaları kök nedene göre gruplar ve modül modül hedeflenmiş düzeltmeler için AI'a sorar.
  • Niyeti gözeten korkuluklar. AI'a javax ve jakarta namespace'leri arasında sessizce geçiş yapmama, "derlenmesi için" kodu yorum satırına alma ya da dosyaları taşıma, herhangi bir paket veya bağımlılık değişikliğinden önce açık onay isteme talimatı verilir.

Otomatikleştirilebildiği yerde hızlı, edilemediği yerde dikkatli bir yükseltme elde edersin — sonunda eksiksiz bir audit trail ile.

Özellik 2: Liberty Re-platforming — Geleneksel WebSphere'den Liberty'ye

Geleneksel WebSphere Application Server'dan WebSphere Liberty veya Open Liberty'ye geçiş daha düşük bellek ayak izi, container dostu paketleme, daha hızlı başlatma ve modern Jakarta EE desteği sağlar. Aynı zamanda elle denemeye en girift göçlerden biridir.

  • AMA güdümlü değerlendirme. Bob IBM'in Application Modernization Accelerator çıktısını alır, raporlarını kural tabanlı düzeltme rehberliğiyle belirli, dosya düzeyindeki göç sorunlarına parse eder.
  • Her AMA kuralı açıklayıcı rehberlik taşır — "com.ibm.websphere.*'yi Jakarta EE standart eşdeğeriyle değiştir", "ibm-web-ext.xml yapılandırmasını server.xml'e taşı". Bob bu sorunları, kök nedene göre gruplandırılmış olarak, kuralın yardım metniyle birlikte AI'a iletir; böylece model tahmin etmek yerine bilinen düzeltmeyi uygular.
  • Göç bir Jakarta sıçraması içeriyorsa, aynı OpenRewrite tarif kütüphanesi namespace mekaniklerini deterministik olarak halleder.
  • Build, deploy, doğrula. Bob WAR/EAR'ı oluşturur, liberty-maven-plugin veya liberty-gradle-plugin aracılığıyla deploy eder, başlatma ve sınıf yükleme hataları için sunucu loglarını takip eder ve bunları iteratif olarak çözer. REST endpoint'lerine karşı curl ile işlevsel doğrulama standart flow'un bir parçasıdır.

Workflow, Liberty mühendislerinin göçe nasıl yaklaştığını kodluyor — bunu genel bir prompt'a bırakmak yerine.

Özellik 3: UI Modernizasyonu — JSP/Struts'tan Modern SPA'ya

Çoğu eski Java uygulaması UI'larını hâlâ JSP, Struts veya servlet'ler aracılığıyla yönetiyor. Bob bunu beş aşamalı bir pipeline'a böler.

  • Mimari çıkarım. Herhangi bir kod yeniden yazılmadan önce Bob uygulamayı analiz eder ve her controller, action, servlet, sayfa, form, doğrulama kuralı ve veri akış yolunu kataloglayan bir architecture.md üretir. Bu belge göçün geri kalanı için gerçeğin kaynağıdır.
  • Eski sunum katmanı (Struts action'ları, servlet'ler, JSP controller'ları) — veritabanı bütünlüğünü korumak için orijinal DAO'lar ve model sınıfları dokunulmadan bırakılarak — modern bir backend üzerindeki REST endpoint'lerine dönüştürülür: Spring Boot, Quarkus veya Liberty.
  • Frontend scaffolding. Yeni bir TypeScript projesi (Angular, React veya başka bir framework), özellik çalışması başlamadan önce HTTP istemci, theming, routing, durum yönetimi, error boundary'ler ve CORS kurulmuş şekilde seçilen bir tasarım sistemine — Carbon, Material UI veya shadcn/ui — bağlanır.
  • JSP formları ve tabloları, orijinal iş kuralları taşınarak tasarım sistemi eşdeğerleriyle — DataTable, Card, DatePicker, doğrulanmış formlar — eşleştirilir.
  • Her adımda doğrulama kapıları. Bob uygulamayı hiçbir zaman kendisi başlatmaz. Her aşamadan sonra, geliştiriciyi build/start komutunu çalıştırıp onaylaması için davet eder; doğrulamayı insan ellerinde tutar.

AI, JSP tag çorbasından modern bileşenlere bağlamsal çeviriyi halleder; otomasyon scaffolding, bağımlılıklar ve build doğrulamasını halleder.

Özellik 4: Birim Testleri — Önce Strateji, Sonra Üretim

Test kapsamı genellikle modernizasyonun en büyük tek engeli: güvenle doğrulayamadığını güvenle yükseltemezsin. Bob test üretmeden önce test stratejisi üretir.

  • Strateji üretimi. Bob projeyi analiz eder ve mimariyi, kapsam gerektiren modülleri, önerilen framework'leri (JUnit 5, Mockito, AssertJ), adlandırma kurallarını, kapsam eşiklerini ve kapsamlı ve kapsamsız test çalıştırma komutlarını içeren bir UNITTEST.md üretir.
  • Aday seçimi birden fazla ayrıntı düzeyinde çalışır — tüm paketler, belirli sınıflar, tek tek metotlar — ve son zamanlarda değiştirilen koda odaklanmak için git diff üzerinde çalışabilir.
  • Üret, çalıştır, düzelt. Her test prompt'u aynı talimatla biter: testleri çalıştır, hataları düzelt. AI çalıştırır, hataları gözlemler ve kod üretiminde durmak yerine paket yeşil olana kadar tekrar eder.
  • Bob JaCoCo ile entegre olur; böylece döngü yalnızca yeşil test çalışması değil, ölçülmüş kapsamı hedefler.

Otomasyon testleri çalıştırır; AI onları yazar ve hatalar üzerine akıl yürütür. Elde edilen kapsam diğer dört workflow'u açan şeydir.

Özellik 5: Güvenlik Düzeltmesi — Aynı Döngünün Bir Parçası Olarak CVE'ler

CVE yüklü bağımlılıklar sunmaya devam eden modernize edilmiş bir uygulama yalnızca yarı bitmiş. Güvenlik düzeltmesi JDK yükseltmesiyle aynı mimariyi, güvenlik açıklarına yönelterek yeniden kullanır.

  • Build güdümlü tespit. Bob yükseltme workflow'undan Maven ve Gradle log analizörlerini yeniden kullanır; build çıktısından, dependency-check eklentilerinden ve SBOM araçlarından bağımlılık uyarılarını, kullanımdan kaldırma uyarılarını ve bilinen açık geçişli bağımlılıkları yüzeye çıkarmak üzere ayarlanmıştır.
  • Bir düzeltme temiz bir sürüm değişikliği olmadığında — örneğin yamalı kütüphane imzaları değiştirdi ve call site'larının göç etmesi gerekiyor — agentik döngü kırılmaları kök nedene göre gruplar, modüller genelinde düzeltmeyi uygular ve doğrulamak için yeniden oluşturur.
  • Aynı korkuluklar geçerli. Açık onay olmadan bağımlılık değişikliği yok, yorum satırına alınmış kod yok, namespace sürprizi yok. Düzeltmeler uygulanmadan önce sunulur, açıklanır ve onaylanır.

Güvenlik sertleştirme ayrı bir roadmap olarak değil, modernizasyon çalışmasının geri kalanıyla aynı kanalda ilerler.

Ortak İplik

Beş özelliğin tamamında aynı iş bölümü geçerli:

AşamaSahip
Proje analizi ve meta veri çıkarımıOtomasyon
Mekanik, iyi bilinen dönüşümlerOpenRewrite tarifleri
Build, log parse etme, hata gruplamaOtomasyon
Bağlamsal kararlar, hata düzeltme, kod çevirisiAI
Onay kapıları, doğrulama, deployHuman-in-the-loop
Denetim izi (Mermaid diyagramları, görev özetleri, maliyet takibi)Otomasyon

Otomasyon deterministik olanı halleder, AI bağlamsal olanı halleder ve bir insan sonuçlu olanı onaylar — altta platformu inşa eden IBM ve Red Hat mühendislerinin desteğiyle.

Repozitoini Hazırla

Bu workflow'lar zaten okunabilir bir codebase üzerinde daha ileriye gider — ve Bob'a yardımcı olan şeyler, kodu miras alan herhangi bir mühendise yardımcı olanlarla aynıdır:

  • Yeşil, makul ölçüde hızlı bir build. Buradaki her döngü derleme ve test çıktısına demirlenmiş. mvn/gradle build'in ne kadar hızlı ve güvenilir olduğu, üret-çalıştır-düzelt döngüsünü o kadar sıkı kılar.
  • Mevcut testler, kısmi olsa bile. Kapsam hem yükseltmeler için bir güvenlik ağı hem de Bob'un okuduğu bir sinyaldir. Az ise, sürüm sıçraması denemeden önce Özellik 4 ile başla.
  • Sabitlenmiş, bildirilmiş bağımlılık ağacı. pom.xml/build.gradle'da net sürümler ve güncel bağımlılık kilidi, temiz bir tarif çalışması ile günler süren çatışma avcılığı arasındaki farkı yaratır.
  • Bob'un sürebileceği build araçları. Liberty ve güvenlik workflow'ları standart eklentilere dayanır (liberty-maven-plugin, dependency-check, SBOM araçları); bunları kurmuş olmak otomasyon yarısının işini yapabilmesini sağlar.

Erişim Nasıl Alınır

Premium Package for Java, ayrı bir indirme değil, Bob temel planına bir add-on'dur.

Yetkinin nasıl alınacağı planına bağlı:

  • Bireysel planlar (Pro, Pro+, Ultra). bob.ibm.com'daki fiyatlandırma sayfasına git, bir plan seç ve ödeme sırasında Java add-on'unu ekle. Siparişi tamamladıktan ve Bob IDE'yi yükledikten sonra, giriş yapıldığında yetki algılanır. Koltukları ve add-on'ları bob.ibm.com'daki aboneliğinden yönetirsin.
  • Kurumsal planlar. Bob yöneticin, temel plan koltukları ve Java add-on'unu Bob Admin UI'dan atar. Sana bir koltuk atandığında aynı otomatik algılama geçerli olur — giriş yap ve workflow'lar görünür.

Açıkça belirtmeye değer iki şey:

  • Ödeme sırasında Java add-on'unu seçmen gerekiyor. Varsayılan olarak temel planın bir parçası değil. Satın alım sırasında atlarsan, ücretli planda bile workflow'lar görünmez.
  • Deneme planları add-on kullanamaz. Premium Package for Java, ücretli Pro, Pro+, Ultra veya kurumsal plan gerektirir.

Başla

Planın add-on'u içerdiğinde ve Bob IDE'ye giriş yaptığında:

  • Hedefe bağlanmadan önce önerilen yolları ve zorluk derecelerini görmek için önce tek bir modülde JDK yükseltme değerlendirmesini çalıştır.
  • Kapsam inceyse, herhangi bir sürüm sıçramasından önce bir UNITTEST.md stratejisi oluştur ve bir güvenlik ağı kur.
  • Değişiklikleri modül modül onayla — korkuluklar namespace ve bağımlılık değişikliklerini senin elinde tutmak için orada.

Takımların bu göçleri başından sonuna nasıl yürüttüğünü bob.ibm.com'daki vaka çalışmalarında incele.