İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır

Teknolojiler

Geldik J2EE (Java 2 Enterprise Edition) hakkında yazdığım yazı dizisinin üçüncü bölümüne. İlk bölümde klasik sistem mimarilerinin nasıl geliştiklerini ve J2EE uygulamaları alanında nasıl düzenlendiklerini gördük. Bundan önceki ikinci bölümde, J2EE uygulama sunucularını, sundukları hizmetleri ve modern yazılıma katkılarını açıklayıp, en sık kullanılanlardan olan WebLogic, WebSphere ve JBoss'a değindim. Yazı dizisinin üçüncüsünü oluşturan bu bölümde ise J2EE kapsamına giren veya J2EE uygulamaları tarafından sıkca kullanılan teknolojilere kısaca değinmek istiyorum. Sonraki bölümlerde, bu yazıda değindiğim teknolojileri tek tek ele alıp, fırsat buldukça beraber geliştireceğimiz örnekler yardımıyla daha detaylı bir şekilde inceleyeceğiz.

Geniş Kapsam

J2EE, bu yazıyı yazdığım tarih olan Ağustos 2001 itibariyle, yazılım pazarının en geniş kapsamlı, en türdeş ve en olgun platformu. Hepimizin tanıdığı Java yazılım dilini baz alarak geliştirilen ve herbiri farklı alanlardaki gereksinimlere cevap olan teknolojilerden oluşan bu platform, şirket yazılım pazarının olağanüstü desteğiyle, her geçen gün daha da güçlenerek olgunlaşıyor.

Genellikle herbiri kendi alanlarında uzmanlaşma gerektiren bu zincirleme teknolojiler hızla gelişerek yazılım mimarlarına meydan okuyorlar. Yeniliklerden haberdar olmak, uygun çalışma yöntemlerini öğrenmek ve bunları beraber uygulamaya koyabilmek işimizin irade ve sistemli çalışma gerektiren zor ama zevkli bir bölümü.

