EJB學習筆記 3

2021-04-08 17:16:46 字數 1428 閱讀 1266

由於這段時間忙於結束現在的工作和找工作,所以很久沒寫日誌了,今天先補上這一篇,這一次的學習筆記主要是針對《mastering ejb》中的第4,5章講session bean的部分。

之前的筆記已經介紹過session bean的主要作用是處理一些業務流程,比如下定單,出貨等等。這篇日誌對session bean本身的用途和用法不想在花費任何筆墨,這裡主要想將一下,session bean的例項池的管理。

我在之前的一篇關於管理物件的日誌中已經提出了池的概念,並舉了乙個靜態池的例子,但是更多情況下我們遇到的是動態池。session bean的例項池的管理實際上就是一種池的管理辦法。

由於session bean分成stateful(有狀態)和stateless(無狀態)兩種型別。所以就有分別針對這兩種型別的管理方法。

下面我先將一下什麼是stateless和statefull。在許多情況下一次request的業務邏輯處理的請求是不包含任何狀態資訊的,也就是說請求的session bean根本不關心是誰在請求,他都以一樣的方式處理。比如有個邏輯是驗證當前登入使用者的合法性,返回true或false來表示是否允許登入。這時在一次request結束後,那一次request的使用者資訊也就丟失了,因為沒必要保留,下一次又來一次request他會將新傳遞的資訊用以驗證,然後又把資訊丟失。這就是stateless的session bean。不過某些情況下則不然。比如你登入乙個網上購物系統,然後選了一輛手推車,往裡面加東西,這時候每一次的request都必須保持狀態,因為你必須當前登入使用者在這次購買之前,手推車裡已經有了些什麼東西。這就是stateful的session bean。至於究竟如何保持狀態,那就不用程式設計師去關心了,一切自然都由容器完成(而事實上是容器記住了上一次呼叫的那個例項,有些資訊甚至可能被記錄在了外存上,所以能保持狀態)。

對每乙個request都生成乙個session bean的例項自然是愚蠢的做法,因此容器會採用例項池的辦法去管理物件。事實上stateless的管理方法還是相當好理解的,因為他實際上是乙個靜態池,由於不記錄會話狀態,因此只需事先在容器提供商提供的部署檔案中配置好一共需要維持多少個會話物件,就可以在系統中使用了。這裡有一點很重要的是create並不代表真的就生成了乙個會話bean的例項,只不過是容器通過例項池返回給了客戶乙個例項!事實上一切的生成操作都是由例項池代為管理了!

對於stateful的例項池的管理就不是那麼簡單了,由於要記錄會話的狀態,事實上它是乙個動態池。這裡用到了activation(啟用)和passivate(掛起)的思想,也就是說如果例項池的乙個有狀態會話bean長期不被呼叫的話他就會被掛起(注意,這只是一種策略),通常情況下是放到外存中(實際上是實現了

這就是例項池維護和管理session bean的大致機制了,這本書的第5章主要在介紹web services,包括wsdl和soap等概念。但是對於脫離於語言的更上一層的web services我,相信大家也不大能夠接觸到(一般情況下不大容易接觸得到誇語言的系統整合)所以這裡就不在介紹這本書的這部分內容了。

EJB3 0學習筆記

一.ejb3.0分為會話bean session bean mdb message driver bean 訊息驅動bean,實體bean entity bean 1.session bean 又分為有狀態的 stateful 和無狀態的 stateless stateful session bea...

EJB 學習筆記之 會話Bean

企業bean是實現ejb技術的j2ee元件。企業bean在ejb容器中執行 何時需要使用企業bean 如果你的應用程式符合以下的任一條件,你就應該考慮使用企業bean 你的應用程式需要不斷的公升級。為了適應不斷增長的使用者,你可能需要將你的應用程式元件分布在多台不同的機器上執行。雖然並不僅僅是企業b...

EJB學習筆記 8 SessionBean生命週期

postconstruct 當bean物件完成例項化以後,標註了這個注釋的方法會被呼叫 適用於有狀態和無狀態的bean 只能有乙個 predestroy 標註了這個注釋的方法會在容器銷毀乙個無用的或者過期的bean例項之前呼叫 prepassivate 當乙個空閒的stateful bean空閒時間...