My Profile Photo

Deniz G


Bilingual Blog: Turkish and English on Software and Life.


Java Magazine February 2020 [TR]

Jakarta Neyin Nesi?

Oracle, Java EE’yi Eclipse Foundationa transfer etmeye karar veriyor. Codebase’in büyüklüğünden dolayı 3 asamaya ayırıyorlar.

  • Yalnızca son sürümlerin specification ve kodu alınıyor ve artık javax değil jakarta group-id altında build’ler yayınlıyorlar. Önceki sürümler maintain edilmiyor. Aslında jakarta sürümü ile javax son sürümü birbirinin aynısı.
  • Yeni specification process (jesp-jakarta ee specification process), yeni terimler/ürün adları tanımlanıyor. Öncesinde jcp-java community process ile, jsr-java specification requestler ile sağlanıyordu. Yeni ürünlerin ismi jakarta ile başlıyor, eski isimlerdeki api, service, architecture vs kaldırılıyor. Yeni ürünler boş specification documentler ile yayınlanıyor. Çünkü eskileri temiz hale getirmek uzun zaman alabilirdi.
  • Specification document’larin update edilmesi. Yeni sürüm Java 8’de olacak ama Java 11 üzerinde calısabilecek. (tck=technologicy compatibility kit) Bu önemli cunku Java geriye donuk uyumlulugu bozup J ava11’de Java 8 olan ozellikleri cıkarmıstı. Mesela Java 8’deki uygulamaların Java 11’de derlenebilmesi icin jaxb gerekiyor.

Son sürüm Java EE8 idi. Tüm bu aşamalar tamamnlanınca sürüm adı Jakarta EE9. Aslında ekstra özellik yok. Jakarta EE10, yeni özelliklerin ekleneceği ilk sürüm olacak.

Java 14 ile Gelen Ozellikler

Scheduled for release on March 17, 2020.

Java sürüm politikası için ek bilgi; Java 11’den itibaren 3 yılda bir major release(lts) cıkılacak. 6 ayda bir de minor releaseler. Sıradaki major release 2021, java 17 ile. son major release Java 11. Javada minor releaselerdeki feature’lar, sonraki sürümlerde feedback üzerine değiştirmek ve kaldırmak icin preview olarak tasarlanıyor. (preview featureları kullanabilmek icin compile time ve runtime’da enable edilmeli.

javac --enable-preview --release <number> x.java
java --enable-preview x.java
  • Switch expressionlar kalıcı hale geldi. Java 12’de preview olarak eklenip, 13’de preview olarak geliştirilmişti.

  • Multiline text blocks. Java13’de preview olarak geldi ve hala oyle kalacak, geliştirmeler olacak. \s single space ve \ ile her satırın sonuna new line eklenmesinin önüne geçilir.

  • Pattern matching for instanceof. Yeni preview feature. Conditional statement’ta instaceof ile işleme sokulmuş instance’ın koşulu geçerse explicit cast yapılmasının önüne geçilir. 2011’deki araştırma raporuna göre castların %24’ününün öncesinde instanceof varmış.

if (obj instanceof Group) {
  Group group = (Group) obj;
  ...

yerine

if(obj instanceof Group group) {
	... // artık işlemler group üzerinden
}
  • Records. Yeni preview feauture. public record constructorname(…params) ile hashCode, equals, toString implementaasyonu sağlanır. elle yazmaya gerek kalmaz. hali hazırda ide’lerle bu sağlanıyor, artık dilin kendi yapısıyla sağlanacak. mesela ilk başta ide tarafından otomatik get, hashCode, equals olusturuldu. sınıfa daha sonradan field eklenince buralar update edilmezse, izini nasıl süreceksin?

  • Helpful NullPointerExceptions. user.getLocation().getCity().getName() gibi yapıda null hatası çıksa, nerede çıktığını bulmak zor. 3 farklı yerde çıkabilir. Yeni JVM feeture ile daha bilgilerindirici mesaj verilecek. default’ta enabled değil, JVM flag ile kullanılmalı.

java -XX:+ShowCodeDetailsInExceptionMessages 
  • Java Flight Recorder, Java Mission Control

JFR ve JMS, JVM running applicationlar icin profiling ve monitoring technologies. JFR is event-based profiling engine for writing events in binary format. JMC is GUI tool for examining a data file created by JFR from the telemetry of single JVM.

JDK11’e kadar ücretliyken open-source’a çevrildi.

Java 14 ile yeni JFR feature ile, JFR sürekli olarak event’ların stream’ini üretir ve event’lerin hemen handle edilmesini sağlar. Eski halinde profiling datanın oldugu dosya olusturulup oradan parse ediliyordu. JFR event streaming ile, JFR event’lar meydana geldiğinde callback alınır ve hemen cevap verilir. java agent için güzel bir use-case.

JFR recordingi enable icin

-XX:StartFlightRecording:<options>

jpc-profiling configuration dosyalarıyla hangi metricler toplanacak belirlenir. ya da optionsa hangi data, ne kadar süre saklanacak ve hangi dosyada saklanacak belirlenir. Başlatırken ayarlamaya gerek yok, çalışan program üzerinden de “jcmd” ile aktive edilebilir.

Disclaimer

Yukarıdaki tüm bilgiler Java Magazin’in Şubat 2020 sayısını okurken kendime özet olması ve gelecekte hatırlamam için çıkardığım/yorumladığım ve türkçeye çevirdiğim bilgilerdir. Orjinal yazılar için adresi ziyaret edebilirsiniz.

Tüm özellikleri denedikçe ekstra bilgiler eklemeye çalışacağım.