[F09_Distsys] EJB 使用時機 #2

技術是沒有完美無缺的,EJB(Enterprise Java Bean)也就是Midleeware,只佔分散式中的一小部份而已,
所以運用情境也是有限的

何時該使用EJB

1. Single and multisystem business transactions (多個系統交易)
Database的transacrions通常只會照顧自家人, 萬一遇到其他廠牌的Database, 甚至File syste上的交易, 自己寫起來可是相當麻煩.

2. Distributed functionality (分散式系統特性)
系統需求必須使用到分散式功能, 比方講學校繳學雜費, 收款銀行不可能將主機交給學校, 一定是將機器放在銀行, 銀行也一定不只服務一個學校, 這時簡單的架構就出來了

3. Portable components (可攜式元件)
如果沒有RMI/EJB機制, Java要做到兩個以上Client共享同一個元件或Class是相當困難的, 而且EJB下的元件抽換還是比一般RMI強大

4. Applications relying on asynchronous messaging (使用非同步訊息)
有Container管理比起直接使用JMS, 當然是方便多

5. Security roles (安全性)
EJB的安全性控管是(deployment-descriptor-based)配置時宣告的, 彈性比用程式寫好很多

6. Persistence context management
資源管控一向是令人腦羞的東西, 君不見那些Connection忘記關的, Session沒release的, 由電腦自己控管自然是最好

何事不該用

1. Applications requiring thread control (執行緒控制)
EJB container會自己做控制系統資源, 用了thread會破壞它的機制

2. Performance (效能)
EJB本來就主要不是為效能而設計, 而是開發方便, 正確可靠, 安全性等, 而且比POJO(一般純Java Object)提供太多功能, 自然效率是下降的

3. Database babysitting (小型資料庫)
小型資料庫通常只做簡單的select, insert等, 而且資料庫世界畢竟與物件世界特性仍然差太多, 用到Entity Bean(Object)會引進不必要複雜度

除了EJB外, 其他選擇

Spring

彈性與輕巧的代表者, AOP與IOC更是膾炙人口

http://www.springsource.org/

Hibernate
O/R Mapping的王者, 不然兩個世界轉換真的是累死
https://www.hibernate.org/

參考 Enterprise JavaBeans, 3.0 Section26 (O'Reilly)