這是一段講述ejb限制的文章以及相關的中文文章,請問怎麼理解每一條約束。

itjoe發表於2003-07-01
Programming Restrictions for Enterprise Beans
Enterprise beans make use of the services provided by the EJB container, such as lifecycle
management. To avoid conflicts with these services, enterprise beans are
restricted from performing certain operations:
n Managing or synchronizing threads
n Accessing files or directories with the java.io package
Using AWT functionality to display information or to accept information from a
keyboard
n Listening on a socket, accepting connections on a socket, or using a socket for
multicast
n Setting a socket factory used by ServerSocket, Socket, or the stream handler
factory used by the URL class
n Loading a native library


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元件由於安全規則所不能訪問的類。這個約束加強了Java平臺的安全性。

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()的結果。

相關文章