将单例会话 Bean 注入无状态会话 Bean

Inject Singleton Session Bean into a Stateless Session Bean

是否允许(和良好做法)通过在无状态会话 Bean 中使用单例会话 Bean 在我们的应用程序中保存一些共享信息?

SSB 将被注入 SLSB。

@Stateless
public class MySLSB {

    @Inject
    MySSB mySSB;

-

@Singleton
@Lock(READ)
public class MySSB implements Serializable {

    private static final long serialVersionUID = 1L;

是的,这是允许的,我认为这是一种很好的做法。在我正在使用的项目中,存储了从文件中读取的全局属性。这是一个很好的做法,因为你将它存储在一个地方,如果你需要这些信息,那么你只需要注入你的单例 bean。我认为这是好莱坞原则的一个很好的例子。

超出允许范围。在无状态或有状态 EJB 中使用单例注入将允许您在 SLSB 中调用 SSB 上的业务方法。 一个微不足道的优势是使用 SSB 并发功能。 在您的示例中,您对 SSB 的所有方法调用都将在读取时被锁定,这意味着您的所有线程都将在读取模式下访问您的 SSB 方法,除非线程在写入时持有锁定。