Я следую этому руководству, в котором также используется 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: [email protected]
Здесь мое наблюдение:
- Когда я устанавливаю Bean как
@Stateless, я всегда получаю тот же идентификатор объекта, и счетчик всегда увеличивается. - Когда я устанавливаю Bean как
@Stateful, я получаю новый экземпляр при каждом обновлении страницы. - Когда я устанавливаю его в
@Singleton, я получаю те же результаты, что и когда я устанавливаю его в@Stateless: тот же идентификатор объекта, счетчик увеличивается.
Итак, что я действительно хотел бы понять: какая разница между @Stateless и @Singleton EJB в этом случае?