天天看點

初識EJB3.0的答疑總結(二)

     最近發現接觸新東西時,疑問越來越多。其實這并不是壞事情,反而是件好兆頭,至少說明你學的,接觸的多了。      肚子裡有墨,等你學新東西時,肯定會與你肚子的東西産生碰撞,肯定會納悶,這個與剛才那個有啥差別,有啥關系。等你有問題時,千萬别放棄,肯定會有解決你疑問的方案,這樣你才清晰,踏實的走下去。若是沒有疑問,那就另當别論啦。     也許剛開始沒有疑問,很正常,因為你腦子裡沒有這方面或很少的知識,這個時候,可以選擇沉默,可以選擇前進。但是在你前進的過程中,肯定會有疑問,比如開始接觸struts1,後期接觸struts2時,肯定會與第一個對比。       在接觸EJB時,腦子裡有很多疑問。用一句形容此時的心情:不懂的太多了。   當時,正如圓圈法則,圈内是自己懂的,圈外是不知道的事情,圈圈越大,發現自己懂得也少。莊子也曾說過“吾生也有涯,而知也無涯”。

  那轉回到我們的總結上。   第一:EJB包括哪幾種類型。        sessionBean:用于實作業務邏輯,它可以是有狀态的,也可以是無狀态的。每當用戶端請求時,容器就會選擇一個Session Bean來為用戶端服務。Session Bean可以直接通路資料庫,但更多時候,它會通過Entity Bean實作資料通路。          MessageDriven Bean是EJB2.0中引入的新的企業Bean,它基于JMS消息,隻能接收用戶端發送的JMS消息然後處理。MDB實際上是一個異步的無狀态 Session Bean,用戶端調用MDB後無需等待,立刻傳回,MDB将異步處理客戶請求。這适合于需要異步處理請求的場合,比如訂單處理,這樣就能避免用戶端長時間的等待一個方法調用直到傳回結果。       Entity Bean是域模型對象,用于實作O/R映射,負責将資料庫中的表記錄映射為記憶體中的Entity對象,事實上,建立一個Entity Bean對象相當于建立一條記錄,删除一個Entity Bean會同時從資料庫中删除對應記錄,修改一個Entity Bean時,容器會自動将Entity Bean的狀态和資料庫同步。

 第二:EJB3.0和JPA關系?       JPA全稱Java Persistence API.JPA通過JDK 5.0注解或XML描述對象-關系表的映射關系,并将運作期的實體對象持久化到資料庫中。       網上有種解答:       随着EJB3規範的推出,EJB中的實體Bean(Enity Bean)逐漸被JPA規範所替代,這也是為什麼JPA的規範會包含在EJB3的規範中的原因.       但JPA不僅能夠在EJB環境中使用,也能夠在J2SE的環境中使用,相對于EJB2.X的實體BEAN,使用的範圍更廣.       總之,簡單的說,JPA雖然出自EJB3,但是其使用的範圍卻大于EJB3,不僅可以在JavaEE5中,也可以在JavaSE的環境中,如圖所示EJB3和JPA的關系.       

初識EJB3.0的答疑總結(二)

 第三:JPA和hibernate關系?        上圖證明EJB3.0和JPA關系中,但是我個人還是了解EJB中的實體bean實作了JPA規範。        寫過實體bean的,會發現實體bean的寫法和hibernate有幾分頗像,并且目的思路都一樣,隻不過有個别的注釋不同而已。        使用持久化對象,是不依賴具體的架構。        

初識EJB3.0的答疑總結(二)

       從上圖可以看出jpa與hibernate的關系。JPA是持久化的規範;而hibernate是實作持久化的産品。

 第四:hibernate annotation中為何會有ejb-persistence.jar       其實,在第三個問題中已經闡述,隻不過再次強調下。hibernate annotation是hibernate的一個子項目。并且使用過Hibernate-annotation其實也是在實體上使用注釋,而不是像Hibernate中使用xml映射檔案來持久化實體對象。但是Hibernate annotation也是具體的實作,也是實作了jpa規範。

 第五:JPA的優點?        首先:标準化。提供了統一的接口。        其次:JPA能夠支援并發、事務、大資料量問題的解決,不僅僅适合小型系統。        還有:易上手,友善。主要配置相應的注釋即可。        并且:查詢能力。定義了持久化查詢語言。JPQL,其實在EJB3.0中類似ql、類似Hibernate中的hql語句。

 總結:       接下來會進入具體的學習,比如EJB3.0持久化實體的生命周期、以及相應的操作。