EJB3.0開發有狀態的會話bean,步驟與無狀態會話bean類似,只需要在無狀態會話bean中把@Stateless改成@Stateful
ejb類代碼如下
package wang.ejb3.impl;<br />import javax.ejb.EJB;<br />import javax.ejb.Remote;<br />import javax.ejb.Local;<br />import javax.ejb.Stateful;<br />import wang.ejb3.HelloWorld;<br />import wang.ejb3.HelloWorldLocal;<br />@Stateful<br />@Remote(HelloWorld.class)<br />@Local(HelloWorldLocal.class)<br />public class HelloWorldBean implements HelloWorld, HelloWorldLocal {<br />public String sayHello(String name) {<br />return name + "說:你好,世界";<br />}<br />}<br /> 有狀態會話bean開發完成。
雖然無狀態會話bean與有狀態會話bean開發過程很相似,但是它們採用對bean管理技術是不一樣的。
無狀態bean使用執行個體池技術管理bean
在執行個體池中的對象可以被多個使用者共用,與資料來源串連池技術是一樣的,資料來源裡面的串連是可以被很多使用者所共用的,當一個使用者使用串連的時候,其他使用者是不能使用該串連的,只有當這個使用者使用完這個串連之後,這個串連回到了串連池裡面,後面的使用者才能使用這個串連,通過這個串連池技術可以減少資料連線對象的數量,提高系統的效能,無狀態bean使用了執行個體池技術,當一個使用者使用對象時候,其他使用者是不能使用該對象的,只有這個使用者使用完後,對象回到執行個體池中,其他使用者才能使用該對象,所以會減少使用對象的數量來提高系統的效能,顯然無狀態bean的效能比有狀態bean的效能更高。無狀態bean是使用最少的對象數為使用者服務。
有狀態bean使用啟用(activation)管理bean
有狀態bean要為每個使用者建立一個bean執行個體,並且需要在一段時間內緩衝該bean,然而在一個大型公司專屬應用程式中,使用者是很多的,所以就有很多個物件被緩衝起來,增大記憶體的消耗,影響到系統的效能,然而在實際中,每個使用者並不會頻繁地訪問這些對象,所以可以對這種情況進行最佳化,使用啟用技術進行最佳化,當這個bean在一段時間內不再使用的時候,EJB容器會把有狀態bean執行個體的會話資訊序列化到本地磁碟,把這個bean所佔用的記憶體資源釋放掉,如果在這個總的緩衝時間之內,使用者又發起請求,EJB容器會把本地磁碟上的會話資訊還原到記憶體中,為使用者服務,如果在這個總的緩衝時間之內沒有使用者訪問,EJB容器會把本地磁碟上的會話資訊給清除掉,這時,訪問bean執行個體,就會得到逾時異常資訊。