我有一个需要访问工厂类的无状态会话bean。将这个工厂类声明为SLSB中的静态或实例成员最好吗?我是否正确地说,由于SLSB被重用,每个bean只有一个工厂实例被创建(当使用实例成员选项时),而不是每个请求一个实例?无状态EJB中的静态vs实例成员
1
A
回答
1
SLSB实例被集中在一起,因此可能会在其整个生命周期中提供很多请求,所以如您所说,不会为每个请求重新创建实例变量。
SLSB的“自然”方式是使每个实例独立,无静态,不需要实例之间的同步。因此,如果可能的话,我会为每个SLSB实例创建一个工厂实例。
1
不要认为每个请求都不会创建SLB的实例。该容器的权利在于创建一个请求;同样,它也被允许只有一个实例(我认为)。更一般地说,容器将保持一个池。
如果实例化和/或初始化您的SLSB相对昂贵,您应该调查您的容器将会执行的操作,并且如果可能的话,明确地将其配置为您希望的操作。
假设你这样做,那么在SLSB类中保留实例字段应该没有问题。
0
只要SLSB从池中重用,实例变量就不会重新创建。 SLSB的生命周期相当简单:创建一个实例,n次使用它来处理n个请求,并最终丢弃它。所有这些操作都由容器执行。所以在bean的创建过程中(由我们控制),我们可以初始化这些实例变量。但是,为了避免副作用,请不要在这些变量初始化后修改这些变量的内容。
如果您愿意,您可以使用静态实例,但请记住,您必须手动处理同步问题;此外,你被限制在当地的工厂。
EJB 3.1与@Singleton EJB提供了一个非常优雅的解决方案。
相关问题
- 1. C#:静态成员VS实例成员
- 2. Form实例成员和静态成员
- 3. C#\ Lock \ lock实例成员VS锁定静态成员
- 4. 实用程序/助手无状态静态类vs无状态非静态类
- 5. 静态成员vs静态全局
- 6. 静态方法vs静态实例
- 7. 实例类的静态成员
- 8. 无法在C#中的静态类中声明实例成员
- 9. @EJB的无状态bean保证是唯一的ejb实例?
- 10. 静态成员实例引用问题
- 11. 强制模板静态成员实例
- 12. 静态成员访问比AS3中的实例成员慢吗?
- 13. 无状态EJB与注入更大的EJB实例
- 14. 必须静态对象实例有静态成员变量吗?
- 15. 静块VS静态成员初始化
- 16. 访问静态成员静态成员
- 17. 单身静态成员vs静态本地会员vs本地会员
- 18. 为什么在单例类中实例成员是静态的?
- 19. 静态成员
- 20. 通过本地静态实例访问实例成员
- 21. 有状态和无状态的EJB依赖于实现
- 22. “状态模式”vs“每个状态的一个成员函数”?
- 23. NoClassDefFoundError的ANS静态VS实例级别
- 24. 请澄清术语类静态对象(vs类静态成员)
- 25. 静态Vs非静态方法和成员交互
- 26. 使用EJB的无状态EJB保持状态时间表
- 27. Spring的EJB无状态bean
- 28. 从另一个Glassfish实例访问一个无状态的EJB
- 29. 如何配置无状态EJB(JBOSS)的最小实例?
- 30. EJB无状态 - 私有成员初始化
有趣。我可以想象一个容器可能选择通过有效地拥有零池大小来应对压力的场景,我可以想象选择不配置池。我还可以看到,后者的规范允许容器为每个请求创建一个新实例,但实际上是否在有用的生产质量环境中遇到了这种情况? – djna 2009-10-13 17:38:48
我对此表示怀疑,但spec *确实允许它,因此代码不应该假设其他情况,*除非*您明确约束了容器配置。 – skaffman 2009-10-13 19:58:58