<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    EJB3學習總結(1)

    Posted on 2009-05-29 22:28 J@mes 閱讀(755) 評論(0)  編輯  收藏
    作為近期學習EJB3  的一些心得和總結,完全是自己的理解和白話,前輩們請多指教

    EJB3學習總結(1)

    現(xiàn)狀

    EJB2得到了較廣泛的應用,但真正用對場合的項目不多,那些強調分布式,即業(yè)務邏輯和Web是在分布在不同物理層的大型項目。更多得是使用在中小型web應用之上。

    EJB3Spring、Hibernate等一系列輕量級框架運動的發(fā)展后現(xiàn)身了,EJB3是基于POJO組件的,同時提供了事務、安全、ORM和分布式等諸多特點,同時AOP、DIAnnotation等特性也進一步提高了EJB3的易用性。

    EJB3規(guī)范

    EJB3規(guī)范包含3個技術文檔:

    1.       EJB3 Simplified API

    2.       EJB3 Core Contracts & Requirement

    3.       Java Persistence API

    EJB3組件模型

    1.       Session Bean:執(zhí)行業(yè)務服務、控制事務及資源訪問

    2.       Message Driven Bean:異步調用,通過JMS關聯(lián)消息隊列(Queue)及Topic來響應外部事件

    3.       Entity:具有唯一標示的實體,是持久化的基礎。

    SessionBeanMDBean統(tǒng)稱為Enterprise Bean,這點不同于EJB2規(guī)范。EntityBean已經(jīng)劃分由持久化Provider去管理和控制,不再由EJB容器管理。

    EJB3框架

    它提供了對EJB3組件的各種支持,包括容器事務、安全服務、資源池的管理(包括線程池、連接池、實例池)以及組件生命周期的管理、并發(fā)支持等。

    EJB3的核心features

    1.       聲明式的元數(shù)據(jù):通過Java5AnnotationXML來聲明式地去指定Enterprise BeanEntity Bean的行為和特性。如果同時使用兩種方式時,XML描述具有更高的優(yōu)先級。

    2.       按異常配置:對于大量可使用default配置的地方都可以省去繁瑣的配置,只有需要不按默認行為的才需要顯式得通過注解或XML來進行描述。強調用戶只有需要配置時才進行配置,可以使代碼更為簡潔。

    3.       良好的可伸縮性:EJB3的實現(xiàn)中在三個方面保證了良好的伸縮性,(1)通過資源池最大程度上對重新對象的重用;(2)使用持久化及緩存避免重復查詢和重復創(chuàng)建實體;(3)優(yōu)化的鎖定策略,避免對DB的并發(fā)鎖定。

    4.       JTAJava Transaction API)定義了分布式事務的標準API。EJB容器作為JTA的事務管理器。

    5.       通過聲明的方式來控制方法級別的訪問控制,達到多層安全性。

    6.       實體Bean被替換成POJO,簡單、輕量,不用再去實現(xiàn)專門的接口,同時可以脫離EJB容器。

    7.       SessionBean也更加靈活,不再需要主接口(Home Interface.

    8.       依賴注入(dependency injection),可以通過AnnotationXML的方式將依賴數(shù)據(jù)“推(push)”到bean。例如:將EntityManager注入到SessionBean中,以使會話可以與持久化單元進行交互。

    9.       攔截器和回調(Call-back):通過攔截器來完成某些回調方法。

    10.   對于SessionBeanMDB,不在需要主方法(ejbCreate()),使用默認構造器來替代。同時也不需要再擴展專有接口。

    11.   對于EntityBean,主接口(Home interface)也被替換成EntityManager,后者是一個單例實例工廠,可以管理實體Bean的生命周期。

    12.   EJB3的分布式計算模型:EJB3也基于RMI遠程服務,遠程接口方法按值傳遞以提供粗粒度的模型。

    EJB3角色

    1.       定義Enterprise Bean及相關meta-data的三種角色:

    (1)       企業(yè)Bean提供者(Enterprise Bean provider),負責去定義和實現(xiàn)業(yè)務邏輯和結構;負責定義實體的持久化結構及互相關系。

    (2)       應用裝配者(Application assembler)。

    EJB3的會話Bean

    EJB3中,SessionBean包括兩種類型,Stateful SessionBeanStateless SessionBean。

    顧名思義,Stateless SessionBean不需維持客戶請求的會話狀態(tài);而Stateful SessionBean則需要維持特定客戶請求的會話狀態(tài),同時bean實例也是用客戶請求綁定的。

    Stateless SessionBean

    無狀態(tài)會話Bean由兩個元素組成:業(yè)務接口,用來定義所提供的服務;bean類,是對服務接口的實現(xiàn)。注意此處,不需像EJB2.x中分別實現(xiàn)EJBObjectSessionBean接口。

    通過示例,通過定義本地接口和(或)遠程接口來定義業(yè)務接口,這里Local接口和Remote接口的選擇遵循一個原則:如果業(yè)務的請求者與SessionBean處在同一個JVM中,則可以使用本地接口,反之則必須使用遠程接口。

    原則上,如果同時使用了本地接口和遠程接口,則必須保證二者定義的接口一致,同時由實現(xiàn)的Bean實現(xiàn)這些方法。

    無狀態(tài)會話Bean無需實現(xiàn)EJB特定的接口或擴展類,只需在類級別使用注解——@Stateless即可。同時也在本地接口及遠程接口的類級別添加注解——@Local@Remote。

    通過前面對EJB3特性的介紹,可以知道EJB3DIDependency Injection)的良好支持!在EJB3中,可以將各類資源注入到會話Bean中,這些資源可以是其他的會話Bean、數(shù)據(jù)源或者是JMS中的隊列(Queue)等。要實現(xiàn)依賴注入可以通過添加注解,也可以在XML配置文件中進行描述,但需注意的是,如果二者都進行的配置則以XML文件中的描述為準。

    以注解的方式為例,只需添加@Resource注解即可,注入可以通過兩種方式:實例變量和setter方法上。

    回調(Call-back),通過回調,可以對Bean在其生命周期內各個階段進行更細粒度的控制和管理。使用回調方法也很簡單,回調方法沒有多余的限制,只需添加正確的注解即可。

    無狀態(tài)會話Bean兩個主要的用于回調方法的注解分別是:@PostConstruct@PreDestroy。其中@PostConstruct的方法會在該bean被實例化后回調執(zhí)行,但需要注意的是,如果該bean有配置了需要注入的資源,那該回調方法則會緊跟著資源的注入之后而執(zhí)行。

    @PreDestroy的回調方法則是在容器即將銷毀bean實例之前被調用,主要用來做一些善后的工作,比如對資源的關閉和清理。(補充,在有狀態(tài)會話Bean中,該方法是在最后一個帶有@Remove注解的方法調用后才被調用,之后容器銷毀bean實例。)

    另一個關鍵的元素是攔截器(Interceptor),攔截器的使用也很便捷,通過添加正確的注解即可。攔截器的概念與其他JavaEE的框架或規(guī)范中的一致,即攔截業(yè)務方法的調用,可以在攔截點附加新的業(yè)務邏輯,結合依賴注入特性,可以充分得做到關注點分離(Separation of Concerns)。Enterprise Bean中會話Bean和消息驅動Bean可以定義攔截器方法。

    攔截器注解可以添加到方法級別,也可以添加到類級別。被標注的方法在被調用時會被攔截器類攔截,并插隊式的先去調用攔截器的方法。對于用到的攔截器類需要添加@Interceptor注解,如果有多個攔截器則使用@Interceptors。

    @AroundInvoke注解為例,攔截器方法需要關注InvocationContext接口,通過它可以獲得被攔截的bean類(Class)、bean中的方法(Method)等,需要強調的是其中的proceed()方法,通過它將攔截請求往后傳遞,或者到攔截器鏈中的下一個,或者是結束攔截調用真正的bean方法。

    EJB3規(guī)范中定義了兩種類型的異常,分別是應用異常和系統(tǒng)異常。應用異常是業(yè)務邏輯中產生的checked exception;而系統(tǒng)異常則是EJB系統(tǒng)級產生的異常,同時系統(tǒng)異常都是RemoteExceptionRuntimeException的子類,是unchecked exception。

    有狀態(tài)會話BeanStateful SessionBean)在特性及細節(jié)上與無狀態(tài)會話Bean很相似。

    會話Bean的用戶視圖

    訪問會話Bean的用戶視圖可以有三種形式:

    1.       通過Remote接口,遠程客戶具有位置無關性。

    2.       通過Local接口,這兩種方式中請求方可以是其他的EJB組件,可以是Servlet、JSP等。需要注意的是,本地客戶具有位置依賴性。

    3.       WebService方式,可以將會話Bean發(fā)布成為一個WebService,供客戶調用。

    客戶請求會話Bean時,或者通過依賴注入或者通過查找JNDI,來獲得會話Beanstub對象,請求是通過stub來進行調用的。對于無狀態(tài)會話Bean,每次請求將獲得新的stub,而有狀態(tài)會話Bean,則在請求方緩存stub,這樣才能使容器知道該返回哪個與客戶相關聯(lián)的bean實例。

    通過依賴注入獲得會話Bean業(yè)務接口的方式是添加注解@EJB,注意要與@Resource區(qū)分開。

    相比查找JNDI,使用注入的方式會更加簡潔,通常對于遠程請求使用JNDI更適合。

    有狀態(tài)會話BeanStateful SessionBean

    通過實現(xiàn)SessionSynchronization接口,可以在事務點上獲得EJB容器的通知:afterBegin,在新事物開始時;beforeCompletion,在事物提交前;afterCompletion,在事物執(zhí)行完之后。

    有狀態(tài)會話Bean中的回調方法除了PostConstructPreDestroy外,還有PreActivatePrePassivate,分別使用@PreActivate@PrePassivate來注解。

    前兩個回調方法的細節(jié)與無狀態(tài)會話Bean一致,分別在(1)實例化Bean之后并執(zhí)行完資源注入后執(zhí)行;(2@Remove方法執(zhí)行完畢之后。

    對于有狀態(tài)會話Bean中的@Remove方法,也是一個管理bean生命周期的方法,調用該方法后,容器將會從實例池中將該bean刪除。

    帶有@PrePassivate注解的方法會由EJB容器調用,當某個有狀態(tài)會話Bean實例長時間空閑,則容器調用該方法將此bean實例鈍化,并將狀態(tài)緩存起來。

    當客戶請求再次需要使用被鈍化的某bean實例時,容器調用該bean@PreActivate方法,返回一個創(chuàng)建好的并帶有狀態(tài)的新實例。

    有狀態(tài)會話Bean的攔截器方法需要注意的是,如果實現(xiàn)SessionSynchronization接口的bean,afterBegin始終發(fā)生在@AroundInvoke的任何方法前。


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導航:
     
    主站蜘蛛池模板: 一区二区免费国产在线观看| 国产成人精品日本亚洲专一区 | 亚洲电影免费在线观看| 亚洲午夜av影院| 黄色视频在线免费观看| 亚洲一级特黄大片无码毛片| 大片免费观看92在线视频线视频 | 特级做A爰片毛片免费看无码| 国产亚洲精品免费视频播放| 免费人成视频在线观看免费| 亚洲av成人一区二区三区在线观看| 免费无码午夜福利片69| 中文亚洲成a人片在线观看| 最新亚洲成av人免费看| 久久国产精品亚洲综合| h视频在线观看免费网站| 亚洲日韩国产欧美一区二区三区| 国产无遮挡又黄又爽免费视频| 国内成人精品亚洲日本语音| 亚洲精品线路一在线观看| 99免费在线视频| 亚洲最大在线观看| 久久综合AV免费观看| 国产亚洲精品美女久久久久久下载| 亚洲午夜无码AV毛片久久| 免费无遮挡无码永久视频| 亚洲人成7777影视在线观看| 毛片免费全部播放一级| 猫咪免费人成在线网站| 亚洲午夜无码久久久久| 久久久久久曰本AV免费免费| 亚洲国产成人无码AV在线| 超清首页国产亚洲丝袜| 精品成在人线AV无码免费看| 亚洲av无码专区在线观看亚| 国产亚洲一区二区三区在线观看 | a级成人免费毛片完整版| 亚洲国产成AV人天堂无码| 免费看国产一级特黄aa大片| 午夜精品射精入后重之免费观看| 亚洲13又紧又嫩又水多|