Ana içeriğe dön

DT

Doğuş Teknoloji - Kurumsal Yazılım Geliştirme Prensipleri ve Desenleri (Java Tabanlı)


Kurumsal çözümlerde Java programlama dili tabanlı pratikler, tasarım kalıpları ve mimari yaklaşımların ele alındığı derstir.

Ders Hakkında

Bu derste konular tek tek değil, gerçek bir ürünün ihtiyaçları ortaya çıktıkça ele alınır. Dönemin ilerleyen zamanlarında ek bir alan üzerinde çalışılır ve bir sipariş tedarik yönetimi zinciri çözümü ele alınır. Kalıcılık ihtiyacı doğduğunda JPA'ya, dış dünyaya açılma ihtiyacı doğduğunda REST'e, tutarlılık ihtiyacı doğduğunda transaction yönetimine geçeriz.

Üzerinde en çok durulan soru "nasıl yazılır" değil, "neden böyle yazılır" olacaktır. Her konu birden fazla alternatifle ele alınır, aralarındaki maliyetler feda edilenler (trade-off) tartışılır, alınan kararlar ADR belgeleriyle kayıt altına alınır ve katman ihlalleri testlerle yakalanır.

Dönem sonunda elinizde bir ödev klasörü değil, çalışan ve savunabileceğiniz bir portföy projesi olur.

Amaçlar

Dönem sonunda neleri yapabiliyor olacaksınız?

  • Jakarta EE'nin spesifikasyon ile implementasyon ayrımını kavrayıp CDI, JPA ve JAX-RS ile uygulama sunucusundan bağımsız servisler yazmak.
  • Kalıcılık katmanını JPA ve PostgreSQL üzerine kurmak; veritabanı şemasını Flyway ile sürüm kontrollü yönetmek.
  • Transaction sınırlarını bilinçli çizmek;
  • REQUIRED ve REQUIRES_NEW arasındaki farkı gerçek bir tutarlılık gereksinimi üzerinden uygulamak.
  • Kaynak modelleme, doğrulama, hata eşleme ve doğru durum kodlarıyla bir REST API tasarlamak.
  • Uygulamayı WAR olarak paketleyip Payara Micro üzerinde çalıştırmak; bağımlı servisleri Docker ile ayağa kaldırmak.Mimari kararları ADR ile belgelemek ve bu kararları ArchUnit testleriyle denetlenebilir hale getirmek.
  • GitHub Actions ile derleme, test ve kod kalitesi hattı kurmak; issue ve pull request akışıyla ekip gibi çalışmak.
  • Hata ayıklamayı bir beceri olarak edinmek: sunucu loglarını okumak, WAR içeriğine bakmak, yığın izini yorumlamak.

Ön Koşullar

  • Temel Java: sınıf, arayüz, kalıtım, koleksiyonlar, istisna yönetimi
  • Nesne yönelimli tasarımın temel ilkeleri
  • Temel SQL: SELECT, INSERT, UPDATE ve JOIN kavramı
  • Komut satırıyla çalışabilmek
  • Git ile temel işlemler: clone, commit, branch, push

Teknoloji Sahası

Dönem boyunca kullanacağımız araçlar

Dil ve Platform Java 21 (OpenJDK) · Jakarta EE 11 Web Profile · MicroProfile 6.1
Uygulama Sunucusu Payara Micro 7 — tek JAR olarak, komut satırından deploy
Veritabanı PostgreSQL 17 — Docker konteyneri olarak
Şema Yönetimi Flyway 10 - elle yazılmış, versiyonlanmış SQL betikleri
Derleme Apache Maven 3.9 — çok modüllü yapı
Konteyner Docker ve Docker Compose
CI/CD GitHub Actions (self-hosted runner) · SonarQube
Mimari Denetim ArchUnit · ADR belgeleri (MADR formatı)
Loglama SLF4J — Payara tarafında slf4j-jdk14 köprüsü ile
Geliştirme Ortamı Apache NetBeans 30 — Eclipse ya da VS Code da kullanılabilir
API Testi Insomnia, Postman ya da curl
Depo GitHub — software-lecture-labs/farm-java-lab-northwind

Kurulum

İlk dersten önce hazır olun.

Aşağıdaki adımları sırayla tamamlayın. Her adımın sonundaki komut, o adımın gerçekten çalıştığını doğrular.

01. JDK 21 kurun. Makinenizde daha yeni bir sürüm olsa bile derleme hedefimiz Java 21'dir.

java -version

02. Apache Maven kurun.

mvn -v

03. Docker kurun ve çalıştığını doğrulayın. Veritabanı ve yardımcı servisleri konteyner olarak ayağa kaldıracağız.

docker ps

04. Payara Micro 7 JAR dosyasını indirin ve kendine ait bir klasöre koyun. Yanına derlenmiş WAR dosyalarını toplayacağınız bir wars/ alt klasörü açın.

05. Ders deposunu klonlayıp temiz bir derleme alın.

git clone https://github.com/software-lecture-labs/farm-java-lab-northwind.git

cd farm-java-lab-northwind

mvn clean package

06. Veritabanını ayağa kaldırın.

docker compose up -d postgres

07. Üretilen WAR dosyasını Payara Micro klasörünüzdeki wars/ altına kopyalayıp sunucuyu başlatın.

java -Djava.net.preferIPv4Stack=true -jar payara-micro-7.<sürüm>.jar --deploy wars/<uygulama>.war

-Djava.net.preferIPv4Stack=true parametresini atlamayın. JVM, Linux ortamlarında IPv6'yı tercih edebilir; ortam yalnızca IPv4'e göre yapılandırılmışsa uygulama portu dinleyemez ve BindException alırsınız ya da PostgreSQL bağlantısında zaman aşımı hatalarıyla uğraşırsınız.

İşleyiş

Haftalar nasıl akacak?

  • Her hafta, o haftanın konusunu baştan sona kapsayan bir başvuru dokümanı ve eşlik eden sunum paylaşılır. Dokümanlar ders dışında da tek başına okunabilecek şekilde yazılır.
  • Haftalık çalışma, numaralandırılmış görevler halinde verilir. Her görevin kabul kriteri çalıştırılabilir bir komuttur — "oldu mu" sorusunun cevabı tartışmaya açık değildir.
  • Çalışmalar GitHub üzerinden issue ve pull request akışıyla yürütülür; kod gözden geçirme sürecin parçasıdır.
  • Hatalar gizlenmez, üzerine gidilir. Ders içinde kasıtlı olarak bozulan kurgular üzerinden log okumayı ve teşhis etmeyi birlikte çalışırız.
Kaydol