根据Java EE 6教程,以下特点可选择无状态会话bean来提高性能:
如果以下情况适用于bean,您可以选择无状态会话bean以提高性能:
- bean的状态对于特定客户端没有数据。
- 在单个方法调用中,bean为所有客户端执行通用任务。例如,您可以使用无状态会话bean发送确认在线订单的电子邮件。
- bean实现了Web服务。
单例会话bean适用于以下情况:
- 需要跨应用程序共享状态。
- 需要同时访问单个企业bean的多个线程。
- 应用程序需要企业bean在应用程序启动和关闭时执行任务。
- bean实现了Web服务。
但如果:
- 应用程序不需要共享状态
- 多个线程可以同时访问单个企业bean
- 不需要在启动或关闭时执行任何任务
例如,我有一个具有以下接口的登录服务:
public interface LoginService {
boolean authenticate(String user, String password);
}
应该使用@Singleton还是@Stateless进行注释?它们各自的好处是什么?如果LoginService需要被注入一个EntityManager(可能会被并发使用),该怎么办?
补充:我正在考虑Spring服务bean的Java EE对应项,它们是无状态单例。如果我理解正确,Java EE的对应项是@Stateless session bean和@Singleton bean,用于在启动时配置应用程序、清理关闭或保存应用程序范围内的对象。这个理解正确吗?