JBoss Seam kitapları ….

Bir önceki yazımda JBoss Seam'in klasik Java Enterprise Development (JEE)'a kazandırdığı çeviklikten, programlama modeline, metodolojisine getirdiği devrim niteliğindeki özelliklerinden bahsetmeye çalıştım. Yeni bir teknoloji öğrenmenin en iyi yolunun o konu hakkında yazılmış kaliteli kitap(lar)ı okumak olduğunu düşünenlerdenim. Bu yazımda da Seam hakkında yazılmış kitapları ve bu kitaplar hakkındaki düşüncelerimi paylaşmaya çalışacağım.


"Seam in Action" Seam'i en kapsamlı şekilde anlatan, okunması rahat ve bol örnekleri olan bir kitap. Manning yayınevinin diğer kitapları gibi bu kitap da oldukça kaliteli ve çok iyi edit edilmiş. Bu kitabı Early Access seviyesinden beri takip ediyorum ve her sayfasından yeni bir şeyler öğrendim diyebilirim. Ayrıca referans kitabı olarak kullanılabilecek şekilde kapsamlı olduğu için başucu kitabı niteliğinde. Fakat kitap Seam'e ilk başlayanlar için biraz ağır gelebilir onun için biraz deneyim kazanıldıktan sonra okunmalı. (5/5)





Apress yayınevinden çıkan "Beginning JBoss Seam" özellikle yeni başlayanlar için çok yararlı diyebilirim. Özellikle Seam'in getirdiği yeniliklerden Bijection ve Web Conversation kavramının temellerini başarılı ve kolay anlaşılır bir şekilde anlatıyor.
(4/5)








Seam'in 1.x versiyonu sürecindeki geliştiricilerinden Michael Juntao Yuan'ın yazarlığını yaptığı "JBoss Seam: Simplicity and Power Beyond Java" bu kitap yine Seam'e yeni başlayanlar için güzel bir kaynak. Şu anda satışta olan versiyon Seam 1.x sürümünü kapsıyor fakat yakın zamanda Seam 2.x'i kapsayan yeni sürümü yayınlanacak.
(4/5)






Apress yayınevinden çıkan diğer bir kitap "Practical JBoss Seam Projects". Henüz bu kitabı okumaya zamanım olmadı fakat okuma listemde üst sıralarda. Okuyan arkadaşlar fikirlerini paylaşabilirlerse çok sevinirim.
(?/5)







Seam'in ve Hibernate'in yaratıcısı olan Gavin King'in yazarlığını yaptığı "Java Persistence with Hibernate"'in son ünitesi Seam'e ayrılmış. Seam'in ortaya çıkış sürecini ve temel özelliklerini yaratıcısının kaleminden okumak isteyenler mutlaka göz atmalılar.
(5/5)

16 Ekim 2008

Posted In: Gezegen, java, seam

Agile Enterprise Java

Enterprise Java programlama ile uğraşmanın en avantajlı yanlarından biri yüksek kaliteli açık kaynak kodlu kütüphane,framework'lerin bulunması. Eminim benim gibi bir çok kişi bu kütüphanelerden yararlanıyordur, artık Hibernate, EclipseLink, iBatis, Spring, Guice, JSF, Struts, Grails, Stripes, ZK, GWT, Wicket, Maven, JUnit vs. olmadan yazılım geliştirmeyi düşününemiyorum. Fakat alternatiflerin çokluğu bazen büyük bir dezavantaja dönüşebiliyor. Bu kütüphaneler arasından geliştirilecek projeye uygun olanları belirlemek ve belirli bir bilgi seviyesine ulaşmak çok kolay bir iş değil. Uygun teknolojileri seçsek bile birbirleriyle uyumlu halde çalıştırmak için çok sayıda konfigurasyon kodu (boilerplate code) ve dosyası yazmamız gerekiyor. Örneğin basit bir Hibernate, Spring, JSF uygulaması yazmak istediğimizde sadece bu üçlüyü bir arada çalıştırmak için yazacağımız konfigurasyon kodları azımsanmayacak derecede çok, ayrıca geliştirme esnasında tekrarlanan kodlar (i.e. faces-config.xml, application-context.xml) sıkıcı olmaya başlıyor ve asıl yoğunlaşmamız gereken programın iş mantığına yeterli zaman ayıramıyoruz.

