想象一个被大量使用的服务对象,它被实现为 EJB 2.1 SLSB,并且由于没有任何状态,它本身也恰好是线程安全的。它所有的公共方法都是事务性的(通过 CMT),最简单的需要一个事务,但有些需要一个新的事务。
如果我将此 SLSB 转换为真正的单例 POJO(例如使用 DI 框架),这将如何影响应用程序的可伸缩性?当服务是 SLSB 时,EJB 容器将管理一个实例池,每个客户端都可以从中获取自己的副本,所以我想知道将其转换为单例 POJO 是否会对该单个实例引入某种争用。
FWIW,此服务的方法都不是synchronized
.
澄清:我将 SLSB 转换为 POJO 的动机是简化对象的生命周期(真正的单例与容器管理)和代码本身(一个接口和一个带注释的 POJO,与三个接口、一个 bean 类和一堆ejb-jar.xml 中的 XML)。
此外,FWIW,所讨论的服务是在 JBoss 3.x 上运行的并置 Web 应用程序的一个组件。