gpt4 book ai didi

ejb - @Stateless 和 @Singleton 的区别

转载 作者:行者123 更新时间:2023-12-03 08:51:52 28 4
gpt4 key购买 nike

我正在关注 this tutorial它还使用 EJB:

package exercise1;

import java.util.Random;
import javax.ejb.Stateless;
import javax.inject.Named;

@Stateless
public class MessageServerBean {
private int counter = 0;

public String getMessage(){
Random random = new Random();
random.nextInt(9999999);
int myRandomNumber = random.nextInt();
return "" + myRandomNumber;
}

public int getCounter(){
return counter++;
}
}

这是一个输出示例:

来自 Facelets 的问候
留言是:84804258
计数器为:26
消息服务器 Bean 是:exercise1.MessageServerBean@757b6193

这是我的观察:
  • 当我将 bean 设置为 @Stateless我总是得到相同的对象 ID,计数器总是递增。
  • 当我将 bean 设置为 @Stateful每次刷新页面时都会得到一个新实例。
  • 当我将其设置为 @Singleton 时我得到的结果与将其设置为 @Stateless 时相同: 相同的对象 ID,计数器递增。

  • 所以,我实际上想了解的是: @Stateless 和有什么区别?和 @Singleton在这种情况下是 EJB 吗?

    最佳答案

    您会看到相同的输出,因为一次只有一个客户端访问 EJB。应用程序服务器能够为每次调用回收相同的无状态 EJB 对象。如果您尝试并发访问——同时有多个客户端——您将看到新的无状态实例出现。

    请注意,根据服务器负载,即使是由同一客户端进行的两次连续方法调用,也可能会在不同的无状态 EJB 对象中结束!

    对于单例 EJB,没有区别——每个应用程序始终只有一个实例,无论有多少客户端尝试访问它。

    关于ejb - @Stateless 和 @Singleton 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14464823/

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