Öncelikle EJB kavramını sormak istiyorum, bugün herhangi bir framework(jsf,spring,seam) ile bir web uygulaması geliştirirken EJB işin içersinde rol oynuyor mu? Eğer oyleyse hangi görevleri üstlenir bünyesinde neler vardır? internetteki tanımlarına göre kavramsal olarak sanırım yukarda belirttiğim frameworklere bir alternatif sayılabilir, ancak 3.0 dan itibaren diger frameworkler kadar etkili olduğunu düşünüyorum.

Bunun dısında birde stateless ve stateful bean kavramları neyi ifade ediyor? (EJB de session bean dısında kapsamlar da var mıdır?)

soruldu: 05 Mar '12, 05:52

trueLife's gravatar image

trueLife
699182430
cevap kabul oranı: 10%

değiştirildi: 30 May '12, 13:03

rahmanyazgan's gravatar image

rahmanyazgan ♦
4.4k83559


EJB 3.1(Enterprise Java Beans) kisaca aciklarsak:

EJBs server tarafinda butun is mantiklarini(business logic) calistiran java component'leridir. Dependency Injection, Transaction, Messaging, Scheduling, Remote Access, Web Service End Points vb. gibi islemlerde kullanilir.

EJB yi anlamak icin http request ve response mantigini, web server'larin gelen cagrilara nasil cevap verdigini bilmeniz gerekir. Kisaca siz bir adres yazinca firefox da, browser bu adresin bulundugu server a cagriyi yonlendirir ve ordaki web server / application server cagriya cevap verir, ve sonucu browser a yollar, ve web server normalde bu islemi yaptiktan sonra gelen client cagrisini unutur. Iste server da yapilan islemleri unutmamak, nerde kaldigini bilmek ve onemli islemlerde yapilacak kontroller icin(ve bircok is mantiklari icin) server tarafindaki durumu kontrol etmek icin EJBs kullanilir javada.

Stateless Session Beans: Durumsuz bean'lerdir, islem yaptiktan sonra unutulurlar.

Stateful Session Beans: Durumlu bean'lerdir, java app calistigi surece, belirli bir timeout, islemsizlik gibi durumlar olusana kadar server tarafinda tutulurlar.

Singleton Session Beans: Singleton pattern'e gore bir kez olusturulup kullanilan bean'lerdir.

EJBs artik versiyon 3.1 (Java EE 6) daha da kolaylatirilmis ve Annotations (@Stateful, @Singleton gibi isaretlemeler) ile web.xml de ayarlari yapmadan kullanilabilir olmustur.

Framework'lerin EJB'ye yaklasimi cok farkli olmustur. JBoss Seam EJB 3.0 ile birlikte kullaniliyordu, ama JBoss Seam EJB 3.0 da cozulmesi zor olan seylere kendi Annotation'lari ile cozumler uretti. (Dependency Injection gibi) Daha sonra bazi JBoss Seam pratik uygulamalari Java EE 6 icine alindi (Bakiniz DI ve CDI)

Spring EJB olmadan daha hafif kendi DI(Dependency Injection) cozumu ile ve bircok pratik implementationlari ile ozellike Java EE 6 oncesi donemde cok populer olmustur.

GWT(Google Web Toolkit) ise server tarafi secimlerini programciya birakmis, yine de kolaylik olmasi icin programcilara client ve server tarafinda DI cozumleri sunmustur.(Bakiniz Gin / Guice). Teorik olarak GWT yi Spring, JBoss Seam veya baska uyumlu bir framework ile kullanabiliyorsunuz.

EJBs 3.1 (Java EE 6) <> Spring: Artik bircok community isteklerinden, pratik cozumlerden ders alinarak bircok cozumler Java EE 6 icine alinmistir. Ozellikle DI(Dependency Injection), CDI(Context and Dependency Injection) ve diger API'lerdeki yenilikler vs. java EE 6 ile direk kodlanabilmektedir. Java EE 6 oncesi framework'ler cagi diye anilirken Java EE 6 ile daha cok plugin'ler cagi denilmektedir.(Buyuk ve kompleks framework'ler yerine ise yarayacak kucuk moduller kullanildigi icin.)

