無狀態bean不會"專門"儲存客戶端的狀態----(需要強調"專門"是因為無狀態會話bean也會有成員變數,有成員變數就可以儲存狀態,但它不會專門為特定的客戶端儲存狀態。)。有狀態會話bean會儲存客戶端的狀態 。對於有狀態會話bean來說,只要有客戶端傳送對有狀態會話bean的訪問,伺服器都會建立乙個會話bean例項與該客戶端對應,這樣這個例項與這個客戶端就是一一對應的。各自的優缺點因 為有狀態會話bean需要儲存特定客戶端的資訊,乙個客戶端對應乙個例項,既是在當時客戶端有連線沒有訪問的情況下,也要為這個客戶端保留這個例項。
session bean 主要的目的是讓程式開發者將邏輯層抽離;
entity bean 主要是資料元件, entity bean 主要的目的,在於提供資料,也就是說程式設計師可以將 entity bean 當程式資料;
message driven bean 與 session bean 或是 entity bean 均不相同,一般 session bean 或是entity bean 都可以讓使用者主動觸發,但是 message driven bean 主要的目的在於反應 message queue 中的事件。也就是當 message queue 中有訊息傳入時, message driven bean 可以主動被觸發,做出相對應的反應。
有狀態會話bean(slsb)和無狀態會話bean(sfsb)的區別
1 無狀態 (stateless)
在不同方法呼叫間不保留任何狀態 。
事務處理必須在乙個方法中結束 。
通常資源占用較少;可以被共享(因為它是無狀態的) 。
無狀態bean不會"專門"儲存客戶端的狀態----(需要強調「專門」是因為無狀態會話bean也會有成員變數,有成員變數就可以儲存狀態,但它不會專門為特定的客戶端儲存狀態。)。
----你對entity bean的資料操作不會被容器維護,當其他的使用者要用entity bean時,裡面的資料不
會被鈍化到伺服器的磁碟上。也就是被儲存起來。
2 有狀態 (stateful)
可以在不同的方法呼叫間保持針對各個客戶端的狀態 。
與客戶端的聯絡必需被維持;通常開銷較大 。
有狀態會話bean會儲存客戶端的狀態 。
--你對entity bean的資料操作會被容器維護起來,當其他的使用者要用你正在使用的entity bean時,裡面的資料會被鈍化到伺服器的磁碟上,例如網上的購物車。
區別的根本原因
這與無狀態會話bean和有狀態會話bean的執行原理是相關的。
對於有狀態會話bean來說,只要有客戶端傳送對有狀態會話bean的訪問,伺服器都會建立乙個會話bean例項與該客戶端對應,這樣這個例項與這個客戶端就是一一對應的。如果客戶端在bean例項中儲存了資訊,之後還可以使用。
對 於無狀態會話bean來說,伺服器端會維持乙個例項池,建立好若干個例項物件供客戶端呼叫。當從客戶端傳送建立會話bean的請求時,並不一定會真的建立 ejb,多數情況下是從例項池中得到乙個例項,用完之後重新放回例項池。如果下次再訪問,再從例項池中取出乙個例項使用,並不一定是上次的例項。即使兩次 訪問使用的是同乙個例項,在兩次訪問之間也有可能有其他的客戶端訪問了該例項。所以,並不能保證在多次訪問之間的資訊會被儲存。所以,無狀態會話bean 不會專門儲存客戶端的資訊。
各自的優缺點
因 為有狀態會話bean需要儲存特定客戶端的資訊,乙個客戶端對應乙個例項,既是在當時客戶端有連線沒有訪問的情況下,也要為這個客戶端保留這個例項。這樣 隨著客戶端數量的增加,伺服器端需要建立的例項的數量也在增加,增加到一次程度對伺服器的效能就會有一定的影響。為了不對伺服器的效能產生影響,通常服務 器會進行一些優化。當客戶端的數量超過某個值之後,就不建立新的例項。雖然不建立新的例項,還是需要對使用者響應,這時候就採用共享例項的方式。會檢視哪個 例項雖然處於連線狀態,但是沒有訪問,然後把這個例項的狀態儲存起來,使用這個例項為新的請求服務,對於原來的客戶端來說,稱為掛起。如果原來的客戶端又 傳送請求了,會重新查詢乙個空閒的例項並且把已經儲存好的狀態恢復回來,這個過程稱為啟用。所以在有狀態會話bean的訪問過程,經常會發生查詢例項,激 活掛起等操作,所以效率比較低。
而傳送對無狀態會話bean的請求的時候,可以隨便取乙個空閒的例項為客戶端服務,所以效率比較高。
有狀態會話bean的好處是,可以儲存客戶端的狀態,所以客戶端在後續訪問的時候就可以少傳遞一些引數。而狀態會話bean需要傳遞方法執行過程中需要的所有引數。
如何選擇
根據上面分析的有狀態會話bean和無狀態會話bean的優缺點。如果要頻繁的訪問,並且多次訪問之間會共享一些資訊,這時候應該使用有狀態會話bean。對於不經常使用的功能,可以使用無狀態會話bean。無狀態會話bean的使用要比有狀態會話bean的使用多。
let const var 的區別有哪些?
在es5中,宣告變數只有var和function兩種形式。但是因為var宣告的變數會有一定的缺點 內層變數可能覆蓋外層變數的問題以及用來計數的迴圈變數洩露為全域性變數,下面會有詳細的介紹 es6提出了使用let和const宣告變數,下面就來看看他們之間的區別。1,什麼時候提出的?var是es5提出的...
TCP和UDP的區別有哪些?
傳輸層協議tcp與udp。udp user datagram protocol 提供無連線的通訊,不能保證資料報被傳送到目標位址。tcp transmission control protocol 是一種面向連線 連線導向 的 可靠地 基於位元組流的通訊協議,它為傳輸大量資料或為需要接受資料許可的應...
mov 和 lea 的區別有哪些?
from 彙編中 mov 和 lea 的區別是什麼 lea 是 load effective address 的縮寫,簡單的說,lea指令可以用來將乙個記憶體位址直接賦給目的運算元,例如 lea eax,ebx 8 就是將 ebx 8 這個值直接賦給 eax,而不是把 ebx 8 處的記憶體位址裡的...