Durum bilgisi olmayan oturum çekirdeği yerine Durum bilgili oturum parçacığı ne zaman kullanılır?


83

Durum bilgisi olan bir oturum çekirdeği şu şekilde tanımlanır:

Durum Bilgili Oturum Fasulyeleri Bir nesnenin durumu, onun örnek değişkenlerinin değerlerinden oluşur. Durum bilgisi olan bir oturum parçacığında, durum değişkenleri benzersiz bir istemci-fasulye oturumunun durumunu temsil eder. Müşteri fasulyesiyle etkileşime girdiğinden ("konuştuğundan"), bu duruma genellikle konuşma durumu denir.

Durum bilgisi olmayan bir oturum çekirdeği şu şekilde tanımlanır:

Stateless Session Beans (Vatansız Oturum Fasulyeleri) Vatansız bir oturum fasulyesi, müşteri ile konuşma durumunu sürdürmez. Bir istemci durum bilgisiz bir fasulyenin yöntemlerini çağırdığında, Bean'in durum değişkenleri o istemciye özel bir durum içerebilir, ancak yalnızca çağrı süresi boyunca. Yöntem bittiğinde, müşteriye özgü durum korunmamalıdır. Bununla birlikte, istemciler, havuzlanmış durum bilgisiz çekirdeklerdeki örnek değişkenlerinin durumunu değiştirebilir ve bu durum, havuza alınmış durumsuz fasulyenin bir sonraki çağrısına tutulur. Yöntem çağırma sırasında haricinde, durum bilgisi olmayan bir çekirdeğin tüm örnekleri eşdeğerdir ve EJB kabının herhangi bir istemciye bir örnek atamasına izin verir. Yani, vatansız bir oturum fasulyesi durumu tüm müşteriler için geçerli olmalıdır.

Durum bilgisi olmayan oturum çekirdeği kullanmanın durum bilgisi olan oturum çekirdeğine göre avantajı aşağıdaki gibidir:

Durum bilgisi olmayan oturum çekirdekleri birden çok istemciyi destekleyebildiğinden, çok sayıda istemci gerektiren uygulamalar için daha iyi ölçeklenebilirlik sunabilirler. Tipik olarak, bir uygulama aynı sayıda istemciyi desteklemek için durum bilgisi olan oturum fasulyelerinden daha az durumsuz oturum fasulyesi gerektirir.

Öyleyse akla gelen soru, ne zaman durum bilgisi olan seans fasulyelerini kullanmalı? Konu hakkındaki saf anlayışıma göre, kişi elinden geldiğince vatansız bir seans fasulyesi kullanmaya devam etmelidir.

Durum bilgisi olan oturum fasulyesinin kullanılması gereken adaylar nelerdir? İyi örnekler var mı?

Oturum Bean


Yanıtlar:


151

Öncelikle, çekirdeklerin sunucuda nasıl oluşturulduğunu ve işlendiğini anlamalısınız.

İçin vatansız oturum fasulye sunucusu bir havuzda durumlarda değişken miktarda koruyabilir. Bir müşteri böyle bir vatansız fasulyeyi her talep ettiğinde (örneğin bir yöntem aracılığıyla), bu talebe hizmet etmek için rastgele bir örnek seçilir. Bu, müşteri ardışık iki talepte bulunursa, durum bilgisi olmayan fasulyenin iki farklı örneğinin talepleri karşılaması olasıdır. Aslında, iki istek arasında konuşma durumu yoktur. Ayrıca müşteri ortadan kaybolursa, durum bilgisi olmayan fasulye imha edilmez ve başka bir müşteriden gelen bir sonraki isteği yerine getirebilir.

Öte yandan, durum bilgisi olan bir oturum çekirdeği müşteriyle yakından bağlantılıdır. Her bir örnek oluşturulur ve tek bir istemciye bağlanır ve yalnızca o belirli istemciden gelen isteklere hizmet eder. Durum bilgisi olan bir fasulyede art arda iki istek yaparsanız, isteğiniz her zaman aynı fasulye örneğinden karşılanır. Bu, istekler arasında bir konuşma durumunu koruyabileceğiniz anlamına gelir. Yaşam döngüsünün sonunda, istemci bir kaldırma yöntemini çağırır ve çekirdek yok edilir / çöp toplama için hazırdır.

Vatansız veya durum bilgili ne zaman kullanılır?

Bu, esas olarak konuşma durumunu sürdürmek isteyip istemediğinize bağlıdır . Örneğin, iki sayıyı toplayan ve sonucu döndüren bir yönteminiz varsa, tek seferlik bir işlem olduğu için durumsuz bir fasulye kullanırsınız. Bu yöntemi diğer numaralarla ikinci kez ararsanız, önceki eklemenin sonucuyla artık ilgilenmezsiniz.

Ancak, örneğin, bir müşterinin yaptığı isteklerin sayısını saymak istiyorsanız, durum bilgisi olan bir fasulye kullanmanız gerekir. Bu senaryoda, müşterinin daha önce fasulye yöntemini ne sıklıkla talep ettiğini bilmek önemlidir, bu nedenle, çekirdekte bir konuşma durumu (örneğin bir değişkenle) sürdürmeniz gerekir. Burada vatansız bir fasulye kullanırsanız, müşterinin isteği her seferinde farklı bir çekirdekten sunulur ve bu da sonuçlarınızı bozar.


16
" Müşteri kaybolursa fasulye de yok olur ". Aslında, durum bilgisi olan oturum çekirdekleri, @Remove( javax.ejb) ile dekore edilmiş bir yöntem açıkça çağrılmadıkça otomatik olarak yok edilmez (bu yöntemin kodlanması bile gerekmez. İle açıklama yapıldığında basitçe boş / boş bırakılabilir @Remove). İlişkili istemci, durum bilgisi olan bir oturum parçacığını yok etmeyi unutursa, bu çekirdek, kapsayıcının kendisi kendi ilkesini kullanarak kaldırmaya karar verene kadar sunucuda asılı kalmaya devam eder. Yanlış mı yapıyorum
Küçük

3
Tabii ki haklısın. Fasulye yaşam döngüsü hakkında daha fazla bilgi burada bulunabilir: docs.oracle.com/javaee/6/tutorial/doc/giplj.html
tobiasdenzler

48

Durum bilgili oturum çekirdeği kullanmanın en güzel örneğinin, kullanıcının satın almak istediği tüm ürünleri depoladığınız bir Alışveriş Sepeti için olduğunu düşünüyorum .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.