Я следую этому руководству, в котором также используется 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 в этом случае?