(艾群科技 萧松瀛)
J2EE 在今日已经逐渐的成为企业中标准的应用程序平台,同时也
有许多的程序设计师,甚至网页设计人员,利用 JSP/Servlet 的便
利性,在 J2EE Server 上开发相关的应用,或是与公司内部的资源
相连接。
最近也有许多人慢慢的投入 J2EE 中的其它技术,其中 EJB 就是
一个很值得投资的技术。
这篇文件并不是要教您如何撰写 EJB ,但是希望让对 EJB 有兴
趣的使用者,能够大致了解 EJB 能让您作哪些事情。
EJB 依照特性的不同,目前区分为三种,分别是 Session Bean ,
Entity Bean ,以及 Message Driven Bean 。其中 Session Bean 与
Entity Bean 算是 EJB 的始祖,这两种 EJB 在 EJB 规格 1.x 的时候
就已经存在了,而 Message Driven Bean 则出现在 EJB 2.0 的规格中
。目前也有少数几家厂商的 J2EE Server 支持 EJB 2.0 的规格。
Session Bean
Session Bean 主要的目的是让程序开发者将逻辑层抽离,特别是复
杂的逻辑可以放在 Session Bean 中。Session Bean 还可以再细分为
Stateful Session Bean 与 Stateless Session Bean ,这两种的 Session Bean
都可以将系统逻辑放在 method之中执行,不同的是 Stateful Session
Bean 可以记录呼叫者的状态,因此通常来说,一个使用者会有一
个相对应的 Stateful Session Bean 的实体 (Instance 注一) ,换言之,
当使用者呼叫某个 Stateful Session Bean 的两个 methods 的时候,
EJB Container(注一) 会清楚的知道某个 EJB 的实体属于某一个使用
者的。因此一般的设计上,不会让两个使用者同时使用某个 Stateful
Session Bean (这并不是表示两个使用者不能使用同一个 Stateful Session
Bean)。
Stateless Session Bean 虽然也是逻辑组件,但是他却不负责记录使
用者状态,也就是说当使用者呼叫 Stateless Session Bean 的时候,
EJB Container 并不会找寻特定的 Stateless Session Bean 的实体
来执行这个 method ,换言之,很可能数个使用者在执行某个 Stateless
Session Bean 的 methods 时,会是同一个 Bean 的 Instance 在执行。
从内存方面来看, Stateful Session Bean 与 Stateless Session
Bean 比较, Stateful Session Bean 会消耗 J2EE Server 较多的内存,
然而 Stateful Session Bean 的优势却在于他可以维持使用者的状态。
Entity Bean
Entity Bean 主要是资料组件, Entity Bean 主要的目的,在于提供资
料,也就是说程序设计师可以将 Entity Bean 当程序资料,至于 Entity
Bean 实际上怎么存取实际上的数据库,那个则是另外一件事情。
Entity Bean 实际上是针对 RDBMS 而设计,也就是说当其它的程序使
用Entity Bean 的时候, Entity Bean 的资料主要是从 RDBMS 而来,当
然,如果程序设计师熟悉 Entity Bean 的运作,那么也可以很轻易的把
RDBMS 用其它的数据库取代,像是 LDAP 。
Entity Bean 主要区分为 Bean-Managed Persistence 以及 Container-
Managed Persistence (简称 BMP 及 CMP) ,这两种 Entity Bean 的型
态不同,但是目的相同,都在于提供资料!这两种 Entity Bean 主要的
差别在于维护资料的角色, BMP 是由 Bean 自行维护资料的一致性,
而CMP 则是由 EJB Container 来维护。一个 Entity Bean 往往代表一张
RDBMS 的表格,这个表格内的一笔一笔的资料,则是透过另外一个
叫做 Primary Key(注三) 的 Class 来加以区分。
Bean-Managed Persistence
当我们说 BMP 是由 Bean 自行维护资料的一致时,有些人会觉得太过






