程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 繞過Java開發瓶頸 解析EJB編程限制一

繞過Java開發瓶頸 解析EJB編程限制一

編輯:關於JAVA

Enterprise JavaBeans(EJB)是一個開發和部署分布式服務器端的、帶事務處理的、安全的商業組件的規范和結構。EJB的體系結構是J2EE的基礎和核心,J2EE定義了整個標准的應用開發體系結構和一個部署環境。

在這個體系結構中,應用開發者的注意力集中在封裝商業邏輯和商業規則上,一切與基礎結構服務相關的問題和底層分配問題都由應用程序容器或服務器來處理。

甚至,從屬於事務、持久化、安全等等方面的應用組件的運行時屬性都可以使用高度靈活的聲明方法在部署的環境中定制。這個體系結構定義了一個容器和一個服務器模型--容器是應用組件生存和執行的環境,而這個容器卻又寄居在一個服務器之中。

J2EE平台提供了一個簡化的開發模型,它具有工業強度的可擴展性、支持合理的集成和靈活的部署,與開發商和應用服務器無關,這一切使得一些專用的應用服務器和專用的分布式對象框架變得古舊了。

EJB的角色和責任

EJB規范定義了幾個標准的角色和責任者,如下:

1.EJB服務器提供商提供的應用服務器應是一個在分布式事務處理、系統服務等方面的專家。

2.EJB容器提供商提供EJB組件實例運行環境和部署工具。

服務器/容器提供商是典型的操作系統開發商、數據庫開發商或者是應用服務器開發商。EJB的服務器和EJB的容器應是同一個開發商提供,因為無論是在現在的EJB1.1規范(最終版)還是EJB2.0公共草稿版(正在修改)中都沒有定義兩者之間的接口。

3.Bean的提供商或者EJB開發者開發的EJB組件都包涵商業邏輯及商業功能。EJB開發者提供的每一個EJB組件都應滿足以下條件:EJB的實現中應包括所有必須有的組件-容器合同方法(Contract method),如:ejbCreate(),ejbRemove()等等和一些商業方法(business method);Home接口;Remote接口;如需要還應有幫助類。Home接口為創建、刪除和查找EJB實例的方法提供簽名,Remote接口定義了商業方法的簽名。

4.應用程序組裝器把一些由Bean提供商開發的EJB組件組裝成一個完整的J2EE應用程序。

5.部署器在應用程序部署的目標產品環境中是專家,它在應用服務器中安裝應用組件並配置它們的事務、持久化和安全方面。這樣你就可以管理復雜的問題了,諸如:事務處理、並發處理、持久化以及安全。

6.系統管理者負責服務器的配置和管理、運行監控和負載平衡。

7.應用程序的用戶界面開發者負責用戶界面和表示邏輯。

這篇文章的焦點集中在Bean提供商/EJB開發者方面和EJB組件實現代碼的限制方面。

EJB組件的約束

EJB的開發者並不需要在EJB的組件實現代碼中編寫系統級的服務,EJB提供商/開發者需知道並且嚴格地遵守一些限制,這些限制與開發穩定的和可移植的EJB組件的利益有關。以下是你應該回避使用的一些Java特色,並且在你的EJB組件的實現代碼中要嚴格限制它們的使用:

1.使用static,非final 字段。建議你在EJB組件中把所有的static字段都聲明為final型的。這樣可以保證前後一致的運行期語義,使得EJB容器有可以在多個Java虛擬機之間分發組件實例的靈活性。

2.使用線程同步原語來同步多個組件實例的運行。避免這個問題,你就可以使EJB容器靈活的在多個Java虛擬機之間分發組件實例。

3.使用AWT函數完成鍵盤的輸入和顯示輸出。約束它的原因是服務器方的商業組件意味著提供商業功能而不包括用戶界面和鍵盤的I/O功能。 4.使用文件訪問/Java.io 操作。EJB商業組件意味著使用資源管理器如JDBC來存儲和檢索數據而不是使用文件系統API。同時,部署工具提供了在部署描述器(descriptor)中存儲環境實體,以至於EJB組件可以通過環境命名上下文用一種標准的方法進行環境實體查詢。所以,使用文件系統的需求基本上是被排除了。

5.監聽和接收socket連接,或者用socket進行多路發送。EJB組件並不意味著提供網絡socket服務器功能,但是,這個體系結構使得EJB組件可以作為socket客戶或是RMI客戶並且可以和容器所管理的環境外面的代碼進行通訊。

6.使用映象API查詢EJB組件由於安全規則所不能訪問的類。這個約束加強了Java32 平台的安全性。

7.欲創建或獲得一個類的加載器,設置或創建一個新的安全管理器,停止Java虛擬機,改變輸入、輸出和出錯流。這個約束加強了安全性同時保留了EJB容器管理運行環境的能力。

8.設置socket工廠被URL"s ServerSocket,Socket和Stream handler使用。避免這個特點,可以加強安全性同時保留了EJB容器管理運行環境的能力。

9.使用任何方法啟動、停止和管理線程。這個約束消除了與EJB容器管理死鎖、線程和並發問題的責任相沖突的可能性。

通過限制使用10-16幾個特點,你的目標是堵上一個潛在的安全漏洞: 10.直接讀寫文件描述符。

11.為一段特定的代碼獲得安全策略信息。

12.加載原始的類庫。

13.訪問Java一般角色所不能訪問的包和類。

14.在包中定義一個類。

15.訪問或修改安全配置對象(策略、安全、提供者、簽名者和實體)。

16.使用Java序列化特點中的細分類和對象替代。

17.傳遞this引用指針作為一個參數或者作為返回值返回this引用指針。你必須使用SessionContext或EntityContext中的getEJBObject()的結果。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved