EJB簡介

原文地址:http://blog.csdn.net/u010927139/article/details/44535357

一、EJB基礎:

        EJB是sun的JavaEE服務器端組件模型,設計目標與核心應用是部署分佈式應用程序。憑藉java跨平臺的優勢,用EJB技術部署的分佈式系統可以不限於特定的平臺。EJB (Enterprise JavaBean)是J2EE(javaEE)的一部分,定義了一個用於開發基於組件的企業多重應用程序的標準。其特點包括網絡服務支持和核心開發工具(SDK)。 在J2EE裏,Enterprise Java Beans(EJB)稱爲Java 企業Bean,是Java的核心代碼,分別是會話Bean(Session Bean),實體Bean(Entity Bean)和消息驅動Bean(MessageDriven Bean)。    -------------來自百度百科
        先看一下EJB的官方解釋。

        商務軟件的核心部分是它的業務邏。業務邏抽象了整個商務過程的流程,並使用計算機語言將它們實現。

        J2EE對於這個問題的處理方法是將業務邏從客戶端軟件中抽取出來,封裝在一個組件中。這個組件運行在一個獨立的服務器上,客戶端軟件通過網絡調用組件提供的服務以實現業務邏,而客戶端軟件的功能單純到只負責發送調用請求和顯示處理結果。在J2EE中,這個運行在一個獨立的服務器上並封裝了業務邏的組件就是EJB(Enterprise Java Bean)組件。

        用通俗話說,EJB就是:"把你編寫的軟件中那些需要執行制定的任務的類,不放到客戶端軟件上了,而是給他打成包放到一個服務器上了"。

        EJB的三種類型:
        1.Session Bean用於實現業務邏輯,它可以是有狀態的,也可以是無狀態的。每當客戶端請求時,容器就會選擇一個Session Bean來爲客戶端服務。Session Bean可以直接訪問數據庫,但更多時候,它會通過Entity Bean實現數據訪問。
        2.Entity Bean是域模型對象,用於實現O/R映射,負責將數據庫中的表記錄映射爲內存中的Entity對象,事實上,創建一個Entity Bean對象相當於新建一條記錄,刪除一個Entity Bean會同時從數據庫中刪除對應記錄,修改一個Entity Bean時,容器會自動將Entity Bean的狀態和數據庫同步。
        3.MessageDriven Bean是EJB2.0中引入的新的企業Bean,它基於JMS消息,只能接收客戶端發送的JMS消息然後處理。MDB實際上是一個異步的無狀態Session Bean,客戶端調用MDB後無需等待,立刻返回,MDB將異步處理客戶請求。這適合於需要異步處理請求的場合,比如訂單處理,這樣就能避免客戶端長時間的等待一個方法調用直到返回結果。

二、EJB實現原理:
        EJB是運行在獨立服務器上的組件,客戶端是通過網絡對EJB對象進行調用的。在Java中,能夠實現遠程對象調用的技術是RMI,而EJB技術基礎正是RMI。通過RMI技術,J2EE將EJB組件創建爲遠程對象,客戶端就可以通過網絡調用EJB對象了。
        EJB在系統中的位置:
            
    

三、使用EJB
        EJB運行機制:
        服務器端:在EJB組件部署到容器上後,容器會自動生成三個對象,這三個對象是:Home對象、Remote對象或Local對象、Enterprise Bean對象。
  客戶端調用流程:使用JNDI機制綁定與定位EJB,Context.lookup找回是Home對象,然後在使用Home接口的create方法創建Remote對象;調用Remote接口中的業務方法;使用完EJB應該調用remove方法刪除。如下:
    (1)發現EJB
       客戶端需要調用ejb的本地接口,所以需要取得本地接口的遠程引用,在J2EE環境中,可以通過JNDI訪問這類命名服務,也就是可以使用JNDI來獲取EJB本地接口的引用,這是因爲EJB容器使用部署中指定的JNDI名字註冊了本地接口。(部屬EJB時可以設置JNDI名字,客戶端就通過JNDI名字來查找到這個EJB)
    Try
    {
        InitialContext ic = new InitialContext();
        Object lookup = ic.lookup(“java:comp/env/ejb/Agency”);
        AgencyHome home=(AgencyHome)PortableRemoteObject.narrow(lookup,AgencyHome.class);
    }
    (2)使用
    Try
    {
        Agency agency = home.create();
        //向新創建的EJB返回一個 遠程引用
        System.out.println(agency.getAgencyName());
    }
    (3) 刪除
    Agency =null
    當本地RMI允許檢測到遠程對象不再有任何本地引用時,將爲這個對象觸發遠程垃圾箱,意味着遠程引用超時了,這會導致在服務器端再次引用對象,然後變銷燬bean

總結:EJB實現原理,就是把原來放到客戶端實現的代碼放到服務器端,並依靠RMI進行通信
發佈了43 篇原創文章 · 獲贊 12 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章