J2EEArchitecture(19)

chszs發表於2007-05-30
版權宣告:本文為博主chszs的原創文章,未經博主允許不得轉載。 https://blog.csdn.net/chszs/article/details/1630335

J2EE Architecture(19)

1、會話Bean
會話Bean有兩種型別:無狀態的會話Bean和有狀態的會話Bean。
兩者區別在於:在參與和維護與客戶端的會話狀態時,所用的方法和參與程度不同。
具體來說,有狀態的會話Bean能為企業提供全面或區域性的工作流及流程支援。
無狀態會話Bean沒有對話狀態,這些Bean的例項相互等同。即可方便地使用池化概念重用此類例項。
有狀態會話Bean能與客戶端長期保持會話狀態,在完成特定業務流程前,可在Bean和客戶端之間執行若干次對話交換。
2、實體Bean
實體Bean是企業的持久資料元件,可表示各種資訊,如所有經常賬戶持有者的銀行賬戶明細、某個公司專用的保險單等。
實體Bean可能包含核心業務資料,這些關鍵資料用於滿足企業功能需求。
實體Bean與企業資料相伴而生。即實體Bean直接指向資料庫表中的特殊記錄。
與會話Bean不同,實體Bean在容器活伺服器崩潰時,能夠生存下來。對企業而言,這是一個至關重要的特性。
在儲存實體Bean的容器和伺服器發生任何重大故障時,企業可以恢復這些實體Bean。
1)主鍵
它由“EJB物件”表示容器利用這個物件與實體Bean的特殊例項關聯。
2)關係
企業處理大量持久資料,這些資料在本質上非常複雜。不同持久資料之間的關係歸結為以下一些重要的型別:
(1)基數;
(2)方向;
(3)聚合、複合和級聯刪除
(4)遞迴、迴圈和鈍化載入
(5)引用完整性
3)實體Bean和池化
實體Bean例項池
(1)BMP(Bean Managed Persistence,Bean管理的永續性)
(2)CMP(Container Managed Persistence,容器管理的永續性)
4)EJB查詢語言——EJB-QL
EJB-QL為CMP實體Bean的finder和select方法定義了查詢。
生成的EJB-QL的查詢字串通常包括SELECT、FROM、WHERE三個子句。
EJB-QL的設計基於SQL92規範。
3、服務
1)JDBC
2)JTS/JTA
3)JNDI
4)JMS
5)JavaMail API
6)JAF
7)J2EE聯結器架構
8)JAAS
4、事務
“事務”指企業的邏輯工作單元,最終將更改持久資料,以滿足所有資料參與者和相關方的要求。
事務的性質:原子性、一致性、隔離性、永續性。
1)企業使用4種事務模型:
(1)普通事務
大多數資料庫和EJB都採用普通事務模型。
(2)巢狀事務
其原子工作單元嵌入到其它事務中。巢狀事務可表示成樹狀結構。
(3)鏈式事務
一組互連的原子工作單元,鏈在一起。
在該模型中,前一個提交事務的資源可用於下一事務。
(4)Sagas
類似於鏈式模型,也是將多個事務鏈在一起。如某個具體事務失敗,將“補償”該具體事務。
2)J2EE的事務參與者
在J2EE程式中,將有大量元件和容器參與事務。Web層的Servlet、Servlet Filter和JSP元件,業務層的會話Bean、實體Bean和MDB式事務流程的主要參與者。可統稱為“事務應用程式”。
資料庫通常是執行事務的終點。——稱為“資源管理器”。
事務邊界稱為“事務分界線”。任何特殊事務都有兩條分界線。第一條分界線標誌事務開始,而第二條標誌事務結束。開始是起始分界線標誌,而提交活回滾是事務結束標誌。
分散式事務本身十分複雜,因為事務發生在多個層並跨越網路。企業應用程式場景可使用多個事務資源,使問題更加複雜。為控制這種局面,事務管理器使用X/Open XA特殊協議,以交流資訊,管理使用多個資源管理器的事務。參與企業分佈事務的資源管理器互不知情,事務管理器可使用兩階段提交協議,以有效管理事務。J2EE為企業應用程式提供分散式、兩階段提交事務支援。
兩階段提交協議將事務過程分為兩個階段。在第一階段,事務管理器所涉及的資源做好提交準備,接著等候資源管理器的響應。此時,任何資源管理器都可以向事務管理器發出明確的“不提交”要求。在第二階段,如果一切正常,事務管理器將命令資源管理器提交;而如果發生任何意外,則命令資源管理器回滾。
3)JTS和JTA
JTS模型在CORBA OTS(Object Transaction Service,物件事務服務)的基礎上建立,可確保移植性和可互動性。JTA指定用來定義和控制分散式事務的介面。
在JTA設計中,資源管理器、容器以及應用伺服器使用這些API將事務作為“服務”提供給應用程式。
JTA包含以下三個重要介面:
(1)javax.transaction.TransactionManager介面由應用伺服器實現,目的是提供事務管理器支援。此類服務能代替使用者應用程式管理事務。
(2)javax.transaction.UserTransaction介面供使用者應用程式使用。管理元件事務的方法有3種:begin()、commit()、rollback()。
(3)javax.transaction.xa.XAResource介面用於為分散式應用程式提供兩階段提交支援。這個介面由參與分散式事務活動的伺服器和資源管理器實現。
4)業務層的事務
企業Bean元件包含以下兩類事務:
(1)BMT(Bean Managed Transaction,Bean管理的事務)
使用BMT時,Bean開發人員必須編寫程式碼,以啟動和完成事務。Bean需要使用javax.transaction.UserTransaction引用,需要在部署描述符中宣告這個事務模式。
(2)CMT(Container Managed Transaction,容器管理的事務)
CMT是標準的事務邊界宣告方式,邊界將由企業Bean的EJB容器指定劃定。
在使用CMT邊界時,容器將使用“應用程式組裝者”在部署描述符中提供的“屬性”設定期限。
容器可以利用這些“事務屬性”確定是否在特定事務上下文執行企業Bean的方法。
有六個方法幫助容器在方法執行期間管理事務:Required必需、Requires New需要新事物、Supports支援、Not Supported不支援、Mandatory強制、Never不參與。
5)會話同步
使用CMP的有狀態會話Bean也可以實現一個特殊事務介面javax.ejb.SessionSynchronization。在實現這個介面後,有狀態會話EJB可瞭解事務狀態:準備提交、事務是否已提交、事務是否回滾。
有狀態會話EJB實現的三個方法:afterBegin()、beforeCompletion()、afterCompletion()。都是容器回撥方法。
5、安全
1)身份驗證
單向身份驗證
雙向身份驗證:即參與雙方互相驗明身份,相互驗證。
可在J2EE應用程式的Web層和業務層實施身份驗證:
2)WEB層的身份驗證
(1)基本身份驗證
Web應用程式通過檢索“使用者名稱”和“密碼”來辨別真偽。最簡單,但它允許採用base64編碼格式的使用者名稱和密碼在Internet上傳輸,不能為企業應用程式提供可靠的安全保障。
(2)摘要身份驗證
使用更安全的演算法,如MD5,對來自瀏覽器的使用者名稱和密碼執行編碼。
(3)基於表單的身份驗證
基本同基本身份驗證。
(4)HTTPS相互身份驗證
客戶端和伺服器將相互驗明身份。相互驗證通過SSL(Secure Socket Layer,安全套接字層)進行,客戶端和伺服器應用程式都需使用X.509證照。
3)業務層的身份驗證
在接收客戶端呼叫時,業務層通常會利用Web層的身份驗證。如果呼叫來自Web層,且經過合理身份驗證,該呼叫將獲得業務層的信任。
信任又稱“保護域”。保護域是一組實體,這些實體相互瞭解。處在同一個域的實體沒必要進行身份驗證。
為成分利用“保護域”的概念,Web資源必須首先驗證客戶的身份,接下來,Web元件就可以與業務層元件在保護域內部進行互動。
4)授權
J2EE平臺在兩個級別上實施授權:
(1)宣告化授權
部署描述符用於兩個級別,即業務層級別和Web層級別,為呼叫者分配訪問許可權。
巨集觀級別,是粗粒度授權模型。
(2)程式設計化授權
核心J2EE API通過提供一些嵌入Servlet和EJB API的方法執行精細控制。
5)訊息保護
有必要確認在呼叫者和被呼叫者間交換的資訊前後是一致的。
一種訊息保護方法是給訊息附加訊息簽名。可用單向雜湊演算法,將訊息簽名計算為“摘要”,這是使用公鑰機制的加密方法。
6)審計
審計指隨著時間的推移,在企業中記錄各個級別和各個位置的事件。
審計的作用是明確責任,並確保符合政府制定的規章制度。