J2EE İmparatorluğu - Teknolojiler

 

Bu yazının diğer bölümleri aşağıda sıralanmıştır ulaşmak için tıklayınız.


J2EE İmparatorluğu - Sistem Mimarileri

J2EE İmparatorluğu - Uygulama Sunucuları - 1,

J2EE İmparatorluğu - Uygulama Sunucuları - 2,


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ıkça 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ılanlar ve isimlerini en sık duyduklarımız:

  • Servlets
  • JSP
  • JavaBeans
  • Java Applet
  • XML
  • XHTML
  • JDBC
  • RMI
  • EJB
  • JNDI
  • JMS
  • JTA ve JTS
  • JavaMail

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 özetlemeye ç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 Internet'in gelişmeye başladığı ilk günlerde Web uygulamaları alanında çalışıyorduysanız, mutlaka CGI Script'leri ile haşır neş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.

Basitçe 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 Internet üzerinden bakmak ya da şirket içi kapalı devre sistemi kullanarak (intranet) 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 Internet teknolojileriyle sınırlı değildir. Normal bir Java uygulamasının görevleri Java Servlet'ler sayesinde Internet'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 versiyonu 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 pratik 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 Internet 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 versiyonu 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 Service) 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 hep beraber 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ştir.

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

1. Tip - JDBC-ODBC köprüsü: Windows platformunda çok popüler olan ve Microsoft tarafından geliştirilmiş olan ODBC (Open Database Connectivity) standart SQL işlemleri için kullanılan bir API'dır. ODBC daha sonra Visigenic ve Intersol tarafından Windows dışındaki bazı platformlara da taşınmıştır. Bu tip sürücüler, gelen JDBC istemlerini ODBC komutlarına çevirirler ve geri gelen cevapları tekrar JDBC ve Java nesnelerine çevirerek istemciye sunarlar. Bu tip sürücüler, istemci ve veritabanı arasında kullanılan arayüz sayısının fazla olması nedeniyle, ticari projelerin çoğunun gerektirdiği performansı sunamazlar. JDK (Java Development Kit) com.sun.odbc.JdbcOdbcDriver adı altında bu tip bir sürücü içerir.

2. Tip - Java ve Platforma bağlı teknoloji karışımı: Bu tip sürücüler bir kısım Java ve diğer bir kısım veritabanına ve platforma özel teknolojiler kullanırlar. Aradaki arayüzlerin sayısının azalması performansı arttırıp bu tipi daha çekici hale getirmesine rağmen, 1. tip sürücülerde olduğu gibi bu tip sürücülerde de her istemciye platforma bağlı parça için bir kuruluş yapmak gerekir.

3. Tip - Arakat Veritabanı Erişim Sunucusu:  En esnek mimariye sahip olan 3. tip JDBC sürücüleri, ortakat (middleware) yazılımlarından destek alırlar. Bu tip sürücüler birden fazla istemciyi birden fazla veritabanı sunucusuna bağlayabilirler. Genellikle, J2EE uygulama sunucuları, popüler veritabanı için özel, yüksek performanslı sürücüleri bulundururlar.

4. Tip - Saf Java JDBC sürücüsü: 2. Tip sürücülere alternatif olarak geliştirilmişlerdir. En büyük avantajları 100% Java yazılımları olup, istemci katında fazladan bir kuruluş yapmayı gerektirmemeleridir. Bu tür sürücüler, doğrudan veritabanına açılan Socketler aracılığıyla, veritabanına özel protokolleri kullanarak veri iletişimi sağlarlar. Oracle'ın Thin JDBC Driver bu tipe örnek olarak gösterilebilir.

JavaMail

JavaMail, Internet'in en popüler kullanımı olan elektronik ileti alışverişini Java aracılığı ile programlamayı sağlar. Kullanımı ne kadar yaygın ve kolay da olsa, eloktronik ileti konusunda Internet üzerinde kullanılan birden fazla protokol ve teknoloji var. JavaMail, bu teknolojilerden bağımsız olarak hazırlanmış bir süper-kat arayüzü. Daha doğrusu, JavaMail, değişik protokollere aynı şekilde erişimi sağlayan bir kontrat, kurallar topluluğu.

Buna kontrat dememdeki en önemli sebep JavaMail'in tek başına hiçbir somut eylem gerçekleştirememesi. Yazılımcılar tarafından kullanılabilir durumda olan programlar, farklı şirketlerin kendi ürünleriyle beraber sundukları JavaMail uygulamaları. Bu uygulamalar, JavaMail belirtimine uygun olarak geliştirildikleri için, yazdığınız program hiçbir değişiklik gerektirmeden farklı protokollerle çalışabilir.

JavaSoft'un Internet sitesinden yükleyebileceğiniz JavaMail'in referans uygulaması aşağıda sıraladığım protokoller ve belirtimler için tedarikçi yazılımlar bulunduruyorlar:

  • SMTP (Simple Mail Trasfer Protocol)
  • IMAP (Internet Message Access Protocol)
  • MIME (Multipurpose Internet Mail Extensions)
  • POP3 (Post Office Protocol 3)

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 uygulamaları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. Ta ki 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 versiyonunun 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 versiyon 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), eş zamanlılık (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 versiyonlu belirtime göre 2 tip EJB bileşeni vardır. Entity Bean'leri ve Oturum (session) Bean'leri. Genel tasarıma göre Entity 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 Entity 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

 

Yağız Erkan

J2EE İmparatorluğu - Sistem Mimarileri, 15/5/2001

J2EE İmparatorluğu - Uygulama Sunucuları - 1, 27/6/2001

J2EE İmparatorluğu - Uygulama Sunucuları - 2, 11/7/2001

Yazıyla ilgili görüş ve yorumlarınızı yagiz_erkan@yahoo.com ve yorum@teknoTurk.org adreslerine yollayabilirsiniz.