EJB(Enterprise Java Beans) Nedir? Nasıl Kullanılır? – 1

Merhaba arkadaşlar ;

İlk başlarda anlamakta çok sıkıntı çekiyordum ejb tam olarak ne? neden ejb? diye birşey ortaya çıkmış yada öğrenme aşamasında kullanıyorum ama ne amaçla kullanıyorum bildiğimiz java sınıfları yazıyoruz interface olarak kullanıyoruz methodları çok sistemli bir şekilde oluşturuyoruz vs. bunların hepsinede business(iş mantığı) katmanı diyoruz ..

Daha sonrasında artık iş olacak gibi değil uygulama yapıyorum ama Arkaplanda birşeyler boş kalıyor yani kendi kafamda ejb’nin tanımını yapmam lazım 🙂 1 hafta felan ejb ile alakalı dökümanlar okudum seminerler izledim vs. ve sonuç olarak bir tanımı şekillendi beynimde:
EJB, aslında bildiğimiz Java sınıflarının belli kurallara göre daha otomatik olmasından ve geniş amaçlı uygumalarda kullanılmasından başka birşey değildir. Yani belli bir amaca yönelik, belli bir işi görecek metotlardan başka birşey değildir.
Bunu daha somutlaştıracak olursak arkadaşlar bir örnekle bir arkadaşımız anlatmış:

Bir otel rezervasyon sistemini inceleyelim. Müşterilerin rezervasyonlarını iki türlü gerçekleştirdiklerini varsayalım: Internet’ten otelin web sitesinden on-line olarak, veya dogrudan otele gidip rezervasyon memuruna başvurarak. Birinci durumda otelin web sitesine giren müşteri önce sitenin rezervasyon bölümüne geçecektir. Burada müşteri boş odaları göster linkine tıkladığında otel de boş olan odaları görebilmektedir. Müşteri karşısına çıkan sayfada bir oda beğenip odanın özelliklerini göster dediğinde o odaya ait özellikler ekrana gelmektedir. Bu odayı beğenen müşteri rezervasyon yap dediğinde sistemde o oda dolu olarak işaretlenir, müşterinin kredi kartından hesap düşülür ve müşteriye otele gittiğinde odayı kiraladığına dair bir numara döndürülür. Yukarıda kalın hatla  gösterilen kısımlar küçük iş parçacıklarıdır.

boş odaları göster: Bir EJB tarafından veritabanındaki oda bilgilerinin aranıp boş olanların kullanıcıya döndürülmesi.
odanın özelliklerini göster: Bir EJB ile istenen odanın bilgilerinin döndürülmesi.
rezervasyon yap: Bir EJB ile seçilen odanın dolu olarak işaretlenmesi, bankaya bağlanıp kredi kartından ücretin düşürülmesi gibi işlemler.

Bu örnek üç-katlı (three-tier) mimariye basit bir örnek teşkil eder. Altı çizili olan işlemler uygulama katında (application tier) EJB’ler tarafından gerçekleştirilir.

Dikkat edilirse burada bir müşterinin rezervasyon memuruna dogrudan başvurarak nasıl rezervasyon yaptığını anlatmadım. Çünkü esas itibariyle yapılan işlem aynıdır. Fark sadece tarayıcı (browser) yerine başka bir arayüz kullanılmasıdır. Başka bir deyişle sadece kullanıcı arayüz katı değişmiştir. İstendiği takdirde bu sisteme kablosuz cihazlar yada Internet erişimi olan değişik cihazlar da rahatlıkla entegre edilebilir.

Aslında bu senaryoda üzerinden önemle durulması gereken bir başka konu vardır: Verilerin nesneleştirilmesi (data objectifying). Senaryoda anlatılan EJB’ler veritabanından bilgi okuyup, veritabanına bilgi yazmaktadırlar. Eğer yazılımcı isterse uygulama sunucusu bu işlemi kendi başına yapar ve uygulama geliştirici hiçbir şekilde SQL kodu yazmaz. Geliştirici sadece nesnelerle uğraşır ve nesnelerdeki değişimler otomatik olarak veritabanında güncellenir.

EJB kendi içerisinde üçe ayrılır arkadaşlar:

1 – Session Bean: Yukarıda bahsettiğim gibi iş mantığına dayalı bean türüdür.

2 – Message Driven Bean: JMS API’ nin bean ortamına dökülmüş hali diyebiliriz.

3 – Entity Bean: Bu bean türüne en iyi örnek veritabanındaki tabloların Java sınıflarına karşılık gelmesidir.(Bunun hakkında geniş bir döküman yazacağım ilerki yazılarımda)

Ayrıyeten arkadaşalar son zamanlarda bir kavram daha ortaya çıktı container 🙂 birçok ejb container’i(kabı) vardır.

Container, EJB bileşenlerini oluşturan, birbirine bağlayan ve sunan yapıdır. Farklı markaların kendilerine ait containerleri olabilir; fakat hiçbir şekilde temel belirtimler dışına çıkılamaz. Böylece yazdığımız bir EJB her yerde çalışabilir. İyi yazılmış bir EJB esnektir ve taşınabilir yapıdadır. Yani ejb tüm uygulama sunucularında çalışabilen bir bileşen modelidir.

Kullanımından biraz bahsedecek olursak aşşağıda çalıştığım projenden örnekler vereyim mesela arkadaşlar ilk olarak business katmanındaki methodlarımızı bir interface class olarak tanımlıyoruz ..

ve sonrasında arkadaşlar interface class’ımızı  Entity Managerle database işlemlerini yapacağımız classımıza implements ediyoruz  ve implements ettiğimiz bu methodların içini dolduruyoruz .

ejb1

 

ve arkadaşlar ManagedBean classımızda oluşturduğumuz interface classımızdan bir tane referans alıyoruz .

ejb2

 

Sayfamız

ejb3

Arkadaşlar burada dikkat edeceğimiz husus şudur . İmplements ettiğimiz class değilde interface classımızı referans alıyoruz ve iş katmanındaki tüm methodlara oradan ulaşıyoruz . Bize sağladığı en büyük avantaj bunun farklı farklı projelerde birtane ejb interface yazarak kullanabilmemiz ister local’de ister remote olarak kullanabiliyoruz. Ejb için şimdi bir tanım daha geldi aklıma  🙂 buna  daha çok inşaat sektöründe karşılaşıyorum . Bir mermer işi vardır bunu şirket bir ihale açarak taşeron firmalara verir ve taşeron firma belirli yerlerden , malzemeler ,çalısacak işçiler vs. bularak bunları belirler.. Burada Şirket client(Kullanıcı) oluyor , taşeron firma (EJB) oluyor ve işçilerde(method,yöntemlerimiz) oluyor.

Bir sonraki makalemde  EJB – Session Bean (Stateless-Stateful -Singleton) kullanımı? anlatacagim.
http://www.turkishh.com/programlama/ejb-session-bean-stateless-stateful-singleton-kullanimi/

Fazla uzatırsam kafanız karışacak 🙂 bu yazımda bukadar arkadaşlar .Umarım yararlı olmuştur.

İyi Çalışmalar 😉

About Mehmet KILIÇ

Bilgisayar Mühendisi