EJB 类型2025年03月17日 | 阅读 9 分钟 EJB是企业JavaBeans的缩写。它是一个服务器端软件元素。它封装了应用程序的业务逻辑。它是用于在Java平台上开发分布式业务应用程序的规范。有三种类型的EJB: 会话Bean、实体Bean和消息驱动Bean。在本节中,我们将详细讨论所有类型的EJB。 ![]() 让我们逐一详细讨论。 会话 Bean该bean萌芽业务理念可以被客户、远程和Web服务系统地使用。当客户端想要使用在服务器上分布的应用程序时,客户端使用会话bean方法。此会话bean为客户提供服务,通过在服务器中执行业务操作来保护他们免受复杂问题的困扰。 为了访问被传达给工作人员的应用程序,客户端调用会议bean的策略。 会议bean为其客户端执行工作,通过在工作人员内部执行业务任务来保护它免受复杂性。 请记住,会话bean不是持久性的。 会话Bean有两种类型
无状态会话Bean无状态会话bean不与客户或客户端保持会话状态。当客户端调用无状态bean的方法时,bean的实例变量可能包含专门针对该客户端的状态,但仅限于调用的时间范围。 当该方法完成后,不应保留客户端的特定状态。但是,客户端可能会更改在池化无状态bean中呈现的实例变量的状态,并且此状态将保留到池化无状态bean的下一次调用。 ![]() 除此之外,在方法调用期间,无状态bean的所有实例都是相同的,允许EJB容器将一个实例分配给任何客户端。因此,无状态会话bean的状态应适用于所有客户端。它可以在Web服务中实现。 由于它们可以维护多个客户,无状态会话bean可以为需要大量客户的应用程序提供更好的适应性。通常,应用程序需要的无状态会话bean比有状态会话bean少,以支持相同数量的客户。 为了提高执行效率,如果它具有以下任何特征,我们可以选择一个无状态会话bean。
有状态会话Bean有状态会话bean与交互式会话相同。 对象的状态由其实例变量的值组成。在有状态会话bean中,实例变量表示独特的客户端/bean会话的状态。由于客户端与bean交互。状态通常被称为会话状态。它在多个请求中保持客户端的状态。因此,我们无法在Web服务中实现它,因为它无法共享。当客户端终止会话时,它将不再与客户端关联。 该状态在客户端/bean会话的时间范围内被保留。如果客户端删除了bean,则会话关闭并且该状态被省略。状态的这种瞬态本质不是一个问题,因为客户端和bean之间的交互结束。因此,不需要保持状态。 ![]() 如果以下任何条件有效,则应使用有状态会话bean
注意:无状态和有状态的会话bean都不是持久性的。单例会话Bean单例会话bean为每个应用程序维护一个实例,该实例存在于应用程序的生命周期中。它提供与无状态会话bean相同的功能。但唯一的区别是每个应用程序只有一个单例会话bean,而在无状态会话bean中,使用bean池。 从该池中,任何会话bean都可以响应客户端。我们可以在Web服务端点中实现它。它负责状态,但如果发生意外崩溃或关闭,它不会保持状态。如果我们要关闭应用程序或关闭时执行清理任务,也可以使用它。这是因为它在整个应用程序生命周期中运行。 ![]() 单例会话bean适用于以下条件
实体 Bean实体bean是一个不可预测的业务实体。它模拟了业务实体或模拟了业务交互中的不同活动。它用于促进包括数据和对该数据进行计算的业务福利。它可以处理几个依赖的、勤奋的对象,以发挥其基本任务。实体bean是一个管理稳定信息并执行复杂业务逻辑的远程对象。它可以被一个基本密钥明确区分。 ![]() 它是一个管理稳定信息,执行复杂业务逻辑,可能利用几个病房Java对象,并且可以由一个基本密钥明确区分的远程对象。它通常是粗粒度的确定对象,因为它们使用存储在几个细粒度的无情Java对象中的稳定信息。元素bean是勤奋的,因为它们在工作人员崩溃或组织的失败中确实可以幸存。 ![]() 每个实体bean都有与其关联的持久标识。这意味着它包含一个唯一的标识,如果我们有一个主键就可以获取。唯一密钥的类型由bean提供者定义。如果主键丢失,客户端可以检索实体bean。如果bean不可用,则EJB容器首先实例化bean,然后重新填充客户端的数据。 ![]() 实体bean信息的勤奋性被赋予了在bean被动化时保存状态并在检测到故障转移时改进状态。它可以忍受,因为该信息由容器以某种形式的数据存储系统(例如数据库)确定地放置。 实体bean通过使用以下两种方法来保留业务数据
Bean 托管持久性与容器管理的持久性相比,bean托管持久性更复杂。因为它允许我们将持久性逻辑明确地写入bean类中。为了将持久性处理代码写入bean类中,我们必须知道正在使用的数据库的类型以及bean类的字段如何映射到数据库。因此,它在数据库和bean实例之间提供了更大的灵活性。 如果部署工具与将bean实例的状态映射到数据库不兼容,则可以使用它来替代CMP。BMP的缺点是需要做更多的工作来定义bean,并且它将bean绑定到特定的数据库类型和结构。 容器管理的持久性在容器管理的持久性中,EJB容器透明且隐式地处理bean和数据库之间的关系。 Bean开发人员专注于数据和业务流程。 主要的约束是EJB隔间很可能无法产生信息库访问语句,其效率与程序员一样。 与BMP不同,CMP不允许我们在实体bean类的方法中编写数据库访问调用。 这是因为持久性由容器在运行时处理。 需要以下两件事来支持CMP
![]() 注意:实体bean已被Java持久性API取代。消息驱动Bean (MDB)MDB是Java消息服务(消息侦听器)。它使用来自队列或主题订阅的消息。它提供了一种使用JMS消息侦听器创建或实现异步通信的简便方法。使用MDB的优点是它允许我们使用JMS侦听器的异步特性。我们可以使用Oracle JMS(Java消息服务)实现消息驱动Bean。 有一个EJB容器(包含MDB池)处理JMS队列和主题。每个传入的消息都由一个由容器调用的bean处理。请注意,没有对象直接调用MDB。MDB的所有调用都来自容器。当容器调用MDB时,它可以调用其他EJB或Java对象以继续请求。 ![]() 它与无状态会话bean非常相似。因为它不保存非正式状态,也用于处理多个传入请求。与JMS相比,EJB具有以下优势
MDB的主要功能是从JMS目标(即队列或主题)读取(接收)或写入(发送)传入。 使用MDB时,请确保它已正确配置和安装。 它与JMS和安装在Oracle数据库上的JMS交互。 数据库保留队列或主题。 下图描述了MDB与JMS目标交互的方式。 ![]() MDB的工作方式如下
请注意,它不处理客户端请求的请求,而是处理放入队列中的请求。 MDB实现了javax.ejb.MessageDriverBean接口并继承了javax.jms.MessageListener类,该类提供了以下方法
Session Bean 和 Entity Bean 的区别下表描述了会话 bean 和实体 bean 之间的主要区别。
下一主题EJB 容器 |
我们请求您订阅我们的新闻通讯以获取最新更新。