EJB - Bean Types
根據上一篇EJB-簡介所提到,EJB根據beans的功用分成三大類分別是session beans, message-driven beans和entities。
Session Beans
Session bean是為了執行特定商業操作而被client調用,如檢查客戶信用history。Session這個名字意味著bean實例存在時間是“每個工作單位”和當伺服器shutdown或crash的時候就會消失。Session bean可以將任何應用程式邏輯模組化。Session bean有兩類分別為: stateful和stateless。
Stateful session bean當客戶調用的時候在不需要寫任何多餘的程式碼的狀況下可以自動儲存bean的狀態。比較典型的例子就是網頁商城裡的購物車系統。相反,stateless session bean 不會維護任何狀態和模組應用程式服務。我們可以實作商業流程如信用卡付費或檢查查客戶信用記錄而建立stateless
session bean.
一個session beans不管在本地或遠端都可以透過Java RMI被調用。一個stateless session bean可以公開為網頁服務。
Message-driven Beans
MDBs 就像session beans,都是處理商業邏輯。但MDBs最大的不同是clients永遠不會直接調用MDB method。相反MDBs是透過訊息驅動然後傳給messaging server, 就是在系統元件之間啟動傳送非同步訊息。Messaging servers的典型例子有IBM WebSphere MQ,SonicMQ, Oracle Advance Queueing,和 TIBCO。MDBs通常是使用在系統整合或非同步處理的健全性。上。Messaging的一個例子,從自動零售系統傳送庫存補貨的需求到供應鏈管理系統。
Entities and the
Java Persistence API
EJB 3當中其中一個新特色就是處理persistence的方法。之前我們概略的提到persistence 提供者和JPA,現在讓我們更深入到細節。
Persistence的能力是將Java objects中包含的data自動儲存到關聯式資料庫像Oracle, SQL Server, DB2。Persistence 在 EJB 3是透過JPA管理。它自動的使用Object-relational mapping(ORM)這項技術persists Java
objects。ORM的本質是透過設定檔在java objects處理mapping data然後儲存到資料表中。它緩解我們寫底層,複雜的JDBC程式碼persist objects到資料庫的工作。
在EJB 3中,persistence provider基本上就是Java Persistence API (JPA)所支援的ORM框架。JPA定義了一些標準:
- ORM設定metadata的建立mapping entities到 relational tables.
- EntityManager API – 是一個標準的API在entities執行CRUD persistence operations.
- Java Persistence Query Language (JPQL),是用來搜尋和獲取persisted application data.
自從為了Java平台JPA將 ORM frameworks標準化,我們可以在應用程式plug in ORM 產品如 JBOSS Hibernate,OracleTopLink,或BEA Kodo 做為JPA“persistence provider”的底層。
Entities
如果在我們的應用程式採用JPA建立persistence logic,那就必須使用entities. Entities是Java objects用來persisted到資料庫。就像session beans將process模組化,entities將低階應用概念包裝成高階商業流程管理。
The EntityManager
JPA EntityManager介面管理entities和提供persistence 服務。Entities會告訴JPA provider如何map資料庫。EntityManager 介面讀取ORM metadata的entity和執行persistence. EntityManager知道如何對entities在資料庫中執行CRUD(CREATE, RETRIEVE, UPDATE, DELETE)。另外JPA 提供處理lifecycle management,performance tuning,caching和transaction management的能力。
Java Persistence
Query Language
JPA 有提供一個類似SQL的語言稱為Java Persistence Query Language (JPQL) 可以搜尋儲存在資料庫中的entities. 在一個健全和彈性的API如JPQL,我們在選擇自動persistence而不是手寫JDBC是不會遺失任何東西。另外,JPA支援native database-specific SQL, 在一些罕有的案件是這是值得使用。
在這時候,我們應該對EJB各個部分都有部分的認識。我們也知道需要透過EJB
container去執行session beans和MDBs 且persistence provider執行entities,那這些元件都能存取EJB 3所提供的服務。
Reference:
1)EJB 3 in action
Reference:
1)EJB 3 in action