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

ejb线程安全:我们需要它吗?

郝哲茂
2023-03-14

考虑一个无状态EJB

从EJB3.1规范中
容器将支持并发执行的会话
bean的许多实例;但是,每个实例只看到一个
序列化的方法调用序列。因此,有状态或
无状态会话bean不必被编码为可重入的

因此无状态seession bean一次最多只能“服务”一个请求,这通常是由管理bean池的容器实现的。这一切的伟大目标是线程安全。

我的问题是为什么我们需要这种形式的线程安全?我的意思是Spring bean是单例的,不是线程安全的(它们一次可以服务任何数量的请求),我们对此没有任何问题。

共有1个答案

江洲
2023-03-14

如果无状态会话bean的成员变量本身不是线程安全的(例如,SAXParser),则需要这种形式的线程安全。但是,由于无状态会话bean不像有状态会话bean那样具有客户端亲和性,因此用例无疑相对较少,servlet编程模型似乎已经表明这种级别的保护可能不是必需的,因此,如果您不需要线程安全,那么从EJB 3.1开始,您可以使用具有bean管理的并发性的单个会话bean。

线程安全限制还为EJB容器提供了一些额外的优化自由。例如,如果EJB容器知道一次只有一个线程可以使用无状态会话bean,那么它可以在方法进入/退出时操作注入对象的状态,以便这些对象不需要使用ThreadLocal(例如,UserTransaction或SessionContext)。

 类似资料:
  • 问题内容: 我需要在性能关键的环境中使用MessageDigest对来自多个线程的多个键进行哈希处理。我知道MessageDigest不是线程安全的,因为它在其对象中存储其状态。什么是实现密钥的线程安全哈希的最佳方法? 用例: 特别: ThreadLocal是否可以保证正常工作?它会有性能损失吗? getInstance返回的对象是否不同,并且它们不会互相干扰?文档说“新”对象,但是我不确定它是否

  • 2本关于gulp的手册说,我需要首先在全局范围内安装gulp(带-g标志),然后在本地再安装一次。为什么我需要这个?

  • 问题内容: 我相信大家都知道setUp(@Before)将在任何测试方法之前执行,而tearDown(@After)将在测试方法之后执行。 我们也知道Junit会为 每个测试方法 创建一个Test实例。 我的问题是,我们可以只将setUp方法的内容移至类Constructor并删除setUp方法吗?是否有任何特定理由保留setUp方法? 问题答案: 这篇(旧的)JUnit最佳实践文章将其描述如下:

  • 在C 03中,我们有模板显式实例化定义(

  • 我试图调用一个安全的远程ejb,但我不能。我使用ejb-client-API。 应用程序部署在名为som的ear中。耳朵 我用的是Wildfly 8.2.0决赛 代码客户端: JBossEJB客户端。财产 EJB 独立的。xml 服务器日志 客户端日志 我可以看到,之所以使用安全域“som_security_domain”的配置,是因为它运行查询以获取密码和主体的角色,但在尝试执行安全域的Auth