1. EJB2的缺點
l 爲了實現一個EJB,你必須實現一系列接口和類:Remote接口、Local接口、Remote Home接口、Local Home接口、一個Bean實現類。
l 你的Bean實現類,必須實現EJB接口中定義的各種回調方法:ejbCreate、ejbPassivate等等,雖然在大多數的應用程序中都無需用到這些接口。
l 另外一個痛苦是,你無法在ejb容器之外測試你的EJB。
l EJB-QL,EJB查詢語言,很難用。
l EJB2無法對繼承關係進行映射。
2. EJB3.0的目標
l 簡化企業應用開發
l 對持久層API進行標準化
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
3. EJB3.0的關鍵特性
3.1 被簡化的EJB API
EJB3.0消除了對Home接口的依賴,所有的持久化對象不必再實現任何EJB API接口。Session Bean,Message driven Bean,Entity Bean現在只是簡單的Java Bean。
3.2 Java Annotations
EJB 3.0需要用到JDK5.0中出現的新特性:Annotations。Annotation特性使得發佈描述文件變成一個可選項,而非必選項。EJB 3.0 定義了很多Annotation,覆蓋了衆多與持久化相關的概念。比如Bean的類型、依賴注入、事務管理、安全、回調、O-R映射、關係等等。如果你想要覆蓋在Annotation中的定義,那麼發佈描述文件依然有它的用武之地。Jboss應用服務器和Hibernate都支持這些Annotation,這就意味着,如果你使用hibernate的話,你可以在ejb3.0容器之外和在單獨的Java應用程序中獲得ejb3.0 annotation所帶來的一切好處。
3.3 依賴注入(DI)
再也沒有以前那些通過JNDI來查找EJB的樣板代碼了,通過定義@Inject、@EJB、@Resource等annotations,這些依賴關係現在可以由容器來注入到你的普通Java Bean中。
3.4 可選的回調機制
開發者們現在可以僅僅實現他們感興趣的那些回調方法了。通過定義@PostConstruct,@PreDestroy,@PrePersist或者@PostPersist,開發者們可以映射任何Java Bean或回調類的方法,讓它們接收這些事件。
3.5 Entity Manager API
一個普通的Java Bean實例,可以通過EntityManager API來持久化到數據庫,當然也可以從EntityManager中獲取一個Java Bean實例,修改之後,再次持久化到數據庫中。Jboss應用服務器和Hibernate都支持這個新的API。
3.6 簡化的持久化模型和改良的查詢
EJB 3.0將Java持久化模型進行標準化,Hibernate扮演了至關重要的角色。一套完整的Java Annotations被用來定義處理O-R映射和不同的對象關係類型。EJB 3.0也增強了EJB-QL查詢語言。支持動態查詢、子查詢、批量更新、批量刪除等。
3.7 可以脫離容器使用
EJB 3.0規範允許你在普通的Java應用程序中使用它的持久化API。JBoss EJB 3.0,也給你這種脫離應用服務器在單獨的應用程序、Junit測試單元、Tomcat或別的應用服務器中使用session bean,message driven bean的能力。