Java EE 6 Tutorial говорит:
Чтобы повысить производительность, вы можете выбрать сеанс без состояния bean, если он имеет какие-либо из этих признаков:
- Состояние bean s не имеет данных для конкретного клиента.
- В одном вызове метода bean выполняет общую задачу для всех клиентов. Например, вы можете использовать сеанс без состояния bean, чтобы отправить электронное письмо, подтверждающее онлайн-заказ.
- bean реализует веб-службу.
Singleton session beans применимы в следующих случаях:
- Состояние должно быть общим для приложения.
- Одному предприятию bean необходимо одновременное обращение к нескольким потокам.
- Приложению необходимо выполнить bean для выполнения задач при запуске и завершении работы приложения.
- bean реализует веб-службу.
Но что использовать, если:
- никакое состояние не должно использоваться совместно приложением
- к одному предприятию bean можно было обращаться несколькими потоками одновременно
- Никаких задач при запуске или дроблении не требуется.
Скажем, например, у меня есть служба входа в систему со следующим интерфейсом:
public interface LoginService {
boolean authenticate(String user, String password);
}
Должен ли он быть аннотирован с помощью @Singleton или @Stateless? Каковы преимущества того и другого? Что делать, если в LoginService необходимо ввести EntityManager (который будет использоваться одновременно)?
Дополнение: Я думаю о Java EE-аналоге службы Spring beans, которые являются безстоящими синглтонами. Если я правильно понимаю, что Java EE-экземпляр - это @Stateless session beans и @Singleton beans, используются для настройки приложения при запуске или очистке при завершении работы или для хранения объектов широкого применения. Правильно ли это?