转载:EJB中的三种Bean类型

【摘自Head First EJB】

实体bean(entity bean)

实体bean用来表示持久存储库里的一个东西。这通常就是指数据库里的一个东西,实体bean的一个实例就表示数据库表中的一行(不过,如果数据库得到了规范化,bean也有可能从多个表的数据行提取信息,也就是说,可能对应到多个表中的多个数据行)。实体bean的一个典型例子就是Customer(顾客),一个Customer实体bean可能表示Bo Olean(ID#343),另一个Customer实体bean可能表示的是Trixia Lin(ID#870)。

消息驱动bean(message-driven bean)

只有在需要一个JMS客户的时候才会实用消息驱动bean。换句话说,消息驱动bean可以监听来自JMS消息服务的消息。客户绝对不会直接调用消息驱动 bean;要想让消息驱动做点什么事情,客户必须向一个消息服务发出一条消息。这说明,消息驱动bean没有相应的EJBObject,因为服务器会从消息服务直接得到客户请求,而不是当客户向bean发出调用时截获客户请求。NewCustomerNotification订购者就是一个典型的消息驱动 bean。

会话bean(session bean)

什么时候用会话bean呢?……应该说剩下的所有事情都要用会话bean来完成。几乎各种后端服务都可以(而且通常应该)使用会话bean来实现。实体 bean表示的是一个东西,而会话bean通常表示一个过程。可以换种说法解释,当你想到实体bean的时候,应该能想到这是一个名词,而在考虑会话 bean时,脑海里应该有动词的概念。购物就是典型的会话bean例子,信用卡处理系统也可以算做一个会话bean。

Session Bean 还可以再细分为 Stateful Session Bean 与 Stateless Session Bean ,这两种的 Session Bean都可以将系统逻辑放在 method之中执行,不同的是 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 的优势却在于他可以维持使用者的状态。

猜你喜欢

转载自jackyyang8.iteye.com/blog/1328940