|
引言
期待以久的EJB3.0規范在最近發布了它的初稿。在本文中將對新的規范進行一個概要性的介紹,包括新增的元數據支持,EJBQL的修改,實體Bean模型訪問bean上下文的新方法和運行時環境等等。作者還討論了EJB在未來要作出的調整以及EJB3.0與其他開發規范之間的關系。
開始
無論如何由于EJB的復雜性使之在J2EE架構中的表現一直不是很好。EJB大概是J2EE架構中唯一一個沒有兌現其能夠簡單開發并提高生產力的組建。EJB3.0規范正嘗試在這方面作出努力以減輕其開發的復雜性。EJB3.0減輕了開發人員進行底層開發的工作量,它取消或最小化了很多(以前這些是必須實現)回調方法的實現,并且降低了實體Bean及O/R映射模型的復雜性。
在本文中,我首先會介紹EJB3.0中幾個主要的改變。它對進一步深入了解EJB3.0是非常重要的。隨后,我會從更高的層面來描述已經被提交到EJB3.0規范中的細節,并一個個的講解新的規范中的改變:實體Bean,O/R映射模型,實體關系模型和EJB QL(EJB查詢語言)等等。
背景
EJB3.0中兩個重要的變更分別是:使用了Java5中的程序注釋工具和基于Hibernate的O/R映射模型。
Java5中的元數據工具
Java5(以前叫J2SE1.5或Tiger)中加入了一種新的程序注釋工具。通過這個工具你可以自定義注釋標記,通過這些自定義標記來注釋字段、方法、類等等。這些注釋并不會影響程序的語義,但是可以通過工具(編譯時或運行時)來解釋這些標記并產生附加的內容(比如部署描述文件),或者強制某些必須的運行時行為(比如EJB組件的狀態特性)。注釋的解析可以通過源文件的解析(比如編譯器或這IDE工具)或者使用Java5中的APIs反射機制。注釋只能被定義在源代碼層。由于所有被提交到EJB3.0草案中的注釋標記都有一個運行時的RetentionPolicy,因此會增加類文件占用的存儲空間,但這卻給容器制造商和工具制造商帶來了方便。
Hibernate
目前Hibernate非常受歡迎,它是開發源代碼的Java O/R映射框架,目的是把開發人員從繁瑣的數據持久化編程中解脫出來。它也有一個標準的HQL(Hibernate 查詢語言)語言,你可以在新的EJB QL中看到它的影子。Hibernate在處理如數據查詢、更新、連接池、事務處理、實體關系處理等方面非常簡單。
概覽
在已經提交的EJB3.0規范中主要涉及兩個方面的改變:
1. 一套以注釋為基礎的EJB編程模型,再加上EJB2.1中定義的通過部署描述符和幾個接口定義的應用程序行為。
2. 新的實體Bean持久化模型,EJBQL也有許多重要的改變。
還有一些有關上述的提議,比如:一個新的客戶端編程模型,業務接口的使用以及實體Bean的生命周期。請注意EJB2.1編程模型(包括部署描述符和home/remote接口)仍然是有效的。新的簡化模型并沒有完全取代EJB2.1模型。
EJB注釋
EJB規范組織一個重要的目標是減輕原始代碼的數量,并且他們為此給出了一個完美而簡介的辦法。在EJB3.0的里,任何類型的企業級Bean只是一個加了適當注釋的簡單Java對象(POJO)。注釋可以用于定義bean的業務接口、O/R映射信息、資源引用信息,效果與在EJB2.1中定義部署描述符和接口是一樣的。在EJB3.0中部署描述符不再是必須的了;home接口也沒有了,你也不必實現業務接口(容器可以為你完成這些事情)。
比如,你可以使用@Stateless注釋標記類把Java類聲明為一個無狀態回話bean。對于有狀態回話bean來說,@Remove注釋可以用來標記一個特定的方法,通過這個注釋來說明在調用這個方法之后bean的實例將被清除掉。
為了減少描述組件的說明信息,規范組織還采納了由異常進行配置(configuration-by-exception)的手段,意思是你可以為所有的注釋提供一個明確的缺省值,這樣多數常規信息就可以據此推斷得出。
新的持久化模型
新的實體bean也是一個加了注釋的簡單Java對象(POJO)。一旦它被EntityManager訪問它就成為了一個持久化對象,并且成為了持久化上下文(context)的一部分。一個持久化上下文與一個事務上下文是松耦合的;嚴格的講,它隱含的與一個事務會話共存。
實體關系也是通過注釋來定義的,O/R映射也是,并提供幾種不同的數據庫規范操作,在EJB2.1中這些要通過開發人員自己的設計模式或者其它技術來完成的(比如,自增長主鍵策略)。
深入研究
現在是時候詳細了解EJB3.0草案了。讓我們開始探討所有EJB中四種企業級bean,并看看他們在新的規范中是什么樣子。
無狀態回話bean
在EJB3.0規范中,寫一個無狀態回話bean(SLSB)只需要一個簡單的Java文件并在類層加上@Stateless注釋就可以了。這個bean可以擴展Javax.ejb.SessionBean接口,但這些不是必須的。
一個SLSB不再需要home接口,沒有哪類EJB再需要它了。Bean類可以實現業務接口也可以不實現它。如果沒有實現任何業務接口,業務接口會由任意public的方法產生。如果只有幾個業務方法會被暴露在業務接口中,這些方法可以使用@BusinessMethod注釋。缺省情況下所有產生的接口都是local(本地)接口,你也可以使用@Remote注釋來聲明這個接口為remote(遠程)接口。
下面的幾行代碼就可以定義一個HelloWorldbean了。而在EJB2.1中同樣的bean至少需要兩個接口,一個實現類和幾個空的實現方法,再加上部署描述符。
import Javax.ejb.*;
/**
* A stateless session bean requesting that a remote business
* interface be generated for it.
*/
@Stateless
@Remote
public class HelloWorldBean {
public String sayHello() {
return "Hello World!!!";
}
}
有狀態回話bean
除了幾個SFSB的特別說明之外,有狀態回話bean(SFSB)和SLSB一樣精簡:
一個SFSB應該有一個方法來初始化自己(在EJB2.1中是通過ejbCreate()來實現的)。在EJB3.0的規范中建議這些初始化操作可以通過自定義方法完成,并把他們暴露在業務接口中。在使用這個bean之前由客戶端來調用相應的初始化方法。目前規范組織就是否提供一個注釋來標記某個方法用于初始化還存在爭議。
Bean的提供者可以用@Remove注釋來標記任何SFSB的方法,以說明這個方法被調用之后bean的實例將被移除。同樣,規范組織仍然在討論是否要有一種機制來處理這種特殊的情況,即當這個方法出現異常的情況下bean的實例是否被移除。
下面是對以上問題我個人的觀點:
1) 是否應該有一個注釋來標明一個方法進行初始化呢?我的觀點是
主站蜘蛛池模板:
91羞羞视频|
含羞草在线
|
欧美肥婆性生活
|
天天槽任我槽免费
|
欧美日韩黄色
|
亚洲一区精品伊人久久伊人
|
天堂Av亚洲欧美日韩国产综合
|
直插下身完整的欧美版
|
伊人精品久久久大香线蕉99
|
热巴两次用约老师屁股发底线球
|
在线视频中文字幕
|
韩国无遮羞禁动漫在线观看96
|
成人无码精品一区二区在线观看
|
女性酥酥影院
|
99九九精品国产高清自在线
|
人人澡人人爽人人精品
|
国产AV无码一二三区视频
|
色狐直播免费观看
|
国产成人精品综合在线观看
|
伊人久在线
|
女子扒开腿让男生桶爽
|
国产电影一区二区三区
|
日本无码免费久久久精品
|
中文字幕一区二区三区在线播放
|
快穿之H啪肉
|
久久久黄色大片
|
兽交白浆喷水高潮
|
久久国产精品免费A片蜜芽
久久国产精品萌白酱免费
久久国产精品麻豆AV影视
|
国产精品久久久久久久A片冻果
|
亚洲AV天堂无码麻豆电影
|
麻豆产精品一二三产区区
|
国产一区二区在线免费观看
|
亚洲AV成人无码999WWW
|
无套日出白浆在线播放
|
狠狠色噜噜狠狠狠狠米奇777
|
熟妇久久无码人妻AV蜜桃
|
欧美一道本一区二区三区
|
国产日韩欧美另类
|
旧里番6080在线观看
|
最新在线黄色网址
|
91chinesevideo|