Bu dezavantajlar son zamanların belki de en popüler konularından biri olan "Agile Software Development" ile tezat oluşturuyordu. Java topluluğunun bu soruna nasıl bir çözüm getireceğini ve Java ile program geliştirenlerin başka programlama platformalarına geçmemesini nasıl engelleyeceğini çok merak ediyordum. Ruby,Rails vb. platformlar topluluktaki ünlü Java Guru'larının bile ilgisini çekiyordu, Craig McClanahan (struts'un yaratıcısı) Java'dan soğuduğunu ve artık Ruby ile ilgileneceği söylüyordu. İşte benim fikrime göre Java bu çıkmazdan iki önemli framework ile çıkış sağladı. Birincisi Hibernate'in yaratıcısı Gavin KING'in fikirlerinden oluşturulan JBoss Seam, diğeri ise Groovy & Grails. Grails ve Groovy üzerine yazmayı sonraya erteleyerek bu yazıda Seam ve getirdiklerini başlıklar halinde kısa kısa anlatmaya çalışacağım.

Enterprise Java programlamayla uğraşan çoğu insanın EJB 2 ve Servlet zamanlarından pek güzel anıları yoktur. Çok sayıda XML konfigurasyon dosyası, EJB 2.0'ları öğrenmenin ve kullanmanın zorluğu, code-compile-deploy-test süresinin uzun ve sıkıcı olması gibi bir sürü sıkıntı. Bu sıkıntıların had safhaya vardığı süreçte ortaya çıkan Spring ve Hibernate vaad ettikleriyle ve başarılarıyla ben de dahil olmak üzere Java ile uğraşanların dikkatini çekti ve çoğu geliştirici kısa sürede Spring,Hibernate ile program geliştirmeye başladı. Spring uzun zamandan beri bilinen Dependency Injection ve Aspet Oriented Programming'e yeni bir bakış açısı getirdi ve Java topluluğunda büyük bir devrim yaptı. Öyle ki Spring ve Hibernate'in bu başarısı örnek alınarak EJB 3.0 standartı çıkartıldı ve EJB ile programlama modeli Plain Old Java Objects (POJO) seviyesine indirgenip EJB ile program geliştirme Spring,Hibernate kadar kolay hale getirildi. Spring 1.x sürümü ve Hibernate çok başarılıydı fakat EJB2.0'da olan sorun burada da vardı; XML karmaşası ve katmanları birbirine bağlamak için yazılan ektra kodlar ve konfigurasyonlar. Bu sorunlar Java 5 ile gelen annotations yardımıyla büyük bir oranda çözüme kavuştu fakat XML dosyaları ve konfigurasyon kodları hala çok fazla emek ve zaman gerektiriyordu.

Spring,Hibernate, EJB3 iş (business) ve veritabanı (database) katmanına kısmi bir çözüm getirdi fakat web arayüzündeki sorunlara uygun çözüm ise hala tam olarak bulunamadı (struts, struts2, Spring MVC, Tapestry, GWT, Grails, Wicket vs.) diyebiliriz. Bu sorunlar için son zamanlardaki en iyi çözümlerden birinin Java Server Faces (JSF) olduğunu düşünüyorum. JSF'nin sorunları ise sadece XML konfigurasyonları ile bitmiyor;
+ Yüksek öğrenme eğrisi (high learning curve)
+ Karmaşık yaşam süreci
+ Bookmark eksikliği, her türlü eylemin HTTP POST üzerinden yapılması vs....
Ama bunların yanında JSF'nin çok iyi düşünülmüş bir yaşam sürecinin olması, toplulukta standart olarak kabul edilmiş olması ve açık kaynak kodlu AJAX kütüphanelerinin olması gibi (icefaces,richfaces) büyük avantajları mevcut.(Açıkcası SEAM olmadan JSF geliştirmek çok can sıkıcı olabiliyor)

JSF for nonbelievers;
1, 2, 3, 4

Enterprise Java'daki Agile Development sorununa çare olmak, JSF ile web geliştirmenin sorunlarını gidermek, Web arayüzü ile İş/Veri katmanı arasındaki sorunları gidermek ve diğer platformlarda olan "Convention over Configuration (Configuration by Exception)" mantığını Java'ya taşımak, Java EE'yi (EJB/POJO/Spring,JSF/GWT/Wicket...,JPA/Hibernate) tek bir çatı altında birleştirmek (unification) üzere geliştirilen JBoss SEAM bence amacını hakkıyla yapıyor. Bütün özelliklerini burada uzun uzun tek bir başlık altında anlatmam imkansız, sadece maddeler halinde SEAM ile neler yapabilabileceğini anlatmaya ve daha detaylı bilgiler alabileceğiniz kaynakları vermeye çalışacağım. Fakat şundan emin olabilirsiniz ki JBoss SEAM ile uğraşmaya başladığınız andan itibaren Enterprise Java ve programlama hakkında bildiklerinizin çoğu şey değişmeye başlayacak ve hiç birşey eskisi gibi olmayacak ....

