gpt4 book ai didi

Java,无状态 session bean

转载 作者:搜寻专家 更新时间:2023-11-01 01:24:15 24 4
gpt4 key购买 nike

无状态 session bean 不维护状态。那么这是否意味着它们不应该有实例变量?

谢谢,
罗杰

最佳答案

在这种情况下,术语“状态”有点误导。它指的是 session 状态,这意味着如果客户端进行多次调用, session bean 无法知道。想象一下一系列调用:

  • reserveSeatsOnFlight();
  • chooseMealPreference();
  • confirmBooking()

您所拥有的是对话状态,这意味着第二次调用必须与第一次调用相同的 bean,否则就没有意义。这就是有状态 session bean 所做的。

无状态 session bean 可以有实例变量,但它们本质上是全局的。如果您有一个无状态 session bean 池(您可能会也可能不会,这取决于容器决定做什么),那么这些实例变量可能存在也可能不存在,从一次调用到下一次调用。所以一般要避免实例变量。这类事情还有其他机制。

让我举个例子。想象一下在无状态 session bean 中的这个调用:

public void bookFlight(List<Passsenger> passengers, FlightNumber flight, Date date) {
...
}

如果您放入一个实例变量来计算预订数量并在每次调用时递增它,那么后续调用可能会调用不同的 bean,因此会看到不同的值。这就是我的意思,它不一定有意义。

所以回到第一个例子,处理这个问题的一种方法是将状态传递回调用者:

public interface ReservationSystem {
public int createNewBooking();
public int reserveSeatsOnFlight(int bookingId, int seats);
public int chooseMealPreference(int bookingId, ...)
...
}

看到上面怎么不再有 session 状态了吗?确实如此,但它现在封装在您传递的 bookingId 中。无状态 session bean 可以检索预订并从另一个停止的地方继续。

关于Java,无状态 session bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2080009/

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