当前位置: 首页 > 知识库问答 >
问题:

为什么需要无状态EJB池

匡玉堂
2023-03-14

我知道:

对于无状态会话bean,服务器可以在池中维护数量可变的实例。每次客户端请求这样一个无状态bean时(例如通过一个方法),都会选择一个随机实例来服务该请求。

我的问题是:为什么需要游泳池?EJB无状态bean的一个实例不应该足以服务所有请求吗?

另外,如果给定无状态bean的服务器使用的是10个实例的池,那么10是它可以在这样一个bean上处理的最大请求数吗?

你能帮我消除疑虑吗?

编辑:

第4.3节。EJB3.1规范的第14条给出了答案。

4.3.14序列化会话Bean方法以下要求适用于无状态和有状态会话Bean。见第4.8节。5用于单例会话bean并发性要求。

容器序列化对每个有状态和无状态会话bean实例的调用。大多数容器将支持并发执行的会话bean的多个实例;但是,每个实例只看到方法调用的序列化序列。因此,有状态或无状态会话bean不必编码为可重入的。

容器必须序列化所有容器调用的回调(即业务方法拦截器方法、生命周期回调拦截器方法、超时回调方法、beforeCompletion等),并且必须使用客户端调用的业务方法调用序列化这些回调。

在线搜索一下,我的问题是,对于规定EJB无状态方法是线程安全的规范来说,线程池是必要的。因此,如果池中有10个bean,那么只能同时处理10个请求,另一个将排队并分配给第一个空闲bean。如果我错了,请纠正我。

共有3个答案

轩辕修能
2023-03-14

无状态EJB不是无状态的。(嗯?)

我解释。无状态EJB有一些状态,比如一个标志,表示知道EJB是否正在运行/睡眠,或者EJB是否已加载,等等。即,无状态EJB具有隐藏字段。

孙夕
2023-03-14

理论上,单个无状态EJB实例可以处理所有请求,但速度太慢。性能是维护无状态EJB池的主要成就。池在创建EJB和获取任何预定义资源以处理传入请求方面节省了时间。容器保证了线程安全行为,所以池中的多个就绪实例确实提高了性能。

另外,如果一个ginen无状态bean的服务器使用的是一个包含10个实例的池,那么10是它可以在这样一个bean上处理的最大请求数吗?

使用10个实例的池可以同时处理10个同时请求。

严俊友
2023-03-14

如果您创建一个无状态会话bean,它不关心调用哪个客户机,它允许您跨多个客户机重用实例,这样您的应用程序就会有更好的性能,这是无状态会话bean和有状态会话bean之间的主要区别之一。

有状态会话bean将为每个客户端创建一个实例,这将降低应用程序的性能,因为您将同时拥有许多实例。

要使池允许您根据应用程序的负载增加无状态ejb实例访问的数量:)

编辑

如果您只希望所有请求都有一个实例,而这正是您所需要的,那么您可以使用单例会话bean而不是无状态会话bean,无状态会话bean是为这个不需要状态的操作创建的,这个操作将帮助您提高性能。

如果您有一个包含10个实例的池,那么您可以接收任意数量的请求,但只有10个实例将参与这些请求。

 类似资料:
  • 问题内容: Java中的无状态Bean不会在两次客户端调用之间保持其状态。因此,简而言之,我们可以将它们视为具有业务方法的对象。每个方法都带有参数并返回结果。调用该方法时,将在执行堆栈中创建一些局部变量。当该方法返回时,将本地对象从堆栈中删除,并且如果分配了一些临时对象,则无论如何都会对其进行垃圾回收。 在我看来,这与通过单独的线程调用同一实例的方法没有什么不同。那么,为什么容器不能使用bean的

  • 场景:EjbA和EjbB都是远程无状态会话bean。 对b的这些方法调用中的任何一个都可以发生在集群环境中的不同节点/VM上,这是否正确? 甚至连对method1的调用? 我的意思是,如果一些客户端调用方法foo,是否会发生这样的情况:在这个事务中,在node1上调用方法1,下一个对方法1的调用,在同样的foo()调用期间,转到node2上的Ejb实例? 解释下面引用的"Enterprise Ja

  • 互联网是超文本标记语言(HTML)页面的集合,它们彼此链接以形成概念性信息网络。随着时间的推移,静态资源数量增加,图像等更丰富的项目开始成为Web结构的一部分。 高级服务器技术允许动态服务器页面 - 其内容基于查询生成的页面。 很快,需要拥有更多动态网页才能获得动态超文本标记语言(DHTML)。一切都归功于JavaScript。在接下来的几年中,我们看到了跨帧通信,试图避免页面重新加载,然后在帧内

  • 当前信息时代,哪里都是应用程序。这些应用程序们不仅仅是运行人们工作场所的工具 - 它们现在正在经营人们的生活。 对即时响应的需求,完美的行为和更多的功能是前所未有的。 而且,当然,人们期望应用程序在不同类型的设备上运行平稳,特别是在移动设备上。 应用程序执行的速度与它所做的一样重要。 NGINX的核心功能,例如其具有高性能HTTP和反向代理服务器的大规模可扩展事件驱动架构,访问和带宽控制以及与各种

  • 开发人员和运营工程师是两个不同的组织团队,如果发现这两个团队在错误的轨道上协作,则表明需要DevOps。以下是两个团队经常出现的一些问题: 在DevOps之前,开发和运营团队完全孤立。 测试和部署是在设计构建之后完成的独立活动。因此,他们比实际构建周期消耗更多时间。 在不使用DevOps的情况下,团队成员将大量时间花在测试,部署和设计上,而不是构建项目。 手动代码部署会导致生产中出现人为错误 编码

  • 问题内容: 我将ReactJs与Redux一起使用,在一些教程和代码上,我看到人们建议并使用normalizr 保持状态平坦 。但是,保持平坦的真正优势是什么?如果没有,我会遇到任何问题吗?有必要吗 ? 问题答案: 三个主要原因: 不变地更新嵌套的Javascript对象通常会导致难以维护的丑陋代码,除非您使用实用程序库来打包过程 不变地更新嵌套数据要求您返回嵌套层次结构中所有项目的新副本。由于组