Detayli bilgiler icin Beginning JavaTM EE 6 Platform with GlassFish faydali olabilir.

permanent link

cevaplandı: 05 Mar '12, 08:20

CemIkta's gravatar image

CemIkta ♦
19.9k29125190
cevap kabul oranı: 36%

1

Detaylı ve temiz anlatım için teşekkürler. Referans verip, paylaşmamda sakınca yoktur umarım.

(25 Nis '12, 16:45) Turgay Can Turgay%20Can's gravatar image
2

Istediginiz gibi paylasabilirsiniz, zaten btsoru.com bunun icin var :)

(25 Nis '12, 16:50) CemIkta ♦ CemIkta's gravatar image

Merhabalar. Elimdeki örnek bir projede bir EJB sınıfını Singleton,Stateless,Stateful notasyonlarını tek tek denedim ve 3 tarayıcıda aynı sayfayı açtıım. Stateful için her tarayıcı farklı sonuç vermekte. Singleton ve Stateless için 3 tarayıcı da ayı şeyi göstermekte. Burdaki Stateful,Singleton,Stateless kavramları benim aklıma tam olarak oturmuyor, bazı yerler eksik kalıyor. Mesela Singleton için tek bir instance'ı olduğu herkesin aynı Session Bean'a eriştiğini biliyorum. Fakat Singleton ile Stateless arasındaki farkı anlayamıyorum. Bazı kaynaklar Stateless Bean'lerin kullanım sonrası bir bean havuzuna yolladığını ve gerektiğinde burdan alınıp kullanıldığını söylüyor bazı kaynaklar ise tamamen silindiğini. Diğer yandan Stateful Session Bean'leri de tam olarak kavrayabilmiş değilim. Kullanıcı bilgileri odaklı Session Bean'lerde kullanılmasını gerektiğini anladım ama tam olarak ne işe yaradığını anlayamadım. Şimdi sorum bu 3 notasyon arasındaki fark tam olarak nedir? Nerde ne zaman hangisini kullanmak gerekir? Anlayamadığım noktaları ve sorularımı cevaplandırırsanız çok memnun olurum :)

(20 Ağu '15, 17:58) ilkay ilkay's gravatar image

http://docs.oracle.com/javaee/6/tutorial/doc/gipjg.html#gipmt

oldukça basitçe ne zaman kullanılmalı sorusuna cevap mevcut.

(20 Ağu '15, 18:36) Turgay Can Turgay%20Can's gravatar image

Stateful Beans: Session'da o kullaniciya ozel tutulur, timeout veya logout islemlerinden sonra Session kapanir ve bu Stateful Beans erisilemezler! Bu Session'lar kullanici ve internet tarayici bazli calisir. Web uygulamalari her internet tarayicida farkli Session'lar tutar. O yuzden her tarayicida farkli sonuc alirsiniz! (Daha net anlamak icin Chrome ile GoogleMail web login yapin, Firefox ile yeniden GoogleMail'i acin, login sayfasi gelecektir, bu bir Session acma isleminin kullanici ve tarayici bazli calistigini gosterir.)

(21 Ağu '15, 08:17) CemIkta ♦ CemIkta's gravatar image

Singleton: Bir web uygulamasinda sadece ve sadece bir tane (single instance) olusturulur. Singleton bu durumda her Session'a özel degil, web uygulamasina özeldir, web uygulamasi start olur olmaz Singleton Beans her Session'dan veya tarayicidan erisilirler. Sonuc hep ayni olur. Ornek olarak bir Singleton Bean olusturup #getVersion metodu ile Web App Versionu dönderin. Farkli tarayici, farkli kullanici ve degisik tarihlerde bile webb uygulamasi acik oldugu surece sonuc aynidir. Singleton genelde Web uygulamasi start olurken veya kapatilacagi zaman islemler yapilacagi zaman cok kullanislidir.

(21 Ağu '15, 08:19) CemIkta ♦ CemIkta's gravatar image

Stateless Beans: Kendi Scope'unda islemler yapar ve atilir. Stateless Beans de o Session ve kullaniciya baglidir aslinda. Örnegin Request Scope kullandiniz, o Request sonlaninca ilgili Bean deactive olur ve sonrasinda Garbage Collection tarafindan Memory'den silinir. Her Session ve kullanicida farkli sonuc gorursunuz local veya online testlerde!

Stateless Beans ne zaman atiliyor, ne zaman birden cok Instance olusturulup ne zaman kullanicilara veriliyor, ne zaman hangi Instance hangi Session'a ataniyor bilmeniz cok zor, bu tur seyleri her Application/Web Server farkli mantikla yapiyor!

(21 Ağu '15, 08:26) CemIkta ♦ CemIkta's gravatar image
1

@CemIkta öncelikle verdiğiniz bilgilerden ötürü çok teşekkür ederim. Singleton sadece için bir nesne oluşturulduğu ve uygulamanın yaşam döngüsü boyunca saklandığını, Stateful için her istekte ayrı bir bean oluşturulup işlem bitince silindiğini anlayabildim. Yalnız bir noktayı anlamadım. Benim EJB sınıfım Stateless iken ve farklı tarayıcılardan sayfayı açtığımda farklı şeyler görmem gerekirken neden Singleton gibi aynı şeyler görünüyor?

(21 Ağu '15, 13:57) ilkay ilkay's gravatar image

Stateless Beans metodu ayri ayri Session'larda bile ayni sonucu donderir. Ornegin bir #getMusteriList metodu yazdiysaniz bu her Session ve kullaniciya ayni musteri listesini donderir! Eger Session'a özel farkli sonuc donduren metod yazarsaniz her Session'a ozel sonuc donderir. Ornegin Stateless Bean metodu #getLoggedUser ile login olmus kullaniciyi donderiyorsa bu login olmus kullaniciya gore degisecektir.

Kodlarinizi gormeden cevap vermek zor. Yeni bir soru ile kod paylasarak soru sorarsaniz daha kolay olur.

(21 Ağu '15, 19:56) CemIkta ♦ CemIkta's gravatar image

Merhabalar. Dediğinizi koda döktüm ve iki faklı kullanıcı için Stateless bean içinde yazılmış bilgi çeken metot yazdım daha iyi oturması için. Peki biz Stateless ve Statefull Session Bean için aradaki tek farkın birisinin kullanıcıya özel olup kullanılıp yok edildiği diğerinin bir havuzdan alınıp kullanılıp tekrar havuza gönderilmesi diyebilir miyiz? Açıkçası bir Stateful Session Bean instance'ına da de oturum kapatıldıktan sonra erişilemeyecekse Stateless Session Bean ile arasındaki başka bir fark göremiyorum. Konuyu uzattığım için de özür dilerim ama anlayabilceğim daha iyi bir yer yok :)

(22 Ağu '15, 11:13) ilkay ilkay's gravatar image
10 yorumdan 5 tanesi gösteriliyor hepsini göster

Üc cesit EJB vardir. Bunlar;

  • - Session Beans
  • - Entity Beans (JPA)
  • - Message driven beans

Session Bean' leri arkadaslar aciklamislar yukarida. Bunun disinda Entity Bean'ler vardir. ORM icin kullanilirlar ve illaki de bir EJB-Container gerekmez.

Message driven beans ler direkt olarak bir Client dan cagrilmazlar. Daha cok yabanci sistemlerle Asynchronous olarak haberlesmekte kullanilirlar.

permanent link

cevaplandı: 05 Mar '12, 09:04

mceliksoy's gravatar image

mceliksoy ♦
6.5k84988
cevap kabul oranı: 25%

değiştirildi: 05 Mar '12, 09:06

Cevabınız
toggle preview

powered by BitNami OSQA