【发布时间】:2011-01-02 02:34:56
【问题描述】:
为了提高性能,如果无状态会话 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 会话 bean,而 @Singleton Bean 用于在启动时配置应用程序或在关闭时清理或保存应用程序范围的对象。这是正确的吗?
【问题讨论】:
标签: java singleton ejb-3.0 ejb stateless