“从开发者的角度来看,EJB是在称为EJB容器的特定运行时环境中执行的一段Java代码,容器提供组件服务。”
这句话中其实提到了EJB 3的两个部分:EJB组件、EJB容器。EJB组件本身是不能用来处理业务逻辑的,EJB组件需要使用EJB容器提供的服务,如持久化、安全、Web服务支持等。因此学习EJB 3,不仅要学习如何创建EJB组件,还要学习如何使用EJB容器中的服务。
1 EJB组件
有三种类型的EJB组件:会话bean、消息驱动bean和实体bean。会话bean和消息驱动bean用于实现业务逻辑,而实体bean用于数据持久化。
1.1 会话bean
客户端调用会话bean,用于执行特定业务操作。存在两种类型的会话bean:有状态(stateful)会话bean和无状态(stateless)会话bean。有状态会话bean可以保存客户应用程序的状态,这在一些长会话中是必要的。无状态会话bean不保存任何客户程序的数据,因此即使在大量客户程序同时访问会话bean时也不会占用大量的服务器资源,无状态会话bean可以暴露为Web服务。
1.2 消息驱动bean
消息驱动bean(MDB)也处理业务逻辑,但是客户端从不直接调用MDB方法,相反,由发送到消息服务器的消息触发MDB,这可以用来在系统组件之间发送异步消息。
1.3 实体bean
实体bean用来封装业务数据,业务逻辑操作实体bean,并通过JPA将实体bean映射到关系表中去。
2 EJB容器
EJB组件存在于容器中,组件和容器一起被看作为企业应用程序开发提供有价值服务的框架。
EJB 3中,EJB组件是通过在类或方法上添加注解来使用容器提供的服务的。EJB 3中大量使用注解,注解使得以POJO形式存在的EJB组件具有了传统EJB的功能,因此有 POJO + 注解 = EJB 。