+ seam-gen; rails ve grails'de bulunan proje oluşturma, nesne ekleme vb. işler için kullanılan komut satırı tabanlı (eclipse entegrasyonu bulunuyor) ant betiği.
+ Configuration by Exception; proje oluşturduğunuz zaman yapmamız gereken konfigurasyonlar yok denecek kadar az. Sadece olağandan farklı bir davranışa ihtiyaç duyduğunuz zaman konfigurasyon yapmamız yeterli oluyor.
+ Bijection; Inversion of Control (IoC) veya Dependency Injection olarak bilinen yöntemin bir üst seviyesi veya dinamik IoC diye adlandırabiliriz. Böylece SEAM nesnelerine sadece bağlı oldukları nesneler verilmekle kalmıyor aynı zamanda SEAM nesneleriyle dinamik olarak SEAM container'ına Seam nesneleri gönderebiliyoruz.
+ Annotations desteği; bu sayede XML kullanımı minimum'a iniyor, tabii ki Seam annotations kullanmayı zorunlu kılmıyor eğer istersek annotations yardımıyla yaptığınız herşeyi XML ile yapabiliyoruz.
+ Aspect Oriented Programming desteği
+ Asenkron haberleşme için Events API'si ve Quartz desteği ("Observer Pattern" uygulayarak nesneleri birbirine daha az bağımlı (loosecoupled) hale getirebiliyoruz)
+ Servlet API'sinde bulunan application, session ve request scope'larına ek olarak Conversation, Page ve Business scopeları.
+ POJO programla modeli; EJB3 veya POJO arasındaki tercih bize kalıyor ayrıca bunlar arasında geçişler çok kolay yapılabiliyor ve EJB3'den POJO programlama modeline geçtiğimizde fonksiyonalite kaybı yaşamıyoruz.
+ Groovy desteği; Seam component'lerini groovy ile yazabiliyoruz
+ Web arayüzünde sadece JSF yerine Wicket, GWT, Tapestry veya Flex kullanabiliyoruz.
+ Rails ve Grails'de kullanılan Active Record'a benzeyen fakat biraz daha farklı olan Home Pattern yardımıyla veri tabanı objelerini yönetebiliyoruz.
+ Çok kolay bir şekilde normal HTML kodu yazarmış gibi PDF, RTF , grafik ve email gibi zengin içerikler oluşturabiliyoruz.
+ Spring ile güçlü entegrasyon; spring ile yazılmış projeler SEAM getirdiği yeniliklerden basit konfigurasyon ile yararlanmaya başlayabiliyor.
+ WebService ve RESTfull URL desteği
+ Basit veya gelişmiş güvenlik ayarları; sayfa, sınıf ve method bazında rol tabanlı güvenlik ayarlamaları yapabiliyoruz
+ jBPM ve Drools desteği
+ Javascript remoting kütüphanesi
+ Sanılanın aksine Seam ile geliştirilen programlar sadece Jboss AS'de çalışmıyor. Piyasada bulunan BEA WebLogic, IBM WebSphere, Oracle Containers for Java EE (OC4J), Apache Tomcat, ve GlassFish gibi sunucularda da sorunsuz şekilde çalışıyor.
+ extended persistence context, declerative transaction management, unified expression language, hibernate validations, page actions, page parameters, bookmarkable links .....

Bunlar Seam'in getirdiği yeniliklerden sadece birkaçı. Bence Seam uzun zamandır Java geliştiricilerinin beklediği bir kütüphane. Seam'i deneyince sizin de bana katılacağınıza ve Seam ile program yazmaktan keyif alacağınıza eminim.

Daha fazla bilgi için;

Seam dökümanları
Seamless JSF Serisi;1, 2, 3
Seam 2.0 hakkında yazılmış en yeni ve iyi kitap;



PS: Bazı teknik terimleri Türkçeye çevirmekten özellikle kaçındım çünkü Türkçe tercümelerin kavramları tam olarak anlatamadığını düşünüyorum.

7 Ekim 2008

Posted In: Gezegen, seam

Twitter Auto Publish Powered By : XYZScripts.com