dea*_*mon 27 java singleton ejb stateless ejb-3.0
在Java EE 6教程说:
要提高性能,您可以选择无状态会话bean,如果它具有以下任何特征:
- bean的状态没有特定客户端的数据.
- 在单个方法调用中,bean为所有客户端执行通用任务.例如,您可以使用无状态会话bean发送确认在线订单的电子邮件.
- bean实现了一个Web服务.
单例会话bean适用于以下情况:
- 状态需要在整个应用程序中共享.
- 单个企业bean需要同时由多个线程访问.
- 应用程序需要企业bean在应用程序启动和关闭时执行任务.
- bean实现了一个Web服务.
但是如果使用什么:
比如说我有一个具有以下界面的登录服务:
public interface LoginService {
boolean authenticate(String user, String password);
}
Run Code Online (Sandbox Code Playgroud)
它应该用@Singleton或@Stateless注释吗?这一个和另一个有什么好处?如果LoginService需要注入一个EntityManager(可以同时使用),该怎么办?
另外:我正在考虑Spring服务bean的Java EE对应物,它们是无状态单例.如果我理解正确,Java EE对应的是@Stateless会话bean,并且@Singleton Beans用于在启动时配置应用程序或在关机时清理或保存应用程序范围的对象.它是否正确?
mjn*_*mjn 13
我会选择无状态 - 服务器可以生成bean的许多实例并并行处理传入的请求.
Singleton听起来像是一个潜在的瓶颈 - 默认的@Lock值是@Lock(WRITE),但可以更改为@Lock(READ)用于bean或单个方法.