EJB的相关知识
一、EJB發展歷史
IBM、SUN公司力推EJB前景,大公司開始采用EJB部署系統。主要價值:對分布式應用進行事務管理
出現問題:
①EJB的API難度大
②規范要求必須拋出特定異常的接口并將Bean類作為抽象類實現(不正常不直觀)
③對象關系映射和食物管理有天然復雜性
④用EJB封裝業務邏輯會帶來性能下降
【早期EJB規范至允許客戶端通過特定協議例如CORBA進行遠程方法調用來調用,直到EJB2.0引入本地接口。】
輕量級技術代替EJB:Hibermate【數據持久化和對象關系映射】、Spring框架【封裝業務邏輯】
改變: EJB3.0出現
1. EJB 1.0
EJB1.0發布于1998年3月24日,規范中包含有狀態的的服務器對象、無狀態的服務器對象和可選的持久化領域對象?。
EJB1.0提供了良好的分布式支持功能,允許通過遠程接口來遠程調用EJB中的業務方法。
EJB1.0強制客戶機組件以遠程訪問的方式調用EJB方法。
2. EJB 1.1
EJB1.1發布于1999年12月17日。
EJB1.1開始支持實體Bean,必須在應用中實現。實體Bean是可以存儲在持久存儲介質上的持久對象,用來表示永久性數據并提供操作這些數據的方法。一般情況下一個實體Bean對應數據庫中的一張表,而一個實體類的實例對應著這張表的一個記錄。
EJB1.1引入了XML格式的部署描述文件,用來以聲明的方式管理EJB的部署信息。
EJB1.1的安全機制由角色驅動,而非方法。
3. EJB 2.0
EJB2.0發布于2001年8月22日。
EJB2.0取消了強制客戶機組件以遠程訪問的方式調用EJB方法。【減少不必要的系統開銷 避免性能下降】
EJB2.0引入本地接口,允許開發者選擇是否讓EJB組件支持遠程訪問。
EJB2.0增強了實體Bean功能,為容器管理持久化的EJB提供容器管理關系的支持,開發者可以通過配置文件來管理EJB之間的關系
EJB2.0引入了EJB-QL作為查詢語言,為實體Bean提供查詢支持。
EJB2.0引入了消息驅動Bean,消息驅動Bean是用來專門處理消息請求的組件,屬于無狀態的會話Bean,異步處理用戶請求。消息驅動Bean沒有遠程接口,不能被客戶機調用。可以通過向消息目的地發消息觸發消息驅動Bean的onMessage方法。
4. EJB 2.1
EJB2.1發布于2003年11月24日。
EJB2.1可以提供Web Service支持,利于異構系統的整合。可將無狀態會話bean暴露為Web服務;EJB可通過引用訪問Web服務。
EJB2.1增加定時器服務,提供一種新的基于定時器的事件驅動方式。可供消息驅動bean作為消息源使用。
EJB2.1增加了EJB-QL的功能,改進EJB-QL的查詢功能。支持ORDER BY, AVG, MIN, MAX, SUM, COUNT和MOD。
EJB2.1使用XML schema代替DTD以定義部署描述符。
5. EJB 3.0
EJB3.0發布于2006年5月2日。
EJB3.0拋棄了EJB2實體的設計,僅保留了會話Bean和消息驅動Bean。
EJB3.0引入了全新的JPA規范作為持久化解決方案。JPA是一種Java應用程序接口規范,描述Java應用中關系數據的管理,充當面向對象領域模型和關系數據庫系統的橋梁。
EJB3.0簡化了EJB2中會話Bean的開發,不再需要Home接口。
EJB3.0只要求提供遠程或本地的業務接口即可。
EJB3.0不推薦實用XML文件作為部署描述文件,改為使用Annotation設置部署描述信息。
EJB3.0使用傳統簡單Java對象(POJO),實際是普通JavaBeans,有一些屬性及屬性的getter、setter方法,沒有業務邏輯,有時可以作為值對象和數據傳輸對象使用。可以有簡單的運算屬性,不允許有業務方法,不能帶有connection之類的方法。主要用協助業務邏輯。
EJB3.0支持依賴注入來簡化全異系統的集成與配置。
EJB3.0規范大幅采用Java注釋來代替部署描述符對代碼進行元數據修飾,從而消減此前EJB編程的冗雜性。
EJB3.0把2.X版的實體Bean改為由JPA支持。【JPA是Java持久層接口,是JDK5.0注釋和XML描述對象關系表的映射關系,運行期的實體對象持久化到數據庫中。】
6. EJB 3.1
EJB3.1允許企業Bean只提供一個Bean類,無須提供業務接口。
EJB3.1允許通過異步的方式調用會話Bean的業務方法。
EJB3.1取消了類文件必須打包到JAR文件的限制,允許直接將EJB類放到WAR文件中。
?
二、EJB核心模型
EJB定義了三種企業Bean,分別是會話Bean、實體Bean和消息驅動Bean。
會話Bean描述了與客戶端的一個短暫的會話。當客戶端的執行完成后,會話Bean和它的數據都將消失;
實體Bean描述了存儲在數據庫表中的一行持久穩固的數據,如果客戶端終止或者服務結束,底層的服務會負責實體Bean 數據的存儲。
數據驅動Bean結合了會話Bean 和 Java信息服務(JMS)信息監聽者的功能,它允許一個商業組件異步地接受 JMS消息。
1. 會話Bean
會話Bean用于實現業務邏輯,分為有狀態的會話Bean和無狀態的會話Bean。
每當客戶端發出EJB調用請求時,容器就會選擇一個會話Bean為客戶端服務。
會話Bean可以直接訪問數據庫,更多時候由實體Bean實現數據訪問。
2. 實體Bean
實體Bean代表真實物體的數據。
EJB3.0中實體Bean僅作為普通Java對象使用。
實體Bean負責與數據庫表進行對象關系映射。
3. 消息驅動Bean
消息驅動Bean用來專門處理基于消息請求的組件。
消息驅動Bean可以收發異步JMS消息,能夠與其他EJB交互。
【JMS是Java消息服務應用程序接口 支持兩個程序之間或分布式系統中發送消息,進行異步通信】
適用于一個業務執行時間很長,執行結果無須實時向用戶反饋的場合。
三、開發支撐
1. EJB容器
EJB需要運行在EJB容器,EJB容器截取客戶和組建之間的通信,并根據配置信息添加基礎設施代碼,EJB容器用于提供EJB組件的開發、部署和運行環境。
目前支持EJB3.0的應用服務器有JBoss(4.2.X以上版本)、Classfish、WebLogic(10以上版本)、Sun Application Server(9.0以上版本)、Oracle Application Server(10g以上版本)和Apusic應用服務器。【JBoss是使用者最多的開源應用服務器,WebLogic是時長占有率最高的商業應用服務器】
2. JNDI
JNDI為各種現有的命名和目錄服務提供通用接口:DNS、LDAP、活動目錄、RMI注冊器、COS注冊器、NIS及文件系統。
JNDI有客戶API和服務提供商接口SPI組成,應用程序通過客戶API訪問命名和目錄服務。服務提供商接口用于供廠商創建命名和目錄服務的JNDI實現。
EJB開發者只需要知道客戶API如何訪問命名和目錄服務,不需要知道JNDI SPI的使用。
命名服務用于將名稱和對象聯系起來,從而可以用名稱訪問對象。【例如:輸入URL ------DNS-------》IP地址】
目錄服務是命名服務的擴展,目錄服務的對象不僅有名稱,還有屬性。目錄服務中對象可以有屬性,命名服務中對象沒有屬性。
四、開發平臺
可以在Eclipse上完成基于EJB的二次開發。
五、二次開發基本步驟
1. 開發環境配置
①配置JDK和JBoss環境,在Eclipse里新建EJB項目
②打包JAR文件到JBoss安裝目錄是server/default/deploy/目錄下,JBoss會對JAR文件進行熱部署。打包WAR文件到JBoss安裝目錄是server/default/deploy/目錄下。瀏覽器訪問應用程序。
?
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
- 上一篇: 【机器学习】逻辑回归模型
- 下一篇: CRISP-DM:数据挖掘标准流程