Bu teknolojileri sıralamak gerekirse, aralarında en çok kullanılarlar ve isimlerini en sık duyduklarımız:

  • Bu listeyi oluşturan teknojilerin bazıları çok geniş kapsamlı. Bu yazı dizisinin içeriğini gereğinden fazla geniş tutmamak için listenin sadece bir bölümünü aşağıda özetleme çalışacağım. Bundan sonraki yazılarımda çok daha detaylı inceleyeceğim bu teknolojilere dahil etmediğim bölümlere bu yazı dizisinden sonra sırayla yer vereceğim.
  • Servlet

    Java Servlet teknolojisi , ortaya çıktığı ilk günden beri çok ilgi gören ve yukarıdaki listede doğrudan ya da dolaylı olarak sunucu katında en çok kullanılan teknoloji.

    Eğer İnternet'in gelişmeye başladığı ilk günlerde Web uygulamaları alanında çalışıyorduysanız, mutlaka CGI Script'leri ile haşırneşir olmuşsunuzdur. Java Servlet'ler, CGI Script'lerinin doğurduğu sorunlara alternatif olarak sunuldu. Kullanıcı tarafından HTTP sunucusuna gönderilen her istem için yeni bir süreç (process) yaratmak yerine, her istemi aynı Java Sanal Makinası (JVM - Java Virtual Machine) içinde hafif bir şekilde işlemek çok daha çekici ve hızlı bir yol oldu.

    Basitce açıklamak gerekirse, Java Servlet'ler HTTP sunucularının durağan doğasını dinamik kılmak için geliştirilen sunucu ekleridir. Genel olarak, veri tabanından istem anında taze verileri çekerek kullanıcıya dinamik bir içerik sunarlar. Banka hesabınıza İnternet üzerinden bakmak ya da şirket içi kapalı devre sistemi kullanarak (İntranet) toplantı odasının belli bir saatte kullanılıp kullanılmadığına bakmak buna güzel bir örnek olur. Tabi ki bir Servlet herhangi bir Java Class'ının özelliklerine sahip olduğu için hizmetleri sadece İnternet teknolojileriyle sınırlı değildir. Normal bir Java uygulamasının görevleri Java Servlet'ler sayesinde İnternet'e uygulanabilir (elektronik ileti göndermek, veri tabanı uygulamaları ya da resim veya müzik gibi medya işlemleri, v.b. gibi).

    Servlet'ler Servlet Motoru (Servlet Engine) denen bir sunucu tarafından işlenirler. Servlet motoru, HTTP sunucusuna kendini tanıttıktan sonra, sunucuya gelen Web istemlerinden Servlet bazında olanlarını işler. İlk zamanlarda sadece ayrı ayrı pazarlanan Servlet Motorları, şimdi tüm J2EE uygulama sunucularının Web Kapları (Web Container) içinde tümleşik olarak bulunuyor.

    Yazılım pazarında en popüler olan Tomcat adındaki Sun Microsystems ve Apache Software Foundation tarafından geliştirilen açık yazılım ürünü. Kuruluşu ve kullanılışı çok kolay olan bu bedava ürünün yanısıra ticari olanların arasında benim tavsiye ettiğim ServletExec olur. ServletExec'i indirip belli bir süre için bedava olarak deneyebilirsiniz.

    Bu yazıyı yazdığım sırada Java Servlet teknolojisinin en yeni belirtim versyonu 2.3 ama uygulama sunucularının hemen hemen hepsi 2.2 belirtimini kullanıyorlar (Belirtimlere ulaşmak için Kaynaklar bölümünden yararlanabilirsiniz).

    JSP (Java Server Pages)

    Servlet teknolojisinin uygulama pazarına çıkmasından kısa bir süre sonra, yazılım mühendisleri Servlet kullanarak içerik yaratmanın pek pıratik olmadığını anladılar ve Servlet'lerin yerine kullanımı daha kolay ve daha sezgisel bir yöntem bulmaya çalıştılar. İlk olarak JWS (Java Web Server)'e özel olarak geliştirilen JSP (Java Server Pages - Java Sunucu Sayfaları) çabuk kabul görerek Servlet motorları tarafından benimsendi.

    JSP teknolojisi, özetle, HTML sayfalarına kendine özel sözdizim kuralları kullanarak Java kodu koymayı sağlıyor. Böylece Servlet'lerin içinde onlarca satır HTML kodu olacağına, sunu katının son bölümünü içinde Java dilinde yazılmış programlar olan HTML sayfaları oluşturuyor. Servlet motoru, bir JSP sayfası için ilk kez bir Web istemi geldiğinde, bu sayfayı Java kodu olarak yaratıyor ve derliyor. Derlenen kod sunucu tarafında Servlet olarak saklanıyor. Bu yüzden JSP sayfalarının ilk Web istemine cevapları daha yavaş oluyor çünkü JSP'yi Servlet'e çevirmek zaman alıyor. Servlet olarak saklanan aynı sayfa için bundan sonra gelen istemler sunucu tarafından daha çabuk cevaplanabiliyor. Webmaster'lar tarafından uygulanan bir teknik, JSP kullanan bir İnternet sitesini halka açmadan bir kez tamamen kullanmak. Bu sayede tüm JSP sayfaları sunucu tarafından Servlet olarak saklanıyor ve sitenin gelen ilk istemi anında cevaplaması sağlanıyor. Bazı J2EE uygulama sunucuları bunu otomatik olarak yapan aletler sunuyorlar.

    Daha sonra detaylı olarak da inceleyeceğimiz JSP teknolojisi birçok ileri derecede tekniği içeriyor. Bunlardan birine örnek vermek gerekirse, JSP sunu katına hiç Java kodu koymamayı sağlayan tag library'leri sayesinde dilediğiniz gibi yeni etiketler (HTML tag) yaratmanızı sağlıyor. Ama şimdilik biraz sabır! İleride bütün bunları örnekleriyle göreceğiz.

    Bu yazıyı yazdığım sırada JSP teknolojisinin en yeni belirtim versyonu 1.2 ama uygulama sunucularının hemen hemen hepsi 1.1 belirtimini kullanıyorlar (Belirtimlere ulaşmak için Kaynaklar bölümünden yararlanabilirsiniz).

    JNDI (Java Naming and Directory Interface)

    Rehberler (directories) verilerine hızlı erişim sağlayan özel bir veritabanı çeşididir. Kullandığımız veritabanlarının büyük bir bölümü (Oracle, IBM DB2, MS SQL Server vb. gibi) ilişkisel olarak düzenlenmişlerdir. Bunun yanında, rehberler verilerini hiyerarşik olarak saklarlar.

    JNDI (Java Naming And Directory Interface), LDAP (Lightweight Directory Access Protocol) veya Sun NIS (Network Information Servise) gibi farklı rehber servislerine standart erişim sağlar. JNDI, ayrıca, J2EE uygulamalarında düzenli olarak kullanıldığı gibi, Java nesnelerini eşsiz bir isim altında bilgisayar ağında herhangi bir gereksinim anında kullanılmak üzere mevcut bulundurur. Genellikle J2EE uygulamalarının kullanıcılarının isim, rol ve şifre gibi özellikleri bir rehberde saklanır. Daha sonra bu veriler, kullanıcının uygulamayı kullanırken neler yapıp neler yapamayacağına karar vermekte kullanılır. Veya, uygulamanın veritabanlarının kaynakları Java nesneleri olarak bir rehberde saklanır. Bunu çekici kılan en büyük özellik, J2EE uygulamalarının birden fazla sunucu üzerinde çalışmak üzere düzenlenmiş olmalarıdır. Ortak kullanılan kaynakları bilgisayar ağı üzerinde hızlı erişim için hazır bulundurmak en önemli gereksinimlerdendir.

    EJB hakkında daha detaylı bilgi verdiğim yazımda, veri kaynaklarının ve EJB Home Interface'lerinin nasıl JNDI sayesinde bulunduğunu hepberaber göreceğiz.

    JDBC (Java Database Connectivity)

    JDBC (Java Database Connectivity), ilişkisel veritabanlarıyla standart bir şekilde bağlantıyı sağlayarak SQL komutlarını uygulayamayı sağlayan bir Uygulama Programlama Arayüzü (API)'dür. JDBC belirtimine uygun olarak farklı veritabanları için geliştirilen sürücüler ileri derecede bir esneklik sağlarlar. Bu sürücüler sayesinde (dikkatlice) yazdığınız Java kodu farklı veritabanlarındaki aynı veri modeliyle değişiklik gerektirmeden çalışabilir. Ana kod paketi, java.sql adı altında toplanmıştır. Ama J2EE uygulamaları daha karmaşık teknikler gerektirdiği için javax.sql adındaki kod paketi de seçimlik bir kod paketi olarak eklenmişdir.

    Piyasadaki JDBC sürücüleri 4 farklı çeşittedir:

    JMS (Java Messaging Service)

    Yıllardır, şirketler, MOM (Message Oriented Middleware - Mesaja Yönelik Ortakat Yazılımları) uygulamaları kullandılar. MOM'lar farklı sistemlerin ve uygulamarın birbirleriyle eşzamansız mesajlar aracılığıyla iletişim sağlamasında kullanılır. Her mesajın bir yaratıcısı (üreticisi) ve bir veya birden fazla kullanıcısı (tüketicisi) vardır. Şimdiye kadar Mesaja Yönelik Ortakat Yazılımları (MeYOY) üretici şirketlerin kendi protokollerini, API'lerini (Uygulama Programlama Arayüzü) ve farklı yazılım dillerini kullandılar. Taki JavaSoft JSM (Java Messaging Service)'i yaratana kadar.

    J2EE'yi oluşturan birçok teknolojide olduğu gibi JMS bir üründen çok bir belirtim. JMS'i hayata geçiren, MeYOY geliştiren şirketlerin, ürünleri için JMS belirtimine uyan arayüzler geliştirmeleridir (Mesala IBM'in MQSeries ürünü için yaptığı gibi). J2EE'nin genel politikasına uygun olarak diyebiliriz ki, JMS kullanan bir uygumala geliştirirseniz, JMS'e uyan herhangi bir MeYOY kullanabilirsiniz.

    Bundan sonraki bölümlerden birinde daha detaylı şekilde ve örneklerle göreceğimiz JMS, iki değişik tip mesaj içerir. İlk tip yayınla/abone ol (publish/subscribe ya da pub/sub), ikinci tip ise noktadan noktaya (point to point) adını taşır. İlk tipde mesajı yaratan bir, mesajı dinleyen (ve kullanan) birden fazla sistem ve uygulama bölümü vardır. İkinci tipde ise mesaj sadece iki sistem/bölüm arasında iletilir.

    EJB (Enterprise JavaBeans)

    En son olarak J2EE'nin adından en çok söz ettiren teknolojisine değineceğim: EJB (Enterprise JavaBeans). Bu yazıyı yazdığım Ağustos 2001 itibariyle 1.1 numaralı belirtimini yaşayan EJB bileşenleri iş mantığı içermek amaçlı kullanılırlar (2.0 numaralı belirtimin ikinci son versyonunun taslağı şu anda genel görüşe açık durumda. Kimse bu belirtime daha fazla değişiklik yapılacağına inanmıyor ama henüz son versyon tamanen kilitlenip yayınlanmış değil). Genellikle J2EE uygulama sunucularının bir bölümü olan EJB kabı (EJB Container) içinde yaşayan EJB bileşenleri, EJB kabının birçok hizmetinden yararlanırlar. Bu hizmetler uygulama geliştirme zamanını kısalttığı gibi, ayrıca biz yazılım mühendislerinin de hayatını kolaylaştırır. Bu hizmetlere örnek vermek gerekirse: güvenlik (security), işlem bütünlüğü (transaction), uyumluluk (concurrency), ölçeklenirlik (scalability), veri sürekliliği (persistence) vb. gibi.

    Genel bir yanlış anlama bu teknolojiye verilen isimden ileri geliyor. İlk anda Enterprise JavaBeans teknolojisi ve JavaBeans teknolojisi birbirleriyle ilişkili zannediliyor. Her ne kadar isimleri ilişkili gibi görünse bile aralarındaki tek ortak nokta ikisinin de bileşen belirten teknolojiler olması. JavaBeans mimarisi yazılım alanında genel kullanım için yaratılmış bileşen mimarisidir. Enterprise JavaBeans bileşenleri ise çok özel kullanımı olan ve iş mantığı taşıyan bileşenlerdir.

    Bir EJB bileşeni özel kurallara göre düzenlenmiş Java .class dosyalarının ve bileşenin özelliklerini ve kullanım kurallarını içeren bir XML dosyasının biraraya derlenmesinden oluşur.

    1.1 versyonlu belirtime göre 2 tip EJB bileşeni vardır. Antite (Entity) Bean'leri ve Oturum (session) Bean'leri. Genel tasarıma göre Antite Bean'leri iş mantığını temsil eden bileşenler, Oturum Bean'leri ise istemciye uygulamanın hizmetlerini oluşturan işlemleri sunan bileşenlerdir. Genellikle Oturum Bean'leri işlemleri yerine getirmek için bir ya da birden fazla Antite Bean kullanırlar. 2.0 sayılı belirtim 3'üncü bir tip bileşeni içeriyor: Mesajla Yönlendirilen ya da Mesaj Bean'leri (Message-Driven Beans). Bu yeni tip yukarıda kısaca değindiğim JMS mesajlarıyla kullanılıyor.

    Kısaca...

    Bu yazımda J2EE kapsamına giren teknolojilerden en sık kullanılanlarından bazılarına değindim. Bundan sonraki bölümlerde bu teknojileri daha detaylı tanımak için örnek uygulamalar geliştireceğiz. Sizlerden ricam aklınıza takılan soruları ya da iyi/kötü herhangi bir yorumu bana iletmeniz. Düzenli olarak güncelleştirdiğim Erk@n's Technology World'un ve TurkTech tartışma grubunun iyi ve güncel kaynaklar olduğuna inanıyorum. Bu seferlik benden bu kadar. Bir sonraki bölüme kadar, hoşçakalın...

    Kaynaklar

    İçindekilerGirişİndex
    YukarıİlkÖncekiSonrakiSon
    Geriİleri
    Yazdır