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.