gpt4 book ai didi

java - EJB_Y(由EJB_X调用)是否需要注释为 "@Stateful"才能线程安全?

转载 作者:行者123 更新时间:2023-12-01 09:24:52 25 4
gpt4 key购买 nike

前提:

  1. 无状态 EJB_X 包含对 EJB_Y 的带注释的引用(例如“@EJB EJB_Y”)

  2. EJB_X 在调用其业务方法之前需要初始化 EJB_Y

  3. 假设 EJB_X (a) 初始化,然后 (b) 调用 EJB_Y 的业务方法 - 即“多步骤”过程(?)

问题:

EJB_Y 是否需要注释为“@Stateful”才能保证线程安全?

注意:
否则EJB_Y只是一个简单的POJO(例如POJO_Y) - 但是,似乎为了让日志记录“@Interceptor”类访问方法参数使用EJB_X对EJB_Y业务方法的调用,EJB_Y必须是一个EJB(? )...

其他信息:

a. EJB 3.1

b. EJB_X 公开 REST 方法

c.目前降级为运行 JDK 1.8.x 的 WebLogic 12.1.3

最佳答案

一个问题:

  1. EJB_X 初始化 EJB_Y 是什么意思?它是初始化EJB的容器。

还有几点:

  1. EJB 公开休息服务是允许的,但从 Oracle 的角度来看,公开业务逻辑是一种“快速而肮脏”的方法,应该在不久的将来重新审视(我清楚地记得我的架构师考试中的这个问题) )。为了简化,EJB 应该是 REST 服务的后端,或者更好的是,Web 服务应该位于集成层。
  2. 无状态 EJB 以及对其他无状态 EJB 的所有后续调用都是线程安全的,并且线程安全由容器(本例中为 weblogic)保证,无需使其安全。如果您在 EJB 世界中需要多线程,请寻找 @Singleton
  3. 顺便说一句,我一直觉得 Sun/Oracle 中的“无状态”和“有状态”这个词有点误导,如果英语允许的话,我从一开始就会说“无 session ”和“有 session ”:-)

[更新]

从 SLSB 调用 SFSB 没有意义。最终你会得到不可预测的结果,只是因为 SLSB 的本质是生活在一个池中并在客户之间共享。您还将失去 SLSB 最重要的好处之一:可扩展性。

我不太了解您的架构和设计,但我会通过摆脱前端 EJB 并构建一个类来充当 Web 服务(通过使用注释)来重新访问 Web 服务层。然后,如果您想留在 EJB 世界中,请在 EJB 调用上下文中传递所有数据,然后从 EJB 本身检索它。

关于java - EJB_Y(由EJB_X调用)是否需要注释为 "@Stateful"才能线程安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39921267/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com