企业 Bean
企业 Bean 是 Java™ 组件,可与其他资源一起使用以创建 Java 应用程序。有三种类型的企业 Bean:实体 Bean、会话 Bean 和消息驱动的 Bean。
所有 Bean 位于 Enterprise JavaBeans (EJB) 容器中,此容器提供 Bean 和他们所在的应用程序服务器之间的接口。
EJB 2.1(及更低版本)规范将实体 Bean 定义为一种存储持久数据的方法,因此这些实体 Bean 需要连接至某种持久存储。此存储可能是数据库、现有的旧应用程序、文件或另一个类型的持久存储。
EJB 3.0 规范不推荐使用 EJB 1.1 类型实体 Bean。Java Persistence API (JPA) 规范旨在替换建议不要使用的企业 Bean。虽然 JPA 替代项被称为实体类,但不应该将其与实体企业 Bean 相混淆。JPA 实体不是企业 Bean,也不要求在 EJB 容器中运行。
会话 Bean 通常包含应用程序的高级和中级业务逻辑。会话 Bean 上的每种方法都执行特定的高级操作。例如,在帐户之间提交订单或转换资金。会话 Bean 通常在他们的业务逻辑期间调用实体 Bean 的方法。
会话 Bean 可以是“有状态”、“无状态”或“独立”的 Bean。 有状态的 Bean 实例在其生存期由单个客户机使用,客户机会在该实例中执行一系列的方法调用,这些方法调用与该客户机在时间方面彼此相关。一个示例是购物车,在线购物会话期间此示例中的客户机将商品添加到购物车。相反,无状态 Bean 实例在其生存期通常由许多客户机使用,因此无状态 Bean 适用于在单种方法调用范围内可以完成的业务逻辑操作。仅在绝对必要时才应该使用有状态 Bean。使用无状态 Bean 可提高调试、维护及定制应用程序的能力。
EJB 3.1 规范引入了独立会话 Bean。EJB 容器仅初始化独立会话 Bean 的一个实例,该实例由所有客户机共享。由于单个实例由所有客户机共享,所以独立会话 Bean 将有特殊的生命周期和并行语义。单独会话 Bean 可以具有业务本地客户机视图、业务远程客户机视图以及 Web Service 客户机视图;它们不能具有 EJB 2.1 本地或远程客户机视图。
- 定义业务接口。
- 定义实现业务接口的类。
- 添加带注释或带 XML 部署描述符的元数据。
package ejb3demo;
@Stateful
public class Cart3Bean implements ShoppingCart {
private ArrayList contents = new ArrayList();
public void addToCart (Object o) {
contents.add(o);
}
public Collection getContents() {
return contents;
}
}
如果模块是 EJB 3.x 模块,那么 EJB 组件可使用诸如 @EJB 之类的注释以及其他可注入的 @Resource 引用。Web 应用程序客户机和应用程序客户机都可以使用部署描述符定义的 EJB 引用。如果该引用适用于不带 home 接口的 EJB 3.x 会话 Bean,那么应该使用部署描述符中的 null <home> 或 <local-home> 设置来定义该引用。
Web 应用程序客户机及应用程序客户机也可以将 @EJB 注入用于对同一企业归档 (EAR) 文件中 EJB 会话 Bean 的引用,但绑定必须在容器中使用自动链接支持,或者注释必须使用由部署描述符定义并在安装应用程序时进行绑定的引用的名称。有关自动链接的更多信息,请参阅“EJB 3.x 应用程序绑定支持”主题。
- EJB 容器和 Java 消息服务 (JMS) 提供程序协同工作来处理消息。当消息从另一个应用程序组件通过 JMS 到达时,EJB 容器通过 onMessage 方法调用将消息转发到消息驱动的 Bean 实例,然后该实例处理此消息。在其他方面,消息驱动的 Bean 类似于无状态会话 Bean。
- EJB 容器与 Java 连接器体系结构 (JCA) 资源适配器协同工作,以处理来自企业信息系统 (EIS) 的消息。当来自 EIS 的消息到达时,资源适配器接收到此消息并将它转发给稍后将处理此消息的消息驱动的 Bean。EJB 容器为消息驱动的 Bean 提供服务(如事务支持)的方式与给其他企业 Bean 提供服务的方式相同。
需要数据访问的 Bean 使用数据源,这些数据源定义了到后端服务器的网络连接集合。