一、J2EE 技術簡介 J2EE是 SUN 公司提出的在分布式環境中的一種體系結構,它提供了一種基於組件的設計、開發、集成、部署企業應用系統的方法,J2EE平台提供了多層分布式的應用系統模型、重用組件的能力、統一的安全模型和靈活的事務控制。
<!-- frame contents -->
<!-- /frame contents -->
基於組件的J2EE企業應用系統具有平台獨立性,所以不受任何軟件產品和任何軟件廠家API的約束。
J2EE定義了下面的組件:
·application client 和 applets 是客戶層組件;
·Java Servlet 和 jsp 組件是WEB 層組件;
·Enterprise JavaBean(EJB) 組件是業務處理層組件。
EJB 技術是J2EE 體系一部分,EJB 組件是用 Java 語言編寫的,是可以被客戶端程序存取的可重用的服務器端組件,它運行在J2EE 服務器上,在客戶/服務器系統中,EJB 提供類似於中間件的服務。
J2EE 服務器提供給用系統系統級的服務,像事務治理、安全治理、數據庫存取等,開發人員不必自己開發系統級服務,所以可以集中精力開發應用系統中的業務邏輯處理;用EJB 組件處理業務邏輯。
二、EJB 組件簡介 EJB 組件分為兩類:Sesson bean 和 Entity bean
Sesson bean 代表 J2EE 服務器的客戶端,客戶端通過調用 Sesson bean 的功能和J2EE 服務器通信,Sesson bean 和客戶會話,可以認為是客戶端的擴展,例如:網上帳務系統的客戶可以調用 Sesson bean 的"輸入存款單"的功能來存入現金等。每一個Sesson bean 只能有一個客戶,當客戶終止時,與之相應的Sesson bean 也終止。因此Sesson bean 是暫時的,不可持久的。
Entity bean 代表業務處理對象,它存儲在持久的存貯機制如數據庫中,例如,一個Entity bean 代表一個帳戶存單,它是存儲在關系數據庫中存單表的一行。Entity bean 的信息不一定存儲在關系數據庫中,它也可以存儲在對象數據庫中、文件中或其他別的存儲機制中( 本例子中用關系數據庫)。
Entity bean 可以被多個客戶端共享。由於多個客戶端可能改變相同的數據,所以Entity bean 在事務治理下工作是很重要的。通常情況下,EJB 容器提供事務治理。開發人員可以在組件的部署描述文件中指定事務的屬性。每一個Entity bean 都有一個唯一的對象標識符,也叫主鍵,這個主鍵可以讓客戶端定位一個Entity bean。
Entity bean 的持久性可以被 Entity bean 自己治理,也可以讓 EJB 容器治理,Entity bean自己治理要求開發人員在Entity bean中提供數據存取代碼。例如客戶的Entity bean要調用 SQL 語句來通過 JDBC 存取關系數據庫。EJB 容器治理Entity bean持久性意味著 EJB容器自動處理數據存取的調用。
兩種類型的EJB 組件(Session bean 和 Entity beans)都可以存取數據庫。選擇哪一類 EJB 組件來存取數據庫依靠於具體的應用系統。
下面的情況可以在 Session bean 組件中調用 SQL 語句來存取數據庫:
· 應用系統相對簡單。
· SQL 語句返回的數據不能被多個客戶端共享使用。
· 數據不代表一個業務實體。
下面的情況要用Entity beans 組件:
· 超過一個客戶端使用數據庫調用返回的數據。
· 數據代表一個業務實體。
· 開發者想從 Sesson bean 中隱藏關系模型。
EJB 結構的這種靈活性可以讓開發人員用不同的方法來開發應用系統。
三、建立數據庫連接 EJB 容器維護數據庫的連接池,這個連接池對 EJB 組件來說是透明的。當EJB 組件申請一個連接時,EJB 容器從連接池中提取一個連接並分配給組件。由於EJB 容器只是分配一個連接給 EJB 組件,所以組件很快就獲得這個連接並連接數據庫。
<!-- frame contents -->
<!-- /frame contents -->
數據庫調用之後,組件就可以釋放連接,這樣它又可以快速申請到另一個連接。又因為一個組件只占用這個連接很短的時間,從而同一個連接可以被多個組件使用。